npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@ebarooni/capacitor-calendar

v8.7.1

Published

A Capacitor plugin for native calendar events on iOS and Android (with reminders on iOS), and .ics event creation on the web.

Readme

@ebarooni/capacitor-calendar

capacitor-calendar-logo

@ebarooni/capacitor-calendar connects your Capacitor app to the native calendar. On iOS and Android, create, edit, and list events, and manage calendars and permissions. iOS also supports reminders. On the web, the plugin builds a downloadable .ics file; it does not write to a device calendar.

Table of Contents

Features and Platforms

| Capability | iOS | Android | Web | | :------------------------------------------------ | :-: | :-----: | :-----------: | | Create, update, and delete events | ✅ | ✅ | Create only* | | Native prompts to create, edit, and delete events | ✅ | ✅ | – | | List events in a date range | ✅ | ✅ | – | | Request calendar permissions | ✅ | ✅ | – | | List, create, modify, and delete calendars | ✅ | ✅ | – | | Open the native Calendar app | ✅ | ✅ | – | | Calendar sources and a calendar picker prompt | ✅ | – | – | | Reminders and reminder lists | ✅ | – | – |

* On the web, createEvent returns a downloadable .ics file. It does not write to a device calendar. See Create and download an event on the web.

Demo

| iOS | Android | | :-----------------------------: | :---------------------------------: | | | |

Why this plugin?

  • Established. Available since Capacitor 5, with years of real-world use behind it.
  • Actively maintained. The original author still owns the codebase and ships fixes and features.
  • Fast support. Questions and bug reports get quick answers.
  • Lower vendor risk. Relying on one plugin author for everything is risky. Independent, focused maintainers keep your stack resilient.

MCP Server

@ebarooni/capacitor-calendar ships an official MCP server. It gives AI coding assistants accurate, grounded knowledge of the plugin.

docker run --rm -d --name capacitor-calendar-mcp -p 8080:8080 ghcr.io/ebarooni/capacitor-calendar-mcp:1.1.0

See mcp/README.md for client configuration and full details.

Installation

npm install @ebarooni/capacitor-calendar
npx cap sync

Setup

This plugin works with native calendar APIs, so you need to configure permissions on each platform before you request access at runtime. After setup, see Quick Start to request permissions in code.

Android

Add these permissions to android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />

Request the matching runtime permissions before you read from or write to the calendar.

iOS

Add the appropriate usage description keys to ios/App/App/Info.plist. Starting with iOS 17, Apple requires separate keys for write-only and full calendar access.

<key>NSCalendarsUsageDescription</key>
<string>This app needs access to your calendar.</string>

<key>NSCalendarsWriteOnlyAccessUsageDescription</key>
<string>This app needs permission to create calendar events.</string>

<key>NSCalendarsFullAccessUsageDescription</key>
<string>This app needs permission to read and manage your calendar events.</string>

<key>NSRemindersUsageDescription</key>
<string>This app needs access to your reminders.</string>

<key>NSRemindersFullAccessUsageDescription</key>
<string>This app needs permission to read and manage your reminders.</string>

[!IMPORTANT]
Only include the keys your app actually needs. If you only create events, you can omit the full access and reminders entries.

Official References

Quick Start

The sample below is for Android and iOS. For Web, see Create and download an event on the web.

import { CapacitorCalendar } from '@ebarooni/capacitor-calendar';

const { result } = await CapacitorCalendar.requestFullCalendarAccess();

if (result !== 'granted') {
  throw new Error('Calendar permission denied');
}

// Create an event starting in 1 hour, lasting 1 hour
const startDate = Date.now() + 60 * 60 * 1000;
const endDate = startDate + 60 * 60 * 1000;

const { id } = await CapacitorCalendar.createEvent({
  title: 'Product review',
  location: 'Office',
  startDate,
  endDate,
  description: 'Created with @ebarooni/capacitor-calendar',
});

console.log('Event created with ID:', id);

[!NOTE]
Dates are expected as Unix timestamps in milliseconds.

Usage Examples

Create and download an event on the web

On Web, createEvent builds an .ics file. It does not write to a calendar store. Use downloadIcsFile to start a browser download:

import { CapacitorCalendar, downloadIcsFile } from '@ebarooni/capacitor-calendar';

const startDate = Date.now() + 60 * 60 * 1000;
const endDate = startDate + 60 * 60 * 1000;

const { ics } = await CapacitorCalendar.createEvent({
  title: 'Team standup',
  startDate,
  endDate,
  icsFileName: 'team-standup.ics',
});

if (ics) {
  await downloadIcsFile(ics);
}

Open the native event editor

Use the system calendar UI to let users create or edit events:

await CapacitorCalendar.createEventWithPrompt({
  title: 'Planning session',
  location: 'Office',
  startDate: Date.now() + 24 * 60 * 60 * 1000,
  endDate: Date.now() + 25 * 60 * 60 * 1000,
});

[!NOTE]
On Android, this method always returns null. If you need the event ID, call listEventsInRange(...) afterward.

Modify or delete an event

The sample below is for Android and iOS. Use an id from createEvent or listEventsInRange:

await CapacitorCalendar.modifyEvent({
  id: eventId,
  title: 'Updated title',
});

await CapacitorCalendar.deleteEvent({
  id: eventId,
});

List events in a range

listEventsInRange returns events that overlap the given range, not only events that start or end inside it. Multi-day events that span the interval are included.

const now = Date.now();
const oneWeekLater = now + 7 * 24 * 60 * 60 * 1000;

const { result: events } = await CapacitorCalendar.listEventsInRange({
  from: now,
  to: oneWeekLater,
});

console.log('Upcoming events:', events);

To list events on a single day, use that day's bounds:

const startOfDay = new Date();
startOfDay.setHours(0, 0, 0, 0);
const startOfNextDay = new Date(startOfDay);
startOfNextDay.setDate(startOfNextDay.getDate() + 1);

const { result: todaysEvents } = await CapacitorCalendar.listEventsInRange({
  from: startOfDay.getTime(),
  to: startOfNextDay.getTime(),
});

Working with Calendars

// Get all calendars and default calendar
const { result: calendars } = await CapacitorCalendar.listCalendars();
const { result: defaultCalendar } = await CapacitorCalendar.getDefaultCalendar();

// Use default or fall back to first calendar
const targetCalendarId = defaultCalendar?.id ?? calendars[0]?.id;

[!NOTE]
On iOS you can also use selectCalendarsWithPrompt() to let the user pick calendars via the native interface.

Create a Reminder (iOS only)

const { result } = await CapacitorCalendar.requestFullRemindersAccess();

if (result === 'granted') {
  await CapacitorCalendar.createReminder({
    title: 'Send launch notes',
    dueDate: Date.now() + 2 * 24 * 60 * 60 * 1000,
    notes: 'Created with @ebarooni/capacitor-calendar',
  });
}

Documentation

The full documentation is generated from TypeScript definitions and is available online:

Changelog

See CHANGELOG.md for the latest updates and release history.

Breaking Changes

See BREAKING.md for breaking changes and migration steps.

API

checkPermission(...)

checkPermission(options: CheckPermissionOptions) => Promise<{ result: PermissionState; }>

Retrieves the current permission state for a given scope. On Android, readReminders and writeReminders resolve to "prompt".

| Param | Type | | ------------- | ------------------------------------------------------------------------- | | options | CheckPermissionOptions |

Returns: Promise<{ result: PermissionState; }>

Since: 0.1.0

Platform: Android, iOS


checkAllPermissions()

checkAllPermissions() => Promise<{ result: CheckAllPermissionsResult; }>

Retrieves the current state of all permissions. On Android, reminder keys always resolve to "prompt".

Returns: Promise<{ result: CheckAllPermissionsResult; }>

Since: 0.1.0

Platform: Android, iOS


requestPermission(...)

requestPermission(options: RequestPermissionOptions) => Promise<{ result: PermissionState; }>

Requests permission for a given scope. On Android, readReminders and writeReminders reject with Invalid scope.

| Param | Type | | ------------- | ----------------------------------------------------------------------------- | | options | RequestPermissionOptions |

Returns: Promise<{ result: PermissionState; }>

Since: 0.1.0

Platform: Android, iOS


requestAllPermissions()

requestAllPermissions() => Promise<{ result: RequestAllPermissionsResult; }>

Requests permission for all calendar and reminder permissions. On Android, only calendar permissions are requested; reminder keys stay "prompt".

Returns: Promise<{ result: CheckAllPermissionsResult; }>

Since: 0.1.0

Platform: Android, iOS


requestWriteOnlyCalendarAccess()

requestWriteOnlyCalendarAccess() => Promise<{ result: PermissionState; }>

Requests write access to the calendar.

Returns: Promise<{ result: PermissionState; }>

Since: 5.4.0

Platform: Android, iOS


requestReadOnlyCalendarAccess()

requestReadOnlyCalendarAccess() => Promise<{ result: PermissionState; }>

Requests read access to the calendar.

Returns: Promise<{ result: PermissionState; }>

Since: 5.4.0

Platform: Android


requestFullCalendarAccess()

requestFullCalendarAccess() => Promise<{ result: PermissionState; }>

Requests read and write access to the calendar.

Returns: Promise<{ result: PermissionState; }>

Since: 5.4.0

Platform: Android, iOS


requestFullRemindersAccess()

requestFullRemindersAccess() => Promise<{ result: PermissionState; }>

Requests read and write access to the reminders. Resolves with "granted" or "denied" (never "prompt"). A grant covers both readReminders and writeReminders.

Returns: Promise<{ result: PermissionState; }>

Since: 5.4.0

Platform: iOS


createEventWithPrompt(...)

createEventWithPrompt(options?: CreateEventWithPromptOptions | undefined) => Promise<CreateEventWithPromptResult>

Opens the system calendar interface to create a new event. On Android always returns null for id. Fetch the events to find the ID of the newly created event.

| Param | Type | | ------------- | ------------------------------------------------------------------------------------- | | options | CreateEventWithPromptOptions |

Returns: Promise<CreateEventWithPromptResult>

Since: 0.1.0

Platform: Android, iOS


modifyEventWithPrompt(...)

modifyEventWithPrompt(options: ModifyEventWithPromptOptions) => Promise<{ result: EventEditAction | null; }>

Opens a system calendar interface to modify an event. On Android always returns null.

| Param | Type | | ------------- | ------------------------------------------------------------------------------------- | | options | ModifyEventWithPromptOptions |

Returns: Promise<{ result: EventEditAction | null; }>

Since: 6.6.0

Platform: Android, iOS


createEvent(...)

createEvent(options: CreateEventOptions) => Promise<CreateEventResult>

Creates an event in the calendar. On Android and iOS, inserts into the system calendar and returns its id. On Web, there is no system calendar store: builds an .ics File as ics. The app must download or open that file (for example with downloadIcsFile(...)); this method does not trigger a download.

| Param | Type | | ------------- | ----------------------------------------------------------------- | | options | CreateEventOptions |

Returns: Promise<CreateEventResult>

Since: 0.4.0

Platform: Android, iOS, Web


modifyEvent(...)

modifyEvent(options: ModifyEventOptions) => Promise<void>

Modifies an event.

| Param | Type | | ------------- | ----------------------------------------------------------------- | | options | ModifyEventOptions |

Since: 6.6.0

Platform: Android, iOS


deleteEventsById(...)

deleteEventsById(options: DeleteEventsByIdOptions) => Promise<{ result: DeleteEventsByIdResult; }>

Deletes multiple events.

| Param | Type | | ------------- | --------------------------------------------------------------------------- | | options | DeleteEventsByIdOptions |

Returns: Promise<{ result: DeleteEventsByIdResult; }>

Since: 0.11.0

Platform: Android, iOS


deleteEvent(...)

deleteEvent(options: DeleteEventOptions) => Promise<void>

Deletes an event.

| Param | Type | | ------------- | ----------------------------------------------------------------- | | options | DeleteEventOptions |

Since: 7.1.0

Platform: Android, iOS


deleteEventWithPrompt(...)

deleteEventWithPrompt(options: DeleteEventWithPromptOptions) => Promise<{ deleted: boolean; }>

Opens a dialog to delete an event.

| Param | Type | | ------------- | ------------------------------------------------------------------------------------- | | options | DeleteEventWithPromptOptions |

Returns: Promise<{ deleted: boolean; }>

Since: 7.1.0

Platform: Android, iOS


listEventsInRange(...)

listEventsInRange(options: ListEventsInRangeOptions) => Promise<ListEventsInRangeResult>

Retrieves events that overlap a date range.

An event is included when its time interval intersects [from, to], including multi-day events that span the range without starting or ending inside it.

| Param | Type | | ------------- | ----------------------------------------------------------------------------- | | options | ListEventsInRangeOptions |

Returns: Promise<ListEventsInRangeResult>

Since: 0.10.0

Platform: Android, iOS


commit()

commit() => Promise<void>

Saves pending calendar changes.

Since: 7.1.0

Platform: iOS


selectCalendarsWithPrompt(...)

selectCalendarsWithPrompt(options?: SelectCalendarsWithPromptOptions | undefined) => Promise<SelectCalendarsWithPromptResult>

Opens a system interface to choose one or multiple calendars.

Calendar access is expected. Call requestFullCalendarAccess() first. Without authorization the chooser can look empty.

On confirm, result contains the calendars the user selected. On cancel, result is an empty array.

If a chooser is already presented, a new call is rejected; the in-flight call continues until the user confirms or cancels.

| Param | Type | | ------------- | --------------------------------------------------------------------------------------------- | | options | SelectCalendarsWithPromptOptions |

Returns: Promise<SelectCalendarsWithPromptResult>

Since: 0.2.0

Platform: iOS


fetchAllCalendarSources()

fetchAllCalendarSources() => Promise<FetchAllCalendarSourcesResult>

Retrieves a list of calendar sources.

Requires calendar access. Without authorization, result is typically an empty array. This method does not reject solely for missing permission.

Returns: Promise<FetchAllCalendarSourcesResult>

Since: 6.6.0

Platform: iOS


listCalendars()

listCalendars() => Promise<ListCalendarsResult>

Retrieves a list of all available calendars.

Requires calendar read access. On Android, missing permission typically rejects. On iOS, missing authorization typically returns an empty result.

Returns: Promise<ListCalendarsResult>

Since: 7.1.0

Platform: Android, iOS


getDefaultCalendar(...)

getDefaultCalendar(options?: GetDefaultCalendarOptions | undefined) => Promise<{ result: Calendar | null; }>

Retrieves the default calendar.

Requires calendar read access. On Android, missing permission typically rejects. On iOS, missing authorization typically yields result: null.

The system default is the primary calendar on Android and defaultCalendarForNewEvents on iOS. When neither exists and useFallbackCalendar is true, the first available calendar is returned. Otherwise the method returns null when there is no system default.

| Param | Type | | ------------- | ------------------------------------------------------------------------------- | | options | GetDefaultCalendarOptions |

Returns: Promise<{ result: Calendar | null; }>

Since: 0.3.0

Platform: Android, iOS


openCalendar(...)

openCalendar(options?: OpenCalendarOptions | undefined) => Promise<void>

Opens the calendar app.

| Param | Type | | ------------- | ------------------------------------------------------------------- | | options | OpenCalendarOptions |

Since: 7.1.0

Platform: Android, iOS


createCalendar(...)

createCalendar(options: CreateCalendarOptions) => Promise<CreateCalendarResult>

Creates a calendar.

title is required. color is optional and defaults to #007AFF. On Android, accountName and ownerAccount are required at runtime.

| Param | Type | | ------------- | ----------------------------------------------------------------------- | | options | CreateCalendarOptions |

Returns: Promise<CreateCalendarResult>

Since: 5.2.0

Platform: Android, iOS


deleteCalendar(...)

deleteCalendar(options: DeleteCalendarOptions) => Promise<void>

Deletes a calendar by id.

| Param | Type | | ------------- | ----------------------------------------------------------------------- | | options | DeleteCalendarOptions |

Since: 5.2.0

Platform: Android, iOS


modifyCalendar(...)

modifyCalendar(options: ModifyCalendarOptions) => Promise<void>

Modifies a calendar with options.

| Param | Type | | ------------- | ----------------------------------------------------------------------- | | options | ModifyCalendarOptions |

Since: 7.2.0

Platform: Android, iOS


createRemindersList(...)

createRemindersList(options: CreateRemindersListOptions) => Promise<CreateRemindersListResult>

Creates a new reminders list.

| Param | Type | | ------------- | --------------------------------------------------------------------------------- | | options | CreateRemindersListOptions |

Returns: Promise<CreateRemindersListResult>

Since: 8.1.0

Platform: iOS


deleteRemindersList(...)

deleteRemindersList(options: DeleteRemindersListOptions) => Promise<void>

Deletes a reminders list.

| Param | Type | | ------------- | --------------------------------------------------------------------------------- | | options | DeleteRemindersListOptions |

Since: 8.2.0

Platform: iOS


fetchAllRemindersSources()

fetchAllRemindersSources() => Promise<{ result: CalendarSource[]; }>

Retrieves a list of calendar sources.

Returns: Promise<{ result: CalendarSource[]; }>

Since: 6.6.0

Platform: iOS


openReminders()

openReminders() => Promise<void>

Opens the reminders app.

Since: 7.1.0

Platform: iOS


getDefaultRemindersList()

getDefaultRemindersList() => Promise<{ result: RemindersList | null; }>

Retrieves the default reminders list.

Returns: Promise<{ result: Calendar | null; }>

Since: 7.1.0

Platform: iOS


getRemindersLists()

getRemindersLists() => Promise<{ result: RemindersList[]; }>

Retrieves all available reminders lists.

Returns: Promise<{ result: Calendar[]; }>

Since: 7.1.0

Platform: iOS


createReminder(...)

createReminder(options: CreateReminderOptions) => Promise<CreateReminderResult>

Creates a reminder.

| Param | Type | | ------------- | ----------------------------------------------------------------------- | | options | CreateReminderOptions |

Returns: Promise<CreateReminderResult>

Since: 0.5.0

Platform: iOS


deleteRemindersById(...)

deleteRemindersById(options: DeleteRemindersByIdOptions) => Promise<{ result: DeleteRemindersByIdResult; }>

Deletes multiple reminders.

| Param | Type | | ------------- | --------------------------------------------------------------------------------- | | options | DeleteRemindersByIdOptions |

Returns: Promise<{ result: DeleteRemindersByIdResult; }>

Since: 5.3.0

Platform: iOS


deleteReminder(...)

deleteReminder(options: DeleteReminderOptions) => Promise<void>

Deletes a reminder.

| Param | Type | | ------------- | ----------------------------------------------------------------------- | | options | DeleteReminderOptions |

Since: 7.1.0

Platform: iOS


modifyReminder(...)

modifyReminder(options: ModifyReminderOptions) => Promise<void>

Modifies a reminder.

| Param | Type | | ------------- | ----------------------------------------------------------------------- | | options | ModifyReminderOptions |

Since: 6.7.0

Platform: iOS


getReminderById(...)

getReminderById(options: GetReminderByIdOptions) => Promise<GetReminderByIdResult>

Retrieve a reminder by ID.

| Param | Type | | ------------- | ------------------------------------------------------------------------- | | options | GetReminderByIdOptions |

Returns: Promise<GetReminderByIdResult>

Since: 7.1.0

Platform: iOS


getRemindersFromLists(...)

getRemindersFromLists(options: GetRemindersFromListsOptions) => Promise<GetRemindersFromListsResult>

Retrieves reminders from multiple lists.

| Param | Type | | ------------- | ------------------------------------------------------------------------------------- | | options | GetRemindersFromListsOptions |

Returns: Promise<GetRemindersFromListsResult>

Since: 5.3.0

Platform: iOS


deleteReminderWithPrompt(...)

deleteReminderWithPrompt(options: DeleteReminderWithPromptOptions) => Promise<{ deleted: boolean; }>

Opens a dialog to delete a reminder.

| Param | Type | | ------------- | ------------------------------------------------------------------------------------------- | | options | DeleteReminderWithPromptOptions |

Returns: Promise<{ deleted: boolean; }>

Since: 7.2.0

Platform: iOS


updateRemindersList(...)

updateRemindersList(options: UpdateRemindersListOptions) => Promise<UpdateRemindersListResult>

Update a reminders list with options.

| Param | Type | | ------------- | --------------------------------------------------------------------------------- | | options | UpdateRemindersListOptions |

Returns: Promise<UpdateRemindersListResult>

Since: 8.2.0

Platform: iOS


Interfaces

CheckPermissionOptions

Options for {@link CalendarAccess#checkPermission}.

| Prop | Type | Description | Since | Platform | | ----------- | --------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----- | ------------ | | scope | CalendarPermissionScope | The permission scope to check. On Android, readReminders and writeReminders resolve to "prompt" (reminders are not supported on Android). | 8.3.1 | Android, iOS |

RequestPermissionOptions

Options for {@link CalendarAccess#requestPermission}.

| Prop | Type | Description | Since | Platform | | ----------- | --------------------------------------------------------------------------- | -------------------------------- | ----- | ------------ | | scope | CalendarPermissionScope | The permission scope to request. | 8.3.1 | Android, iOS |

CreateEventWithPromptResult

| Prop | Type | Description | Since | Platform | | -------- | --------------------------- | -------------------------------------------------------------------------------------------------- | ----- | ------------ | | id | string | null | The identifier of the created event. Always null on Android. Present on iOS when the user saves. | 0.1.0 | Android, iOS |

CreateEventWithPromptOptions

| Prop | Type | Description | Since | Platform | | ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- | ------------ | | alerts | number[] | Alert times in minutes relative to the event start. Use negative numbers for reminders before the start, and positive numbers for reminders after the start. On iOS only 2 alerts are supported. | 7.1.0 | iOS | | availability | EventAvailability | | 7.1.0 | Android, iOS | | calendarId | string | | 0.1.0 | iOS | | description | string | | 7.1.0 | Android, iOS | | endDate | number | | 0.1.0 | Android, iOS | | invitees | string[] | An array of emails to invite. | 7.1.0 | Android | | isAllDay | boolean | | 0.1.0 | Android, iOS | | location | string | | 0.1.0 | Android, iOS | | recurrence | EventRecurrenceRule | Rules for creating a recurring event. | 7.3.0 | Android, iOS | | startDate | number | | 0.1.0 | Android, iOS | | title | string | | 0.1.0 | Android, iOS | | url | string | | 0.1.0 | iOS |

EventRecurrenceRule

| Prop | Type | Description | Default | Since | Platform | | -------------------- | ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | ----- | ------------ | | byMonth | number[] | Limits a yearly recurrence to specific months of the year. The values should be between 1 and 12. | | 7.1.0 | Android, iOS | | byMonthDay | number[] | Limits a monthly recurrence to specific days of the month. The values should be between 1 and 31. | | 7.1.0 | Android, iOS | | byWeekDay | number[] | Limits a weekly recurrence to specific weekdays. The values should be between 1 and 7. 1 means Monday and 7 means Sunday. | | 7.3.0 | Android, iOS | | count | number | The total number of occurrences. If set, the recurrence ends after this many occurrences. If count is provided, end is ignored. | | 7.3.0 | Android, iOS | | daysOfTheYear | number[] | Limits a yearly recurrence to specific days of the year (1 to 366). | | 7.3.0 | iOS | | end | number | End date of the recurrence series as a Unix timestamp in milliseconds. | | 7.1.0 | Android, iOS | | frequency | RecurrenceFrequency | How often the event repeats. | | 7.3.0 | Android, iOS | | interval | number | The interval between recurrences. Use in combination with frequency. For example, a weekly event with an interval of 2, results in the event occurring every 2 weeks. | 1 | 7.3.0 | Android, iOS | | weeksOfTheYear | number[] | Limits a yearly recurrence to specific ISO week numbers (1 to 53). | | 7.3.0 | iOS |

ModifyEventWithPromptOptions

| Prop | Type | Description | Since | Platform | | ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- | ------------ | | alerts | number[] | Alert times in minutes relative to the event start. Use negative numbers for reminders before the start, and positive numbers for reminders after the start. On iOS only 2 alerts are supported. | 7.1.0 | iOS | | availability | EventAvailability | | 7.1.0 | Android, iOS | | calendarId | string | | 0.1.0 | iOS | | description | string | | 7.1.0 | Android, iOS | | endDate | number | | 0.1.0 | Android, iOS | | invitees | string[] | An array of emails to invite. | 7.1.0 | Android | | isAllDay | boolean | | 0.1.0 | Android, iOS | | location | string | | 0.1.0 | Android, iOS | | recurrence | EventRecurrenceRule | Rules for creating a recurring event. | 7.3.0 | Android, iOS | | startDate | number | | 0.1.0 | Android, iOS | | title | string | | 0.1.0 | Android, iOS | | url | string | | 0.1.0 | iOS | | id | string | The ID of the event to be modified. | 7.1.0 | Android, iOS |

CreateEventResult

| Prop | Type | Description | Since | Platform | | --------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- | ------------ | | ics | File | null | An .ics file (text/calendar) with one VEVENT. Always null on Android and iOS. On Web, the plugin does not write to a calendar store or start a download; use downloadIcsFile(...) or pass the File to another API. | 8.5.0 | Web | | id | string | null | The identifier of the created event. Always null on Web. Present on Android and iOS after a successful create. | 0.4.0 | Android, iOS |

CreateEventOptions

| Prop | Type | Description | Default | Since | Platform | | ------------------ | ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ----- | ----------------- | | alerts | number[] | Alert times in minutes relative to the event start. Use negative numbers for alerts before the start, and positive numbers for alerts after the start. | | 7.1.0 | Android, iOS, Web | | attendees | EventGuest[] | The event guests. | | 7.1.0 | Android, Web | | availability | EventAvailability | | | 7.1.0 | Android, iOS, Web | | calendarId | string | | | 0.1.0 | Android, iOS | | color | string | | | 7.1.0 | Android | | commit | boolean | Whether to save immediately (true) or batch changes for later (false). | true | 7.1.0 | iOS | | description | string | | | 7.1.0 | Android, iOS, Web | | duration | string | Duration of the event in RFC2445 format. | | 7.1.0 | Android | | endDate | number | | | 0.1.0 | Android, iOS, Web | | icsFileName | string | Download filename for the .ics file. When omitted, a name is derived from title (fallback event.ics). If the value has no .ics extension, .ics is appended. | | 8.5.0 | Web | | isAllDay | boolean | | | 0.1.0 | Android, iOS, Web | | location | string | | | 0.1.0 | Android, iOS, Web | | organizer | string | Email of the event organizer. | | 7.1.0 | Android, Web | | recurrence | EventRecurrenceRule | Rules for creating a recurring event. | | 7.3.0 | Android, iOS, Web | | startDate | number | | | 0.1.0 | Android, iOS, Web | | title | string | | | 0.4.0 | Android, iOS, Web | | url | string | | | 0.1.0 | iOS, Web |

EventGuest

| Prop | Type | Since | | ----------- | ------------------- | ----- | | name | string | 7.1.0 | | email | string | 7.1.0 |

ModifyEventOptions

| Prop | Type | Description | Default | Since | Platform | | ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------- | ----- | ------------ | | alerts | number[] | Alert times in minutes relative to the event start. Use negative numbers for alerts before the start, and positive numbers for alerts after the start. | | 7.1.0 | Android, iOS | | attendees | EventGuest[] | The event guests. | | 7.1.0 | Android | | availability | EventAvailability | | | 7.1.0 | Android, iOS | | calendarId | string | | | 0.1.0 | Android, iOS | | color | string | | | 7.1.0 | Android | | description | string | | | 7.1.0 | Android, iOS | | duration | string | Duration of the event in RFC2445 format. | | 7.1.0 | Android | | endDate | number | | | 0.1.0 | Android, iOS | | id | string | The ID of the event to be modified. | | 7.1.0 | Android, iOS | | isAllDay | boolean | | | 0.1.0 | Android, iOS | | location | string | | | 0.1.0 | Android, iOS | | recurrence | EventRecurrenceRule | Rules for creating a recurring event. | | 7.3.0 | Android, iOS | | organizer | string | Email of the event organizer. | | 7.1.0 | Android | | span | EventSpan | The span of modifications. | EventSpan.THIS_EVENT | | iOS | | startDate | number | | | 0.1.0 | Android, iOS | | title | string | | | 0.4.0 | Android, iOS | | url | string | | | 0.1.0 | iOS |

DeleteEventsByIdResult

| Prop | Type | Since | | ------------- | --------------------- | ----- | | deleted | string[] | 7.1.0 | | failed | string[] | 7.1.0 |

DeleteEventsByIdOptions

| Prop | Type | Description | Default | Since | Platform | | ------------ | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----- | ------------ | | commit | boolean | Whether to save the deletion to the event store immediately. Pass false to batch multiple changes and commit them together using CapacitorCalendar.commit(), which is more efficient than committing each save individually. | true | 8.3.0 | iOS | | ids | string[] | | | 7.1.0 | | | span | EventSpan | How much of a recurring series to delete. On Android, THIS_EVENT cannot target a single recurring occurrence here — use deleteEvent with instanceDate. Those ids are reported in failed. | EventSpan.THIS_EVENT | 7.1.0 | Android, iOS |

DeleteEventOptions

| Prop | Type | Description | Default | Since | Platform | | ------------------ | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----- | ------------ | | commit | boolean | Whether to save the deletion to the event store immediately. Pass false to batch multiple changes and commit them together using CapacitorCalendar.commit(), which is more efficient than committing each save individually. | true | 8.3.0 | iOS | | id | string | The ID of the event to delete. | | 7.1.0 | Android, iOS | | instanceDate | number | The start time of the occurrence to delete, in milliseconds since the epoch. Use startDate from listEventsInRange. On Android, required for THIS_EVENT on recurring events. If omitted with THIS_AND_FUTURE_EVENTS, the whole series is deleted. | | 8.3.0 | Android | | span | EventSpan | How much of a recurring series to delete. | EventSpan.THIS_EVENT | 7.1.0 | Android, iOS |

DeleteEventWithPromptOptions

| Prop | Type | Description | Default | Since | Platform | | ----------------------- | ----------------------------------------------- | -----------