Scheduler - Recurring Events
Define recurring events.
You can use the rrule property on your event model to define its repeating pattern:
const event = {
// ...other event properties
rrule: { freq: 'WEEKLY', interval: 2, byDay: ['TH'] },
};
The Event Calendar and the Timeline expand recurring events only for the visible range, keeps the original duration and handles all-day and multi-day spans.
July 2025
7 days every 4 weeks
First Saturday of the Month
Every 2 Days
MO to TH
MO, WE and FR
Every 3 Days
MO to TH
Every 3 Weeks on TU
Every 2 Days
MO to TH
MO, WE and FR
MO to TH
Biweekly TH
Every 3 Days
Every 2 Days
MO, WE and FR
SA and SU
Frequency and interval
The repeating pattern of an event is defined using an object which expects the following properties:
export interface RecurringEventRecurrenceRule {
/**
* Base frequency of the rule.
* Corresponds to the FREQ property of the string-based RRULE.
*/
freq: 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'YEARLY';
/**
* Positive integer representing at which intervals the recurrence rule repeats.
* For example, within a DAILY rule, a value of "8" means every eight days.
* Corresponds to the INTERVAL property of the string-based RRULE.
* @default 1
*/
interval?: number;
// ... other properties like `byDay` or `byMonthDay` that depends on the frequency
// see the example below or the full RecurringEventRecurrenceRule definition for more details
}
Daily frequency
No extra field is required:
// Every day
rrule={{ freq: 'DAILY' }}
// Every two days
rrule={{ freq: 'DAILY', interval: 2 }}
Weekly frequency
Use the byDay property with plain weekday codes (no ordinal) to define the day(s) of the week on which the event should be applied:
// Every week on Monday
rrule={{ freq: 'WEEKLY' }}
// Every two weeks on Monday, Wednesday and Friday
rrule={{ freq: 'WEEKLY', interval: 2, byDay: ['MO', 'WE', 'FR'] }}
Monthly frequency
Use either the byMonthDay or the byDay property (both can't be defined together):
Use the
byMonthDayproperty with a single day number to define the day of the month on which the event should be applied:// Every month on the 15th rrule: { freq: 'MONTHLY', byMonthDay: [15] } // Every two months on the 15th rrule: { freq: 'MONTHLY', interval: 2, byMonthDay: [15] }Use the
byDayproperty with a single ordinal entry (2TUrepresents 2nd Tuesday,-1FRrepresents last Friday, etc):// Second Tuesday of every month rrule: { freq: 'MONTHLY', interval: 1, byDay: ['2TU'] } // Last Friday of every month rrule: { freq: 'MONTHLY', interval: 1, byDay: ['-1FR'] } // First Monday of every two month rrule: { freq: 'MONTHLY', interval: 2, byDay: ['1MO'] }
Yearly frequency
No extra field is required:
// Every year on the event's start date (same month and day)
rrule: { freq: 'YEARLY', interval: 1 }
// Every two years on the event's start date (same month and day)
rrule: { freq: 'YEARLY', interval: 2 }
End boundary
By default, the event keeps occurrence without ever ending.
Use either the count or the until property if you want to put an end boundary to your event (both can't be defined together):
Use the
countproperty if you want your event to stop after a given amount of occurrences:// Stop after 5 occurrences rrule: { freq: 'DAILY', count: 5 }Use the
untilproperty if you want your event to stop at a given date:// Until a date (inclusive) rrule: { freq: 'WEEKLY', byDay: ['TU'], until: DateTime.fromISO('2025-12-31T23:59:59Z') }