@ebarooni/capacitor-calendar
    Preparing search index...

    Changelog

    All notable changes to this project will be documented in this file.

    This project adheres to Semantic Versioning.

    Version 8.x.x

    Changelogs for the versions supporting Capacitor 8.

    • Structured reject codes 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 rejects
    • Structured reject code EB-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 platforms
    • Android rejects a present but non-numeric or empty event id with Invalid event ID. (EB-CLDR-0001) instead of the missing-id message
    • Android listCalendars and getDefaultCalendar now report allowsContentModifications from the calendar access level (#305)
    • Structured reject code EB-CLDR-0100 (CapacitorCalendarErrorCode.MissingDeclaration) when a required Info.plist usage description or AndroidManifest permission is missing
    • MCP docs://web-behavior resource (export-only web model)
    • Web ICS duration support (endDate wins when both set; same-day all-day durations bump to a one-day exclusive DTEND)
    • Web 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(...)
    • Optional Calendar.colorName (SystemColorName | null) on calendar/list payloads (null on Android)
    • SystemColorName for named system colors used in color write/read
    • Document Web ICS limits and that permission APIs stay unimplemented on Web
    • Align EventRecurrenceRule @platform tags with the Web ICS builder
    • Example app: toast after ICS download; disable unsupported Web actions; enable prompt path on Web
    • Example app: reminders list color select (named, hex, or omit) for create/update reminders list
    • Example app: calendar color select marks named colors valid for create/modify calendar (Android stays hex-only; create event stays hex)
    • Example app: Methods / Options tabs — IDs and method buttons on Methods; Options has global recurring-event fields plus per-method accordions with independent title/color fields
    • Example app: split method wire-up into src/js/methods/ with shared helpers in src/js/utils/
    • Example app: list methods populate pickable result selects; create/update paths write returned ids into the matching Methods ID fields
    • ModifyEventWithPromptOptions no longer extends create-prompt options (avoids Web-only fields in modify docs)
    • fetchAllRemindersSources(...) now returns FetchAllCalendarSourcesResult (same { result } shape)
    • Reminders JSDoc: sourceId / commit wording, list color named|hex write and hex/colorName read, priority 0–9, and Android-null fields on RemindersList
    • createRemindersList / updateRemindersList / createCalendar / modifyCalendar color accepts a SystemColorName or hex #RRGGBB / #RRGGBBAA; invalid values reject with Invalid color format. (see BREAKING.md)
    • iOS calendar create/modify uses the same named|hex parse path as reminders lists; Android calendar color stays hex-only (named rejects); omit-on-create for calendars remains #007AFF
    • Align reminders Info.plist @permissions rows to iOS 13-16 for NSRemindersUsageDescription
    • Web createEventWithPrompt confirm time summary uses the same end resolution as ICS export
    • Web confirm default title collapses newlines to one line
    • UpdateRemindersListOptions.color @since tag (8.2.0)
    • iOS hex color parsing rejects non-hex digits (previously could resolve to black)
    • Android 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(...)
    • Optional commit on iOS for createReminder(...), modifyReminder(...), and deleteReminder(...) (default true; pass false to batch with CapacitorCalendar.commit())
    • Clearable optional fields on 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)
    • iOS reminder recurrence uses string RecurrenceFrequency on create, modify, and read (see BREAKING.md)
    • iOS createReminder / modifyReminder now apply recurrence.end
    • iOS createReminder / modifyReminder reject invalid or non-string frequency with Invalid frequency.
    • iOS reminder and event recurrence parsing accepts JS numbers whether bridged as Int or Double (interval, end, and related fields)
    • Deprecated ReminderRecurrenceFrequency docs now point at string values ('daily', …) instead of RecurrenceFrequency.DAILY
    • iOS reminder alerts docs now match create and modify (including the 2-alert limit), and clarify that offsets are relative to startDate
    • iOS createReminder / 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)
    • Android listEventsInRange(...) treats ORIGINAL_ID of 0 as absent when deriving masterId and isPartOfSeries
    • Web support for createEvent(...) — 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 downloads
    • downloadIcsFile(...) helper to download an .ics File in the browser
    • CreateEventResult.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(...)
    • iOS openCalendar(...) no longer rejects when canOpenURL fails without a calshow query scheme (opens Calendar directly and reports launch failure)
    • Android checkAllPermissions() response shape now nests permission states under result (matching iOS and the TypeScript contract)
    • Android checkPermission(...) returns "prompt" for readReminders / writeReminders (aligned with checkAllPermissions())
    • iOS selectCalendarsWithPrompt(...) cancel now returns an empty result (Done still returns the selected calendars)
    • iOS selectCalendarsWithPrompt(...) no longer leaves a Promise hanging when called again while the chooser is open (new call is rejected)
    • Android requestAllPermissions() now reports readCalendar from the read permission state (aligned with checkAllPermissions())
    • Android requestPermission(...) distinguishes a missing scope (Scope must be provided.) from an invalid scope (Invalid scope.)
    • Android deleteCalendar(...) for calendars created via createCalendar(...) (sync-adapter URI)
    • Android calendar color reads emit #RRGGBB / #RRGGBBAA (aligned with iOS; was #AARRGGBB)
    • Android 8-digit hex color inputs parse as RRGGBBAA (aligned with iOS)
    • Android createCalendar(...) no longer requires color
    • modifyCalendar(...) with only id is rejected on Android and iOS
    • iOS modifyCalendar(...) rejects calendars that do not allow content modifications
    • Calendar missing-id errors no longer say Event ID must be provided.
    • OpenCalendarOptions.date is optional and documented as milliseconds since the epoch (defaults to now)
    • Documented platform limits for calendar permission request methods
    • Calendar.title and Calendar.color are string | null (matching runtime nullability)
    • Documented permission and empty/null behavior for listCalendars(...), getDefaultCalendar(...), fetchAllCalendarSources(...), and selectCalendarsWithPrompt(...)
    • createCalendar(...) color is optional on Android and iOS and defaults to #007AFF
    • iOS createCalendar(...) uses iCloud then local when sourceId is omitted; an unknown sourceId is rejected
    • Android modifyCalendar(...) updates both display name and internal name when title is set
    • Shared calendar CRUD errors: missing/invalid calendar id, calendar not found, invalid color, and modify with no fields
    • span option on Android for deleteEvent(...), deleteEventsById(...), and deleteEventWithPrompt(...)
    • Optional 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(...)
    • Android recurring delete: THIS_EVENT cancels one occurrence; THIS_AND_FUTURE_EVENTS truncates the series or deletes it when instanceDate is omitted
    • Method to delete reminders lists on iOS with deleteRemindersList(...)
    • Method to update reminders lists on iOS with updateRemindersList(...)
    • Method to create reminders lists on iOS with createRemindersList(...)
    • modifyEvent on Android was not updating location
    • Deprecated proguard-android.txt
    • Support for recurring events on Android and iOS
    • Recurrence rules for createEvent and createEventWithPrompt
    • Recurrence support for modifyEvent and modifyEventWithPrompt
    • Listing recurring event instances correctly using expanded event occurrences on Android
    • listEventsInRange on Android now returns all event occurrences within the given range, including recurring events
    • Recurring events on Android now correctly use DURATION instead of DTEND
    • Improved consistency between iOS and Android for recurring event behavior

    Version 7.x.x

    Changelogs for the versions supporting Capacitor 7.

    • modifyCalendar on Android and iOS
    • deleteReminderWithPrompt on iOS
    • commit() method to apply changes to the calendar at a later time
    • createCalendar on Android
    • deleteCalendar on Android
    • deleteReminder on iOS to delete a single reminder
    • getReminderById on iOS
    • deleteEvent on Android and iOS
    • deleteEventWithPrompt on Android and iOS
    • checkPermission takes CalendarPermissionScope as scope instead of PluginPermission
    • checkAllPermissions returns { result: CheckAllPermissionsResult; } instead of PluginPermissionsMap
    • requestPermission takes CalendarPermissionScope as scope instead of PluginPermission
    • requestAllPermissions returns { result: RequestAllPermissionsResult; } instead of PluginPermissionsMap
    • requestAllPermissions is marked as deprecated
    • requestPermission is marked as deprecated
    • Replaced alertOffsetInMinutes, notes, and eventIdOptional in createEventWithPrompt
    • createEventWithPrompt on Android no longer returns an id (eventIdOptional removed)
    • PluginPermissionsMap
    • PluginPermission
    • Support for Capacitor 7
    • SPM support on iOS
    • Angular example app

    Version 6.x.x

    Changelogs for the versions supporting Capacitor 6.

    • Android build error related to Kotlin version
    • eventIdOptional property to createEventWithPrompt on Android
    • Modifying reminders on iOS
    • Return type of modifyEvent on iOS
    • Serialization error for calendar events on iOS
    • Color to calendar object
    • Modify events programmatically
    • Modify events with prompt
    • Method for fetching available calendar sources on iOS
    • Not being able to read event color
    • Not being able to read events timezone
    • Error when creating event
    • Support for Capacitor 5 (this plugin will no longer receive updates for it)
    • URL and notes to create options in createEvent and createEventWithPrompt
    • Ability to set multiple alarms when creating events in createEvent and createEventWithPrompt
    • requestFullCalendarAccess on Android was not functional
    • getDefaultCalendar now returns null when there is no default calendar, instead of throwing an error
    • getDefaultRemindersList now returns null when there is no default list, instead of throwing an error
    • New methods to request runtime permissions, alongside the existing permission constants
    • createEventWithPrompt throwing error because of undefined event id
    • Fetch reminders from selected or all reminder lists (iOS)
    • Delete reminders by id (iOS)
    • Using isAllDay with createEventWithPrompt on Android was not functional
    • Create calendars (iOS)
    • Delete calendars (iOS)
    • listCalendars on Android returning calendar id of type number instead of string
    • createEventWithPrompt on Android was not using all options
    • createEventWithPrompt and selectCalendarsWithPrompt were throwing an error instead of returning an empty array on cancel
    • Alarm support for created events
    • createEventWithPrompt now accepts options
    • Misplaced code in plugin iOS implementation
    • Example app missing permissions for contact on iOS 16 and lower
    • Permissions documentation on iOS incomplete for iOS 16 and lower
    • Check permissions
    • Check all permissions
    • Request permissions
    • Request all permissions
    • Create event with prompt
    • Create event programmatically
    • Select calendars with prompt (iOS)
    • List calendars
    • Get default calendar
    • Get all reminders lists (iOS)
    • Get default reminders list (iOS)
    • Create reminder (iOS)
    • Open calendars app
    • Open reminders app (iOS)
    • List events in a specified date range
    • Delete events by ID

    Version 5.x.x

    Changelogs for the versions supporting Capacitor 5.

    • URL and notes to create options in createEvent and createEventWithPrompt
    • Ability to set multiple alarms when creating events in createEvent and createEventWithPrompt
    • requestFullCalendarAccess on Android was not functional
    • getDefaultCalendar now returns null when there is no default calendar, instead of throwing an error
    • getDefaultRemindersList now returns null when there is no default list, instead of throwing an error
    • New methods to request runtime permissions, alongside the existing permission constants
    • createEventWithPrompt throwing error because of undefined event id
    • Fetch reminders from selected or all reminder lists (iOS)
    • Delete reminders by id (iOS)
    • Using isAllDay with createEventWithPrompt on Android was not functional
    • Create calendars (iOS)
    • Delete calendars (iOS)
    • listCalendars on Android returning calendar id of type number instead of string
    • createEventWithPrompt on Android was not using all options
    • createEventWithPrompt and selectCalendarsWithPrompt were throwing an error instead of returning an empty array on cancel
    • Alarm support for created events
    • createEventWithPrompt now accepts options
    • Misplaced code in plugin iOS implementation
    • Example app missing permissions for contact on iOS 16 and lower
    • Permissions documentation on iOS incomplete for iOS 16 and lower
    • Check permissions
    • Check all permissions
    • Request permissions
    • Request all permissions
    • Create event with prompt
    • Create event programmatically
    • Select calendars with prompt (iOS)
    • List calendars
    • Get default calendar
    • Get all reminders lists (iOS)
    • Get default reminders list (iOS)
    • Create reminder (iOS)
    • Open calendars app
    • Open reminders app (iOS)
    • List events in a specified date range
    • Delete events by ID