HomeGuidesReferenceLearn

Reference version

ArchiveExpo SnackDiscord and ForumsNewsletter
This is documentation for the next SDK version. For up-to-date documentation, see the latest version (SDK 51).

Expo Calendar

GitHub

npm

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

Android
iOS

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 user view or edit events. On Android, these methods start the system calendar app using an Intent. 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 (bare workflow), start by installing expo in your project. Then, follow the additional instructions as mentioned by library's README under "Installation in bare React Native projects" section.

Configuration in app.json/app.config.js

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 a bare React Native app?

Learn how to configure the native projects in the installation instructions in the expo-calendar repository.

Usage

Basic Calendar usage
import React, { useEffect } from 'react';
import { StyleSheet, View, Text, Button, Platform } from 'react-native';
import * as Calendar from 'expo-calendar';

export default function App() {
  useEffect(() => {
    (async () => {
      const { status } = await Calendar.requestCalendarPermissionsAsync();
      if (status === 'granted') {
        const calendars = await Calendar.getCalendarsAsync(Calendar.EntityTypes.EVENT);
        console.log('Here are all your calendars:');
        console.log({ calendars });
      }
    })();
  }, []);

  return (
    <View style={styles.container}>
      <Text>Calendar Module Example</Text>
      <Button title="Create a new calendar" onPress={createCalendar} />
    </View>
  );
}

async function getDefaultCalendarSource() {
  const defaultCalendar = await Calendar.getDefaultCalendarAsync();
  return defaultCalendar.source;
}

async function createCalendar() {
  const defaultCalendarSource =
    Platform.OS === 'ios'
      ? await getDefaultCalendarSource()
      : { isLocalAccount: true, name: 'Expo Calendar' };
  const newCalendarID = await Calendar.createCalendarAsync({
    title: 'Expo Calendar',
    color: 'blue',
    entityType: Calendar.EntityTypes.EVENT,
    sourceId: defaultCalendarSource.id,
    source: defaultCalendarSource,
    name: 'internalCalendarName',
    ownerAccount: 'personal',
    accessLevel: Calendar.CalendarAccessLevel.OWNER,
  });
  console.log(`Your new calendar ID is: ${newCalendarID}`);
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'space-around',
  },
});

API

import * as Calendar from 'expo-calendar';

Launching system-provided calendar dialogs

Android
iOS

createEventInCalendarAsync(eventData, presentationOptions)

NameTypeDescription
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.

Returns:

Promise<DialogEventResult>

A promise which resolves with information about the dialog result.

Android
iOS

editEventInCalendarAsync(params, presentationOptions)

NameType
paramsCalendarDialogParams
presentationOptions
(optional)
PresentationOptions

Launches the calendar UI provided by the OS to edit or delete an event. On Android, this is the same as openEventInCalendarAsync.

Returns:

Promise<DialogEventResult>

A promise which resolves with information about the dialog result.

Deprecated Use openEventInCalendarAsync instead.

Android

openEventInCalendar(id)

NameTypeDescription
idstring

ID of the event to open.


Sends an intent to open the specified event in the OS Calendar app.

Returns:

void

Android
iOS

openEventInCalendarAsync(params, presentationOptions)

NameType
paramsCalendarDialogParams
presentationOptions
(optional)
OpenEventPresentationOptions

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

Returns:

Promise<OpenEventDialogResult>

A promise which resolves with information about the dialog result.

Hooks

Android
iOS

useCalendarPermissions(options)

NameType
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();
Android
iOS

useRemindersPermissions(options)

NameType
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();

Methods

Android

Calendar.createAttendeeAsync(eventId, details)

NameTypeDescription
eventIdstring

ID of the event to add this attendee to.

details
(optional)
Partial<Attendee>

A map of details for the attendee to be created.

Default: {}

Creates a new attendee record and adds it to the specified event. Note that if eventId specifies a recurring event, this will add the attendee to every instance of the event.

Returns:

Promise<string>

A string representing the ID of the newly created attendee record.

Android
iOS

Calendar.createCalendarAsync(details)

NameTypeDescription
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.

Returns:

Promise<string>

A string representing the ID of the newly created calendar.

Android
iOS

Calendar.createEventAsync(calendarId, eventData)

NameTypeDescription
calendarIdstring

ID of the calendar to create this event in.

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

A map of details for the event to be created.

Default: {}

Creates a new event on the specified calendar.

Returns:

Promise<string>

A promise which fulfils with a string representing the ID of the newly created event.

iOS

Calendar.createReminderAsync(calendarId, reminder)

NameTypeDescription
calendarIdnull | string

ID of the calendar to create this reminder in (or null to add the calendar to the OS-specified default calendar for reminders).

reminder
(optional)
Reminder

A map of details for the reminder to be created

Default: {}

Creates a new reminder on the specified calendar.

Returns:

Promise<string>

A promise which fulfils with a string representing the ID of the newly created reminder.

Android

Calendar.deleteAttendeeAsync(id)

NameTypeDescription
idstring

ID of the attendee to delete.


Deletes an existing attendee record from the device. Use with caution.

Returns:

Promise<void>

Android
iOS

Calendar.deleteCalendarAsync(id)

NameTypeDescription
idstring

ID of the calendar to delete.


Deletes an existing calendar and all associated events/reminders/attendees from the device. Use with caution.

Returns:

Promise<void>

Android
iOS

Calendar.deleteEventAsync(id, recurringEventOptions)

NameTypeDescription
idstring

ID of the event to be deleted.

recurringEventOptions
(optional)
RecurringEventOptions

A map of options for recurring events.

Default: {}

Deletes an existing event from the device. Use with caution.

Returns:

Promise<void>

iOS

Calendar.deleteReminderAsync(id)

NameTypeDescription
idstring

ID of the reminder to be deleted.


Deletes an existing reminder from the device. Use with caution.

Returns:

Promise<void>

Android
iOS

Calendar.getAttendeesForEventAsync(id, recurringEventOptions)

NameTypeDescription
idstring

ID of the event to return attendees for.

recurringEventOptions
(optional)
RecurringEventOptions

A map of options for recurring events.

Default: {}

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

Returns:

Promise<Attendee[]>

Android
iOS

Calendar.getCalendarPermissionsAsync()

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

Returns:

Promise<PermissionResponse>

Android
iOS

Calendar.getCalendarsAsync(entityType)

NameTypeDescription
entityType
(optional)
string

iOS Only. Not required, but if defined, filters the returned calendars to a specific entity type. Possible values are Calendar.EntityTypes.EVENT (for calendars shown in the Calendar app) and Calendar.EntityTypes.REMINDER (for the Reminders app).

Note: If not defined, you will need both permissions: CALENDAR and REMINDERS.


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

Returns:

Promise<Calendar[]>

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

iOS

Calendar.getDefaultCalendarAsync()

Gets an instance of the default calendar object.

Returns:

Promise<Calendar>

A promise resolving to the Calendar object that is the user's default calendar.

Android
iOS

Calendar.getEventAsync(id, recurringEventOptions)

NameTypeDescription
idstring

ID of the event to return.

recurringEventOptions
(optional)
RecurringEventOptions

A map of options for recurring events.

Default: {}

Returns a specific event selected by ID. If a specific instance of a recurring event is desired, the start date of this instance must also be provided, as instances of recurring events do not have their own unique and stable IDs on either iOS or Android.

Returns:

Promise<Event>

Android
iOS

Calendar.getEventsAsync(calendarIds, startDate, endDate)

NameTypeDescription
calendarIdsstring[]

Array of IDs of calendars to search for events in.

startDateDate

Beginning of time period to search for events in.

endDateDate

End of time period to search for events in.


Returns all events in a given set of calendars over a specified time period. The filtering has slightly different behavior per-platform - on iOS, all events that overlap at all with the [startDate, endDate] interval are returned, whereas on Android, only events that begin on or after the startDate and end on or before the endDate will be returned.

Returns:

Promise<Event[]>

A promise which fulfils with an array of Event objects matching the search criteria.

iOS

Calendar.getReminderAsync(id)

NameTypeDescription
idstring

ID of the reminder to return.


Returns a specific reminder selected by ID.

Returns:

Promise<Reminder>

iOS

Calendar.getRemindersAsync(calendarIds, status, startDate, endDate)

NameTypeDescription
calendarIds(null | string)[]

Array of IDs of calendars to search for reminders in.

statusnull | ReminderStatus

One of Calendar.ReminderStatus.COMPLETED or Calendar.ReminderStatus.INCOMPLETE.

startDateDate

Beginning of time period to search for reminders in. Required if status is defined.

endDateDate

End of time period to search for reminders in. Required if status is defined.


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 - i.e. all reminders that end after the startDate or begin before the endDate.

Returns:

Promise<Reminder[]>

A promise which fulfils with an array of Reminder objects matching the search criteria.

iOS

Calendar.getRemindersPermissionsAsync()

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

Returns:

Promise<PermissionResponse>

iOS

Calendar.getSourceAsync(id)

NameTypeDescription
idstring

ID of the source to return.


Returns a specific source selected by ID.

Returns:

Promise<Source>

iOS

Calendar.getSourcesAsync()

Returns:

Promise<Source[]>

A promise which fulfils with an array of Source objects all sources for calendars stored on the device.

Android
iOS

Calendar.isAvailableAsync()

Returns whether the Calendar API is enabled on the current device. This does not check the app permissions.

Returns:

Promise<boolean>

Async boolean, indicating whether the Calendar API is available on the current device. Currently, this resolves true on iOS and Android only.

Android
iOS

Calendar.requestCalendarPermissionsAsync()

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

Returns:

Promise<PermissionResponse>

Deprecated Use requestCalendarPermissionsAsync() instead.

Android
iOS

Calendar.requestPermissionsAsync()

Returns:

Promise<PermissionResponse>

iOS

Calendar.requestRemindersPermissionsAsync()

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

Returns:

Promise<PermissionResponse>

Android

Calendar.updateAttendeeAsync(id, details)

NameTypeDescription
idstring

ID of the attendee record to be updated.

details
(optional)
Partial<Attendee>

A map of properties to be updated.

Default: {}

Updates an existing attendee record. To remove a property, explicitly set it to null in details.

Returns:

Promise<string>

Android
iOS

Calendar.updateCalendarAsync(id, details)

NameTypeDescription
idstring

ID of the calendar to update.

details
(optional)
Partial<Calendar>

A map of properties to be updated.

Default: {}

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<string>

Android
iOS

Calendar.updateEventAsync(id, details, recurringEventOptions)

NameTypeDescription
idstring

ID of the event to be updated.

details
(optional)
Omit<Partial<Event>, 'id'>

A map of properties to be updated.

Default: {}
recurringEventOptions
(optional)
RecurringEventOptions

A map of options for recurring events.

Default: {}

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<string>

iOS

Calendar.updateReminderAsync(id, details)

NameTypeDescription
idstring

ID of the reminder to be updated.

details
(optional)
Reminder

A map of properties to be updated.

Default: {}

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

Returns:

Promise<string>

Interfaces

Android
iOS

PermissionResponse

An object obtained by permissions get and request functions.

PermissionResponse Properties

NameTypeDescription
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.


Types

Android
iOS

Alarm

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

NameTypeDescription
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-
Android
iOS

AlarmLocation

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

Attendee

A person or entity that is associated with an event by being invited or fulfilling some other role.

NameTypeDescription
email
(optional)
string
Only for:
Android

Email address of the attendee.

id
(optional)
string
Only for:
Android

Internal ID that represents this attendee on the device.

isCurrentUser
(optional)
boolean
Only for:
iOS

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

namestring

Displayed name of the attendee.

roleAttendeeRole

Role of the attendee at the event.

statusAttendeeStatus

Status of the attendee in relation to the event.

typeAttendeeType

Type of the attendee.

url
(optional)
string
Only for:
iOS

URL for the attendee.

Android
iOS

Calendar

A calendar record upon which events (or, on iOS, reminders) can be stored. Settings here apply to the calendar as a whole and how its events are displayed in the OS calendar app.

NameTypeDescription
accessLevel
(optional)
CalendarAccessLevel
Only for:
Android

Level of access that the user has for the calendar.

allowedAttendeeTypes
(optional)
AttendeeType[]
Only for:
Android

Attendee types that this calendar supports.

allowedAvailabilitiesAvailability[]

Availability types that this calendar supports.

allowedReminders
(optional)
AlarmMethod[]
Only for:
Android

Alarm methods that this calendar supports.

allowsModificationsboolean

Boolean value that determines whether this calendar can be modified.

colorstring

Color used to display this calendar's events.

entityType
(optional)
EntityTypes
Only for:
iOS

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

idstring

Internal ID that represents this calendar on the device.

isPrimary
(optional)
boolean
Only for:
Android

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

isSynced
(optional)
boolean
Only for:
Android

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
(optional)
boolean
Only for:
Android

Indicates whether the OS displays events on this calendar.

name
(optional)
string | null
Only for:
Android

Internal system name of the calendar.

ownerAccount
(optional)
string
Only for:
Android

Name for the account that owns this calendar.

sourceSource

Object representing the source to be used for the calendar.

sourceId
(optional)
string
Only for:
iOS

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

timeZone
(optional)
string
Only for:
Android

Time zone for the calendar.

titlestring

Visible name of the calendar.

type
(optional)
CalendarType
Only for:
iOS

Type of calendar this object represents.

Android
iOS

CalendarDialogParams

NameTypeDescription
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.

iOS

DaysOfTheWeek

NameTypeDescription
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).

Android
iOS

DialogEventResult

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

NameTypeDescription
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 user confirms the creation or editing of an event. Otherwise, it's null.

Android
iOS

Event

An event record, or a single instance of a recurring event. On iOS, used in the Calendar app.

NameTypeDescription
accessLevel
(optional)
EventAccessLevel
Only for:
Android

User's access level for the event.

alarmsAlarm[]

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

allDayboolean

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

availabilityAvailability

The availability setting for the event.

calendarIdstring

ID of the calendar that contains this event.

creationDate
(optional)
string | Date
Only for:
iOS

Date when the event record was created.

endDatestring | Date

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

endTimeZone
(optional)
string
Only for:
Android

Time zone for the event end time.

guestsCanInviteOthers
(optional)
boolean
Only for:
Android

Whether invited guests can invite other guests.

guestsCanModify
(optional)
boolean
Only for:
Android

Whether invited guests can modify the details of the event.

guestsCanSeeGuests
(optional)
boolean
Only for:
Android

Whether invited guests can see other guests.

idstring

Internal ID that represents this event on the device.

instanceId
(optional)
string
Only for:
Android

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

isDetached
(optional)
boolean
Only for:
iOS

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

lastModifiedDate
(optional)
string | Date
Only for:
iOS

Date when the event record was last modified.

locationstring

Location field of the event.

notesstring

Description or notes saved with the event.

organizer
(optional)
string
Only for:
iOS

Organizer of the event.

organizerEmail
(optional)
string
Only for:
Android

Email address of the organizer of the event.

originalId
(optional)
string
Only for:
Android

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

originalStartDate
(optional)
string | Date
Only for:
iOS

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

recurrenceRuleRecurrenceRule | null

Object representing rules for recurring or repeating events. Set to null for one-time events.

startDatestring | Date

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

statusEventStatus

Status of the event.

timeZonestring

Time zone the event is scheduled in.

titlestring

Visible name of the event.

url
(optional)
string
Only for:
iOS

URL for the event.

Android
iOS

OpenEventDialogResult

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

NameTypeDescription
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.

Android
iOS

OpenEventPresentationOptions

Type: PresentationOptions extended by:


NameTypeDescription
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
Android
iOS

PermissionHookOptions

Literal Type: multiple types

Acceptable values are: PermissionHookBehavior | Options

Android
iOS

PresentationOptions

NameTypeDescription
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
Android
iOS

RecurrenceRule

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.

NameTypeDescription
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.

iOS

RecurringEventOptions

NameTypeDescription
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.

iOS

Reminder

A reminder record, used in the iOS Reminders app. No direct analog on Android.

NameTypeDescription
alarms
(optional)
Alarm[]

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

calendarId
(optional)
string

ID of the calendar that contains this reminder.

completed
(optional)
boolean

Indicates whether or not the task has been completed.

completionDate
(optional)
string | Date

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.

creationDate
(optional)
string | Date

Date when the reminder record was created.

dueDate
(optional)
string | Date

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

id
(optional)
string

Internal ID that represents this reminder on the device.

lastModifiedDate
(optional)
string | Date

Date when the reminder record was last modified.

location
(optional)
string

Location field of the reminder

notes
(optional)
string

Description or notes saved with the reminder.

recurrenceRule
(optional)
RecurrenceRule | null

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

startDate
(optional)
string | Date

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

timeZone
(optional)
string

Time zone the reminder is scheduled in.

title
(optional)
string

Visible name of the reminder.

url
(optional)
string

URL for the reminder.

Android
iOS

Source

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

NameTypeDescription
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

Android

AlarmMethod

AlarmMethod Values

ALARM

AlarmMethod.ALARM = "alarm"

ALERT

AlarmMethod.ALERT = "alert"

DEFAULT

AlarmMethod.DEFAULT = "default"

EMAIL

AlarmMethod.EMAIL = "email"

SMS

AlarmMethod.SMS = "sms"
Android
iOS

AttendeeRole

AttendeeRole Values

Only for:
Android

ATTENDEE

AttendeeRole.ATTENDEE = "attendee"
Only for:
iOS

CHAIR

AttendeeRole.CHAIR = "chair"
Only for:
Android

NONE

AttendeeRole.NONE = "none"
Only for:
iOS

NON_PARTICIPANT

AttendeeRole.NON_PARTICIPANT = "nonParticipant"
Only for:
iOS

OPTIONAL

AttendeeRole.OPTIONAL = "optional"
Only for:
Android

ORGANIZER

AttendeeRole.ORGANIZER = "organizer"
Only for:
Android

PERFORMER

AttendeeRole.PERFORMER = "performer"
Only for:
iOS

REQUIRED

AttendeeRole.REQUIRED = "required"
Only for:
Android

SPEAKER

AttendeeRole.SPEAKER = "speaker"
Only for:
iOS

UNKNOWN

AttendeeRole.UNKNOWN = "unknown"
Android
iOS

AttendeeStatus

AttendeeStatus Values

ACCEPTED

AttendeeStatus.ACCEPTED = "accepted"
Only for:
iOS

COMPLETED

AttendeeStatus.COMPLETED = "completed"

DECLINED

AttendeeStatus.DECLINED = "declined"
Only for:
iOS

DELEGATED

AttendeeStatus.DELEGATED = "delegated"
Only for:
iOS

IN_PROCESS

AttendeeStatus.IN_PROCESS = "inProcess"
Only for:
Android

INVITED

AttendeeStatus.INVITED = "invited"
Only for:
Android

NONE

AttendeeStatus.NONE = "none"
Only for:
iOS

PENDING

AttendeeStatus.PENDING = "pending"

TENTATIVE

AttendeeStatus.TENTATIVE = "tentative"
Only for:
iOS

UNKNOWN

AttendeeStatus.UNKNOWN = "unknown"
Android
iOS

AttendeeType

AttendeeType Values

Only for:
iOS

GROUP

AttendeeType.GROUP = "group"
Only for:
Android

NONE

AttendeeType.NONE = "none"
Only for:
Android

OPTIONAL

AttendeeType.OPTIONAL = "optional"
Only for:
iOS

PERSON

AttendeeType.PERSON = "person"
Only for:
Android

REQUIRED

AttendeeType.REQUIRED = "required"

RESOURCE

AttendeeType.RESOURCE = "resource"
Only for:
iOS

ROOM

AttendeeType.ROOM = "room"
Only for:
iOS

UNKNOWN

AttendeeType.UNKNOWN = "unknown"
Android
iOS

Availability

Availability Values

BUSY

Availability.BUSY = "busy"

FREE

Availability.FREE = "free"
Only for:
iOS

NOT_SUPPORTED

Availability.NOT_SUPPORTED = "notSupported"

TENTATIVE

Availability.TENTATIVE = "tentative"
Only for:
iOS

UNAVAILABLE

Availability.UNAVAILABLE = "unavailable"
Android

CalendarAccessLevel

CalendarAccessLevel Values

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"
Android
iOS

CalendarDialogResultActions

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

CalendarDialogResultActions Values

Only for:
iOS

canceled

CalendarDialogResultActions.canceled = "canceled"

The user canceled or dismissed the dialog.

Only for:
iOS

deleted

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.

Only for:
iOS

responded

CalendarDialogResultActions.responded = "responded"

The user responded to and saved a pending event invitation.

Only for:
iOS

saved

CalendarDialogResultActions.saved = "saved"

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

iOS

CalendarType

CalendarType Values

BIRTHDAYS

CalendarType.BIRTHDAYS = "birthdays"

CALDAV

CalendarType.CALDAV = "caldav"

EXCHANGE

CalendarType.EXCHANGE = "exchange"

LOCAL

CalendarType.LOCAL = "local"

SUBSCRIBED

CalendarType.SUBSCRIBED = "subscribed"

UNKNOWN

CalendarType.UNKNOWN = "unknown"
iOS

DayOfTheWeek

DayOfTheWeek Values

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
Android
iOS

EntityTypes

platform ios

EntityTypes Values

EVENT

EntityTypes.EVENT = "event"

REMINDER

EntityTypes.REMINDER = "reminder"
Android

EventAccessLevel

EventAccessLevel Values

CONFIDENTIAL

EventAccessLevel.CONFIDENTIAL = "confidential"

DEFAULT

EventAccessLevel.DEFAULT = "default"

PRIVATE

EventAccessLevel.PRIVATE = "private"

PUBLIC

EventAccessLevel.PUBLIC = "public"
Android
iOS

EventStatus

EventStatus Values

CANCELED

EventStatus.CANCELED = "canceled"

CONFIRMED

EventStatus.CONFIRMED = "confirmed"

NONE

EventStatus.NONE = "none"

TENTATIVE

EventStatus.TENTATIVE = "tentative"
Android
iOS

Frequency

Frequency Values

DAILY

Frequency.DAILY = "daily"

MONTHLY

Frequency.MONTHLY = "monthly"

WEEKLY

Frequency.WEEKLY = "weekly"

YEARLY

Frequency.YEARLY = "yearly"
iOS

MonthOfTheYear

MonthOfTheYear Values

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
Android
iOS

PermissionStatus

PermissionStatus Values

DENIED

PermissionStatus.DENIED = "denied"

User has denied the permission.

GRANTED

PermissionStatus.GRANTED = "granted"

User has granted the permission.

UNDETERMINED

PermissionStatus.UNDETERMINED = "undetermined"

User hasn't granted or denied the permission yet.

iOS

ReminderStatus

ReminderStatus Values

COMPLETED

ReminderStatus.COMPLETED = "completed"

INCOMPLETE

ReminderStatus.INCOMPLETE = "incomplete"
iOS

SourceType

SourceType Values

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

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.