Reference version

This is documentation for the next SDK version. For up-to-date documentation, see the latest version (SDK 54).

Expo Calendar (next)

GitHub

Changelog

npm

A library that provides an API for interacting with the device's system calendars, events, reminders, and associated records.

Android (device only)
iOS (device only)

The next version of the Calendar API is included in the expo-calendar library. It can be used alongside the previous API, and offers a simplified, object oriented way of performing calendar operations.
To provide quicker updates, expo-calendar/next is currently unsupported in Expo Go and Snack. To use it, create a development build.

expo-calendar provides an API for interacting with the device's system calendars, events, reminders, and associated records.

Additionally, it provides methods to launch the system-provided calendar UI to allow the user to view or edit events. On iOS, they present either EKEventViewController or EKEventEditViewController as a modal.

Installation

Terminal
npx expo install expo-calendar

If you are installing this in an existing React Native app, make sure to install expo in your project.

Configuration in app config

You can configure expo-calendar using its built-in config plugin if you use config plugins in your project (EAS Build or npx expo run:[android|ios]). The plugin allows you to configure various properties that cannot be set at runtime and require building a new app binary to take effect.

Example app.json with config plugin

app.json
{ "expo": { "plugins": [ [ "expo-calendar", { "calendarPermission": "The app needs to access your calendar." } ] ] } }

Configurable properties

NameDefaultDescription
calendarPermission"Allow $(PRODUCT_NAME) to access your calendar"
Only for:
iOS

A string to set the NSCalendarsUsageDescription permission message.

remindersPermission"Allow $(PRODUCT_NAME) to access your reminders"
Only for:
iOS

A string to set the NSRemindersUsageDescription permission message.

Are you using this library in an existing React Native app?

If you're not using Continuous Native Generation (CNG) (you're using native ios project manually), then you need to configure following permissions in your native project:

  • For iOS, add NSCalendarsUsageDescription and NSRemindersUsageDescription to your project's ios/[app]/Info.plist:

    <key>NSCalendarsUsageDescription</key> <string>Allow $(PRODUCT_NAME) to access your calendar</string> <key>NSRemindersUsageDescription</key> <string>Allow $(PRODUCT_NAME) to access your reminders</string>

Usage

import * as Calendar from 'expo-calendar/next'; import { useEffect } from 'react'; import { StyleSheet, View, Text, Button } from 'react-native'; const BasicUsage = () => { useEffect(() => { (async () => { const { status } = await Calendar.requestCalendarPermissions(); if (status === 'granted') { const calendars = Calendar.getCalendars(Calendar.EntityTypes.EVENT); console.log('Here are all your calendars:'); console.log(JSON.stringify(calendars)); } })(); }, []); return ( <View style={styles.container}> <Text>Calendar Module Example</Text> <Button title="Create a new calendar" onPress={createCalendar} /> </View> ); }; async function createCalendar() { const newCalendar = await Calendar.createCalendar({ title: 'Expo Calendar', color: 'blue', entityType: Calendar.EntityTypes.EVENT, }); console.log(`Your new calendar: ${JSON.stringify(newCalendar)}`); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#fff', alignItems: 'center', justifyContent: 'space-around', }, });

API

import * as Calendar from 'expo-calendar/next';

Unless specified otherwise, all dates are returned in the ISO 8601 format.

Launching system-provided calendar dialogs

createEventInCalendarAsync(eventData, presentationOptions)

Android
iOS
ParameterTypeDescription
eventData(optional)Omit<Partial<Event>, 'id'>

A map of details for the event to be created.

Default:{}
presentationOptions(optional)PresentationOptions

Configuration that influences how the calendar UI is presented.


Launches the calendar UI provided by the OS to create a new event.

A promise which resolves with information about the dialog result.

openEventInCalendarAsync(params, presentationOptions)

Android
iOS
ParameterType
paramsCalendarDialogParams
presentationOptions(optional)OpenEventPresentationOptions

Launches the calendar UI provided by the OS to preview an event.

A promise which resolves with information about the dialog result.

Hooks

useCalendarPermissions(options)

Android
iOS
ParameterType
options(optional)PermissionHookOptions<object>

Check or request permissions to access the calendar. This uses both getCalendarPermissionsAsync and requestCalendarPermissionsAsync to interact with the permissions.

Returns:
[null | PermissionResponse, RequestPermissionMethod<PermissionResponse>, GetPermissionMethod<PermissionResponse>]

Example

const [status, requestPermission] = Calendar.useCalendarPermissions();

useRemindersPermissions(options)

Android
iOS
ParameterType
options(optional)PermissionHookOptions<object>

Check or request permissions to access reminders. This uses both getRemindersPermissionsAsync and requestRemindersPermissionsAsync to interact with the permissions.

Returns:
[null | PermissionResponse, RequestPermissionMethod<PermissionResponse>, GetPermissionMethod<PermissionResponse>]

Example

const [status, requestPermission] = Calendar.useRemindersPermissions();

Classes

ExpoCalendar

Android
iOS

Type: Class extends ExpoCalendar

Represents a calendar object that can be accessed and modified using the Expo Calendar Next API.

This class provides properties and methods for interacting with a specific calendar on the device, such as retrieving its events, updating its details, and accessing its metadata.

ExpoCalendar Properties

accessLevel

Android
Optional • Type: CalendarAccessLevel

Level of access that the user has for the calendar.

allowedAttendeeTypes

Android
Optional • Type: AttendeeType[]

Attendee types that this calendar supports.

allowedAvailabilities

Android
iOS

Availability types that this calendar supports.

allowedReminders

Android
Optional • Type: AlarmMethod[]

Alarm methods that this calendar supports.

allowsModifications

Android
iOS
Type: boolean

Boolean value that determines whether this calendar can be modified.

color

Android
iOS
Type: string

Color used to display this calendar's events.

entityType

iOS
Optional • Type: EntityTypes

Whether the calendar is used in the Calendar or Reminders OS app.

id

Android
iOS
Type: string

Internal ID that represents this calendar on the device.

isPrimary

Android
Optional • Type: boolean

Boolean value indicating whether this is the device's primary calendar.

isSynced

Android
Optional • Type: boolean

Indicates whether this calendar is synced and its events stored on the device. Unexpected behavior may occur if this is not set to true.

isVisible

Android
Optional • Type: boolean

Indicates whether the OS displays events on this calendar.

name

Android
Optional • Literal type: union

Internal system name of the calendar.

Acceptable values are: null | string

ownerAccount

Android
Optional • Type: string

Name for the account that owns this calendar.

source

Android
iOS
Type: Source

Object representing the source to be used for the calendar.

sourceId

iOS
Optional • Type: string

ID of the source to be used for the calendar. Likely the same as the source for any other locally stored calendars.

timeZone

Android
Optional • Type: string

Time zone for the calendar.

title

Android
iOS
Type: string

Visible name of the calendar.

type

iOS
Optional • Type: CalendarType

Type of calendar this object represents.

ExpoCalendar Methods

createEvent(details)

Android
iOS
ParameterType
detailsPartial<Omit<Event, 'creationDate' | 'lastModifiedDate' | 'originalStartDate' | 'isDetached' | 'status' | 'organizer'>>

Creates a new event in the calendar.

An instance of the created event.

createReminder(details)

Android
iOS
ParameterType
detailsPartial<Reminder>

Creates a new reminder in the calendar.

An instance of the created reminder.

delete()

Android
iOS

Deletes the calendar.

Returns:
Promise<void>

get(calendarId)

Android
iOS
ParameterTypeDescription
calendarIdstring

The ID of the calendar to get.


Gets a calendar by its ID. Throws an error if the calendar with the given ID does not exist.

An ExpoCalendar object representing the calendar.

listEvents(startDate, endDate)

Android
iOS
ParameterType
startDateDate
endDateDate

Returns a calendar event list for the given date range.

listReminders(startDate, endDate, status)

Android
iOS
ParameterTypeDescription
startDate(optional)null | Date

Beginning of time period to search for reminders in, or null for all completed reminders before endDate.

Default:null
endDate(optional)null | Date

End of time period to search for reminders in, or null for all completed reminders after startDate.

Default:null
status(optional)null | ReminderStatus

One of Calendar.ReminderStatus.COMPLETED or Calendar.ReminderStatus.INCOMPLETE. If not defined, both completed and incomplete reminders will be returned.

Default:null

Returns a list of reminders matching the provided criteria. If startDate and endDate are defined, returns all reminders that overlap at all with the [startDate, endDate] interval, that is, all reminders that end after the startDate or begin before the endDate.

An array of ExpoCalendarReminder objects matching the search criteria.

update(details)

Android
iOS
ParameterTypeDescription
detailsPartial<ModifiableCalendarProperties>

A map of properties to be updated.


Updates the provided details of an existing calendar stored on the device. To remove a property, explicitly set it to null in details.

Returns:
Promise<void>

ExpoCalendarAttendee

Android
iOS

Type: Class extends ExpoCalendarAttendee

Represents a calendar attendee object.

ExpoCalendarAttendee Properties

email

Android
Type: string

Email of the attendee.

id

Android
Optional • Type: string

Internal ID that represents this attendee on the device.

isCurrentUser

iOS
Optional • Type: boolean

Indicates whether or not this attendee is the current OS user.

name

Android
iOS
Type: string

Displayed name of the attendee.

role

Android
iOS

Role of the attendee at the event.

status

Android
iOS

Status of the attendee in relation to the event.

type

Android
iOS

Type of the attendee.

url

iOS
Optional • Type: string

URL for the attendee.

ExpoCalendarAttendee Methods

delete()

Android

Deletes the attendee.

Returns:
Promise<void>

update(details)

Android
ParameterType
detailsPartial<ExpoCalendarAttendee>

Updates the attendee.

Returns:
Promise<void>

ExpoCalendarEvent

Android
iOS

Type: Class extends ExpoCalendarEvent

Represents a calendar event object that can be accessed and modified using the Expo Calendar Next API.

ExpoCalendarEvent Properties

accessLevel

Android
Optional • Type: EventAccessLevel

User's access level for the event.

alarms

Android
iOS
Type: Alarm[]

Array of Alarm objects which control automated reminders to the user.

allDay

Android
iOS
Type: boolean

Whether the event is displayed as an all-day event on the calendar

availability

Android
iOS

The availability setting for the event.

calendarId

Android
iOS
Type: string

ID of the calendar that contains this event.

creationDate

iOS
Optional • Literal type: union

Date when the event record was created.

Acceptable values are: string | Date

endDate

Android
iOS
Literal type: union

Date object or string representing the time when the event ends.

Acceptable values are: string | Date

endTimeZone

Android
Optional • Type: string

Time zone for the end date of the event.

guestsCanInviteOthers

Android
Optional • Type: boolean

Whether invited guests can invite other guests.

guestsCanModify

Android
Optional • Type: boolean

Whether invited guests can modify the details of the event.

guestsCanSeeGuests

Android
Optional • Type: boolean

Whether invited guests can see other guests.

id

Android
iOS
Type: string

Internal ID that represents this event on the device.

instanceId

Android
Optional • Type: string

For instances of recurring events, volatile ID representing this instance. Not guaranteed to always refer to the same instance.

isDetached

iOS
Optional • Type: boolean

Boolean value indicating whether or not the event is a detached (modified) instance of a recurring event.

lastModifiedDate

iOS
Optional • Literal type: union

Date when the event record was last modified.

Acceptable values are: string | Date

location

Android
iOS
Literal type: union

Location field of the event.

Acceptable values are: null | string

notes

Android
iOS
Type: string

Description or notes saved with the event.

organizer

iOS
Optional • Type: Organizer

Organizer of the event. This property is only available on events associated with calendars that are managed by a service such as Google Calendar or iCloud. The organizer is read-only and cannot be set.

organizerEmail

Android
Optional • Type: string

Email address of the organizer of the event.

originalId

Android
Optional • Type: string

For detached (modified) instances of recurring events, the ID of the original recurring event.

originalStartDate

iOS
Optional • Literal type: union

For recurring events, the start date for the first (original) instance of the event.

Acceptable values are: string | Date

recurrenceRule

Android
iOS
Literal type: union

Object representing rules for recurring or repeating events. Set to null for one-time events. It is either endDate or occurrence based.

Acceptable values are: null | RecurrenceRule

startDate

Android
iOS
Literal type: union

Date object or string representing the time when the event starts.

Acceptable values are: string | Date

status

Android
iOS

Status of the event.

timeZone

Android
iOS
Type: string

Time zone the event is scheduled in. When set to null, the event is scheduled to the device's time zone.

title

Android
iOS
Type: string

Visible name of the event.

url

iOS
Optional • Type: string

URL for the event.

ExpoCalendarEvent Methods

createAttendee(attendee)

Android
iOS
ParameterType
attendeeAttendee

Creates a new attendee and adds it to this event.

delete()

Android
iOS

Deletes the event.

Returns:
Promise<void>

editInCalendar(params)

Android
iOS
ParameterType
params(optional)CalendarDialogParamsNext

Launches the calendar UI provided by the OS to edit or delete an event.

A promise which resolves with information about the dialog result.

get(eventId)

Android
iOS
ParameterTypeDescription
eventIdstring

The ID of the event to get.


Gets an event by its ID. Throws an error if the event with the given ID does not exist.

An ExpoCalendarEvent object representing the event.

getAttendees()

Android
iOS

Gets all attendees for a given event (or instance of a recurring event).

An array of Attendee associated with the specified event.

getOccurrenceSync(recurringEventOptions)

iOS
ParameterTypeDescription
recurringEventOptions(optional)RecurringEventOptions

A map of options for recurring events.

Default:{}

Returns an event instance for a given event (or instance of a recurring event).

An event instance.

openInCalendar(params)

Android
iOS
ParameterType
params(optional)CalendarDialogOpenParamsNext

Launches the calendar UI provided by the OS to preview an event.

A promise which resolves with information about the dialog result.

update(details)

Android
iOS
ParameterTypeDescription
detailsPartial<ModifiableEventProperties>

A map of properties to be updated.


Updates the provided details of an existing calendar stored on the device. To remove a property, explicitly set it to null in details.

Returns:
Promise<void>

ExpoCalendarReminder

Android
iOS

Type: Class extends ExpoCalendarReminder

Represents a calendar reminder object that can be accessed and modified using the Expo Calendar Next API.

ExpoCalendarReminder Properties

alarms

Android
iOS
Optional • Type: Alarm[]

Array of Alarm objects which control automated alarms to the user about the task.

allDay

Android
iOS
Optional • Type: boolean

Whether the reminder is an all-day reminder.

calendarId

Android
iOS
Optional • Type: string

ID of the calendar that contains this reminder.

completed

Android
iOS
Optional • Type: boolean

Indicates whether or not the task has been completed.

completionDate

Android
iOS
Optional • Literal type: union

Date object or string representing the date of completion, if completed is true. Setting this property of a nonnull Date will automatically set the reminder's completed value to true.

Acceptable values are: string | Date

creationDate

Android
iOS
Optional • Literal type: union

Date when the reminder record was created.

Acceptable values are: string | Date

dueDate

Android
iOS
Optional • Literal type: union

Date object or string representing the time when the reminder task is due.

Acceptable values are: string | Date

id

Android
iOS
Optional • Type: string

Internal ID that represents this reminder on the device.

lastModifiedDate

Android
iOS
Optional • Literal type: union

Date when the reminder record was last modified.

Acceptable values are: string | Date

location

Android
iOS
Optional • Type: string

Location field of the reminder

notes

Android
iOS
Optional • Type: string

Description or notes saved with the reminder.

recurrenceRule

Android
iOS
Optional • Literal type: union

Object representing rules for recurring or repeated reminders. null for one-time tasks.

Acceptable values are: null | RecurrenceRule

startDate

Android
iOS
Optional • Literal type: union

Date object or string representing the start date of the reminder task.

Acceptable values are: string | Date

timeZone

Android
iOS
Optional • Type: string

Time zone the reminder is scheduled in.

title

Android
iOS
Optional • Type: string

Visible name of the reminder.

url

Android
iOS
Optional • Type: string

URL for the reminder.

ExpoCalendarReminder Methods

delete()

Android
iOS

Deletes the reminder.

Returns:
Promise<void>

get(reminderId)

Android
iOS
ParameterTypeDescription
reminderIdstring

The ID of the reminder to get.


Gets a reminder by its ID. Throws an error if the reminder with the given ID does not exist.

An ExpoCalendarReminder object representing the reminder.

update(details)

Android
iOS

Returns:
Promise<void>

Methods

Calendar Next.createCalendar(details)

Android
iOS
ParameterTypeDescription
details(optional)Partial<Calendar>

A map of details for the calendar to be created.

Default:{}

Creates a new calendar on the device, allowing events to be added later and displayed in the OS Calendar app.

An ExpoCalendar object representing the newly created calendar.

Calendar Next.getCalendarPermissions()

Android
iOS

Check or request permissions to access the calendar. This uses both getCalendarPermissionsAsync and requestCalendarPermissionsAsync to interact with the permissions.

Returns:
Promise<PermissionResponse>

Example

const [status, requestPermission] = Calendar.useCalendarPermissions();

Calendar Next.getCalendars(type)

Android
iOS
ParameterType
type(optional)EntityTypes

Gets an array of ExpoCalendar shared objects with details about the different calendars stored on the device.

An array of ExpoCalendar shared objects matching the provided entity type (if provided).

Calendar Next.getDefaultCalendarSync()

Android
iOS

Gets an instance of the default calendar object.

Returns:
ExpoCalendar

An ExpoCalendar object that is the user's default calendar.

Calendar Next.getRemindersPermissions()

Android
iOS

Checks user's permissions for accessing user's reminders.

Returns:
Promise<PermissionResponse>

A promise that resolves to an object of type PermissionResponse.

Calendar Next.getSourcesSync()

Android
iOS

Gets an array of Source objects with details about the different sources stored on the device.

Returns:
Source[]

An array of Source objects representing the sources found.

Calendar Next.listEvents(calendars, startDate, endDate)

Android
iOS
ParameterTypeDescription
calendars(string | ExpoCalendar)[]

An array of calendar IDs (string[]) or ExpoCalendar objects to search for events.

startDateDate

The start date of the time range to search for events.

endDateDate

The end date of the time range to search for events.


Lists events from the device's calendar. It can be used to search events in multiple calendars.

Note: If you want to search events in a single calendar, you can use ExpoCalendar.listEvents instead.

An array of ExpoCalendarEvent objects representing the events found.

Calendar Next.requestCalendarPermissions()

Android
iOS

Asks the user to grant permissions for accessing user's calendars.

Returns:
Promise<PermissionResponse>

A promise that resolves to an object of type PermissionResponse.

Calendar Next.requestRemindersPermissions()

Android
iOS

Asks the user to grant permissions for accessing user's reminders.

Returns:
Promise<PermissionResponse>

A promise that resolves to an object of type PermissionResponse.

Types

Alarm

Android
iOS

A method for having the OS automatically remind the user about a calendar item.

PropertyTypeDescription
absoluteDate(optional)string
Only for:
iOS

Date object or string representing an absolute time the alarm should occur. Overrides relativeOffset and structuredLocation if specified alongside either.

method(optional)AlarmMethod
Only for:
Android

Method of alerting the user that this alarm should use. On iOS this is always a notification.

relativeOffset(optional)number

Number of minutes from the startDate of the calendar item that the alarm should occur. Use negative values to have the alarm occur before the startDate.

structuredLocation(optional)AlarmLocation
-

AlarmLocation

Android
iOS
PropertyTypeDescription
coords(optional){ latitude: number, longitude: number }
-
proximity(optional)string
-
radius(optional)number
-
title(optional)string
Only for:
iOS

-

CalendarDialogParams

Android
iOS
PropertyTypeDescription
idstring

ID of the event to be presented in the calendar UI.

instanceStartDate(optional)string | Date
Only for:
iOS

Date object representing the start time of the desired instance, if looking for a single instance of a recurring event. If this is not provided and id represents a recurring event, the first instance of that event will be returned by default.

DaysOfTheWeek

iOS
PropertyTypeDescription
dayOfTheWeekDayOfTheWeek

Sunday to Saturday - DayOfTheWeek enum.

weekNumber(optional)number

-53 to 53 (0 ignores this field, and a negative indicates a value from the end of the range).

DialogEventResult

Android
iOS

The result of presenting a calendar dialog for creating or editing an event.

PropertyTypeDescription
actionExtract<CalendarDialogResultActions, 'done' | 'saved' | 'canceled' | 'deleted'>

How user responded to the dialog. On Android, this is always done (Android doesn't provide enough information to determine the user's action - the user may have canceled the dialog, saved or deleted the event).

On iOS, it can be saved, canceled or deleted.

idstring | null

The ID of the event that was created or edited. On Android, this is always null.

On iOS, this is a string when permissions are granted and user confirms the creation or editing of an event. Otherwise, it's null.

ModifiableCalendarProperties

Android
iOS

Type: Pick<ExpoCalendar, 'color' | 'title'>

ModifiableEventProperties

Android
iOS

Type: Pick<ExpoCalendarEvent, 'title' | 'location' | 'timeZone' | 'url' | 'notes' | 'alarms' | 'recurrenceRule' | 'availability' | 'startDate' | 'endDate' | 'allDay'>

ModifiableReminderProperties

Android
iOS

Type: Pick<ExpoCalendarReminder, 'title' | 'location' | 'timeZone' | 'url' | 'notes' | 'alarms' | 'recurrenceRule' | 'startDate' | 'dueDate' | 'completed' | 'completionDate'>

OpenEventDialogResult

Android
iOS

The result of presenting the calendar dialog for opening (viewing) an event.

PropertyTypeDescription
actionExtract<CalendarDialogResultActions, 'done' | 'canceled' | 'deleted' | 'responded'>

Indicates how user responded to the dialog. On Android, the action is always done. On iOS, it can be done, canceled, deleted or responded.

OpenEventPresentationOptions

Android
iOS

Type: PresentationOptions extended by:

PropertyTypeDescription
allowsCalendarPreview(optional)boolean
Only for:
iOS

Determines whether event can be shown in calendar day view preview. This property applies only to invitations.

Default:false
allowsEditing(optional)boolean
Only for:
iOS

Whether to allow the user to edit the previewed event. This property applies only to events in calendars created by the user.

Note that if the user edits the event, the returned action is the one that user performs last. For example, when user previews the event, confirms some edits and finally dismisses the dialog, the event is edited, but response is canceled.

Default:false

PermissionExpiration

Android
iOS

Literal Type: union

Permission expiration time. Currently, all permissions are granted permanently.

Acceptable values are: 'never' | number

PermissionHookOptions

Android
iOS

Literal Type: union

Acceptable values are: PermissionHookBehavior | Options

PermissionResponse

Android
iOS

An object obtained by permissions get and request functions.

PropertyTypeDescription
canAskAgainboolean

Indicates if user can be asked again for specific permission. If not, one should be directed to the Settings app in order to enable/disable the permission.

expiresPermissionExpiration

Determines time when the permission expires.

grantedboolean

A convenience boolean that indicates if the permission is granted.

statusPermissionStatus

Determines the status of the permission.

PresentationOptions

Android
iOS
PropertyTypeDescription
startNewActivityTask(optional)boolean
Only for:
Android

Whether to launch the Activity as a new task. If true, the promise resolves with 'done' action immediately after opening the calendar activity.

Default:true

RecurrenceRule

Android
iOS

A recurrence rule for events or reminders, allowing the same calendar item to recur multiple times. This type is based on the iOS interface which is in turn based on the iCal RFC so you can refer to those to learn more about this potentially complex interface.

Not all the combinations make sense. For example, when frequency is DAILY, setting daysOfTheMonth makes no sense.

PropertyTypeDescription
daysOfTheMonth(optional)number[]
Only for:
iOS

The days of the month this event occurs on. -31 to 31 (not including 0). Negative indicates a value from the end of the range. This field is only valid for Calendar.Frequency.Monthly.

daysOfTheWeek(optional)DaysOfTheWeek[]
Only for:
iOS

The days of the week the event should recur on. An array of DaysOfTheWeek object.

daysOfTheYear(optional)number[]
Only for:
iOS

The days of the year this event occurs on. -366 to 366 (not including 0). Negative indicates a value from the end of the range. This field is only valid for Calendar.Frequency.Yearly.

endDate(optional)string | Date

Date on which the calendar item should stop recurring; overrides occurrence if both are specified.

frequencyFrequency

How often the calendar item should recur.

interval(optional)number

Interval at which the calendar item should recur. For example, an interval: 2 with frequency: DAILY would yield an event that recurs every other day.

Default:1
monthsOfTheYear(optional)MonthOfTheYear[]
Only for:
iOS

The months this event occurs on. This field is only valid for Calendar.Frequency.Yearly.

occurrence(optional)number

Number of times the calendar item should recur before stopping.

setPositions(optional)number[]
Only for:
iOS

TAn array of numbers that filters which recurrences to include. For example, for an event that recurs every Monday, passing 2 here will make it recur every other Monday. -366 to 366 (not including 0). Negative indicates a value from the end of the range. This field is only valid for Calendar.Frequency.Yearly.

weeksOfTheYear(optional)number[]
Only for:
iOS

The weeks of the year this event occurs on. -53 to 53 (not including 0). Negative indicates a value from the end of the range. This field is only valid for Calendar.Frequency.Yearly.

RecurringEventOptions

iOS

Options for specifying a particular instance of a recurring event. This type is used in various methods that operate on recurring events, such as updating or deleting a single occurrence or a set of future occurrences.

PropertyTypeDescription
futureEvents(optional)boolean

Whether future events in the recurring series should also be updated. If true, will apply the given changes to the recurring instance specified by instanceStartDate and all future events in the series. If false, will only apply the given changes to the instance specified by instanceStartDate.

instanceStartDate(optional)string | Date

Date object representing the start time of the desired instance, if looking for a single instance of a recurring event. If this is not provided and id represents a recurring event, the first instance of that event will be returned by default.

Source

Android
iOS

A source account that owns a particular calendar. Expo apps will typically not need to interact with Source objects.

PropertyTypeDescription
id(optional)string
Only for:
iOS

Internal ID that represents this source on the device.

isLocalAccount(optional)boolean
Only for:
Android

Whether this source is the local phone account. Must be true if type is undefined.

namestring

Name for the account that owns this calendar and was used to sync the calendar to the device.

typestring | SourceType

Type of the account that owns this calendar and was used to sync it to the device. If isLocalAccount is falsy then this must be defined, and must match an account on the device along with name, or the OS will delete the calendar. On iOS, one of SourceTypes.

Enums

AlarmMethod

Android

ALARM

AlarmMethod.ALARM = "alarm"

ALERT

AlarmMethod.ALERT = "alert"

DEFAULT

AlarmMethod.DEFAULT = "default"

EMAIL

AlarmMethod.EMAIL = "email"

SMS

AlarmMethod.SMS = "sms"

AttendeeRole

Android
iOS

ATTENDEE

Android
AttendeeRole.ATTENDEE = "attendee"

CHAIR

iOS
AttendeeRole.CHAIR = "chair"

NONE

Android
AttendeeRole.NONE = "none"

NON_PARTICIPANT

iOS
AttendeeRole.NON_PARTICIPANT = "nonParticipant"

OPTIONAL

iOS
AttendeeRole.OPTIONAL = "optional"

ORGANIZER

Android
AttendeeRole.ORGANIZER = "organizer"

PERFORMER

Android
AttendeeRole.PERFORMER = "performer"

REQUIRED

iOS
AttendeeRole.REQUIRED = "required"

SPEAKER

Android
AttendeeRole.SPEAKER = "speaker"

UNKNOWN

iOS
AttendeeRole.UNKNOWN = "unknown"

AttendeeStatus

Android
iOS

ACCEPTED

AttendeeStatus.ACCEPTED = "accepted"

COMPLETED

iOS
AttendeeStatus.COMPLETED = "completed"

DECLINED

AttendeeStatus.DECLINED = "declined"

DELEGATED

iOS
AttendeeStatus.DELEGATED = "delegated"

IN_PROCESS

iOS
AttendeeStatus.IN_PROCESS = "inProcess"

INVITED

Android
AttendeeStatus.INVITED = "invited"

NONE

Android
AttendeeStatus.NONE = "none"

PENDING

iOS
AttendeeStatus.PENDING = "pending"

TENTATIVE

AttendeeStatus.TENTATIVE = "tentative"

UNKNOWN

iOS
AttendeeStatus.UNKNOWN = "unknown"

AttendeeType

Android
iOS

GROUP

iOS
AttendeeType.GROUP = "group"

NONE

Android
AttendeeType.NONE = "none"

OPTIONAL

Android
AttendeeType.OPTIONAL = "optional"

PERSON

iOS
AttendeeType.PERSON = "person"

REQUIRED

Android
AttendeeType.REQUIRED = "required"

RESOURCE

AttendeeType.RESOURCE = "resource"

ROOM

iOS
AttendeeType.ROOM = "room"

UNKNOWN

iOS
AttendeeType.UNKNOWN = "unknown"

Availability

Android
iOS

BUSY

Availability.BUSY = "busy"

FREE

Availability.FREE = "free"

NOT_SUPPORTED

iOS
Availability.NOT_SUPPORTED = "notSupported"

TENTATIVE

Availability.TENTATIVE = "tentative"

UNAVAILABLE

iOS
Availability.UNAVAILABLE = "unavailable"

CalendarAccessLevel

Android

CONTRIBUTOR

CalendarAccessLevel.CONTRIBUTOR = "contributor"

EDITOR

CalendarAccessLevel.EDITOR = "editor"

FREEBUSY

CalendarAccessLevel.FREEBUSY = "freebusy"

NONE

CalendarAccessLevel.NONE = "none"

OVERRIDE

CalendarAccessLevel.OVERRIDE = "override"

OWNER

CalendarAccessLevel.OWNER = "owner"

READ

CalendarAccessLevel.READ = "read"

RESPOND

CalendarAccessLevel.RESPOND = "respond"

ROOT

CalendarAccessLevel.ROOT = "root"

CalendarDialogResultActions

Android
iOS

Enum containing all possible user responses to the calendar UI dialogs. Depending on what dialog is presented, a subset of the values applies.

canceled

iOS
CalendarDialogResultActions.canceled = "canceled"

The user canceled or dismissed the dialog.

deleted

iOS
CalendarDialogResultActions.deleted = "deleted"

The user deleted the event.

done

CalendarDialogResultActions.done = "done"

On Android, this is the only possible result because the OS doesn't provide enough information to determine the user's action - the user may have canceled the dialog, modified the event, or deleted it.

On iOS, this means the user simply closed the dialog.

responded

iOS
CalendarDialogResultActions.responded = "responded"

The user responded to and saved a pending event invitation.

saved

iOS
CalendarDialogResultActions.saved = "saved"

The user saved a new event or modified an existing one.

CalendarType

iOS

BIRTHDAYS

CalendarType.BIRTHDAYS = "birthdays"

CALDAV

CalendarType.CALDAV = "caldav"

EXCHANGE

CalendarType.EXCHANGE = "exchange"

LOCAL

CalendarType.LOCAL = "local"

SUBSCRIBED

CalendarType.SUBSCRIBED = "subscribed"

UNKNOWN

CalendarType.UNKNOWN = "unknown"

DayOfTheWeek

iOS

Sunday

DayOfTheWeek.Sunday = 1

Monday

DayOfTheWeek.Monday = 2

Tuesday

DayOfTheWeek.Tuesday = 3

Wednesday

DayOfTheWeek.Wednesday = 4

Thursday

DayOfTheWeek.Thursday = 5

Friday

DayOfTheWeek.Friday = 6

Saturday

DayOfTheWeek.Saturday = 7

EntityTypes

Android
iOS

platform ios

EVENT

EntityTypes.EVENT = "event"

REMINDER

EntityTypes.REMINDER = "reminder"

EventAccessLevel

Android

CONFIDENTIAL

EventAccessLevel.CONFIDENTIAL = "confidential"

DEFAULT

EventAccessLevel.DEFAULT = "default"

PRIVATE

EventAccessLevel.PRIVATE = "private"

PUBLIC

EventAccessLevel.PUBLIC = "public"

EventStatus

Android
iOS

CANCELED

EventStatus.CANCELED = "canceled"

CONFIRMED

EventStatus.CONFIRMED = "confirmed"

NONE

EventStatus.NONE = "none"

TENTATIVE

EventStatus.TENTATIVE = "tentative"

Frequency

Android
iOS

DAILY

Frequency.DAILY = "daily"

MONTHLY

Frequency.MONTHLY = "monthly"

WEEKLY

Frequency.WEEKLY = "weekly"

YEARLY

Frequency.YEARLY = "yearly"

MonthOfTheYear

iOS

January

MonthOfTheYear.January = 1

February

MonthOfTheYear.February = 2

March

MonthOfTheYear.March = 3

April

MonthOfTheYear.April = 4

May

MonthOfTheYear.May = 5

June

MonthOfTheYear.June = 6

July

MonthOfTheYear.July = 7

August

MonthOfTheYear.August = 8

September

MonthOfTheYear.September = 9

October

MonthOfTheYear.October = 10

November

MonthOfTheYear.November = 11

December

MonthOfTheYear.December = 12

ReminderStatus

iOS

COMPLETED

ReminderStatus.COMPLETED = "completed"

INCOMPLETE

ReminderStatus.INCOMPLETE = "incomplete"

SourceType

iOS

BIRTHDAYS

SourceType.BIRTHDAYS = "birthdays"

CALDAV

SourceType.CALDAV = "caldav"

EXCHANGE

SourceType.EXCHANGE = "exchange"

LOCAL

SourceType.LOCAL = "local"

MOBILEME

SourceType.MOBILEME = "mobileme"

SUBSCRIBED

SourceType.SUBSCRIBED = "subscribed"

Permissions

Android

If you only intend to use the system-provided calendar UI, you don't need to request any permissions.

Otherwise, you must add the following permissions to your app.json inside the expo.android.permissions array.

Android PermissionDescription

READ_CALENDAR

Allows an application to read the user's calendar data.

WRITE_CALENDAR

Allows an application to write the user's calendar data.

iOS

If you only intend to create events using system-provided calendar UI with createEventInCalendarAsync, you don't need to request permissions.

The following usage description keys are used by this library:

Info.plist KeyDescription

NSCalendarsUsageDescription

A message that tells the user why the app is requesting access to the user’s calendar data.

NSRemindersUsageDescription

A message that tells the user why the app is requesting access to the user’s reminders.