Skip to content
+

Scheduler - Recurring Events

Define recurring events.

You can use the rrule property on your event model to define its repeating pattern using the RFC 5545 RRULE string format:

const event = {
  // ...other properties
  rrule: 'FREQ=WEEKLY;INTERVAL=2;BYDAY=TH',
};

The EventCalendarPremium and the EventTimelinePremium expand recurring events only for the visible range, keeps the original duration and handles all-day and multi-day spans.

All day

Out of office

Alice's Birthday

Running

Team Retrospective

Evening Gym Class

Running

Remote work

Daily Standup

Dental Checkup

Daily Standup

1-on-1 with Abigail

Client Call

Evening Gym Class

Daily Standup

Weekly planning

Dinner with Friends

MUI X Expired package version

Frequency and interval

The RRULE string is composed of semicolon-separated KEY=VALUE pairs. The two fundamental properties are:

  • FREQ — the base frequency of the rule: DAILY, WEEKLY, MONTHLY, or YEARLY.
  • INTERVAL (optional, defaults to 1) — at which intervals the recurrence repeats. For example, within a DAILY rule, a value of 8 means every eight days.

Daily frequency

No extra property 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;BYDAY=MO';

// 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 BYMONTHDAY property 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 BYDAY property with a single ordinal entry (2TU represents 2nd Tuesday, -1FR represents last Friday, etc):

    // Second Tuesday of every month
    rrule: 'FREQ=MONTHLY;BYDAY=2TU';
    
    // Last Friday of every month
    rrule: 'FREQ=MONTHLY;BYDAY=-1FR';
    
    // First Monday of every two months
    rrule: 'FREQ=MONTHLY;INTERVAL=2;BYDAY=1MO';
    

Yearly frequency

No extra property is required:

// Every year on the event's start date (same month and day)
rrule: 'FREQ=YEARLY';

// 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 recurring 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 COUNT property if you want your event to stop after a given amount of occurrences:

    // Stop after 5 occurrences
    rrule: 'FREQ=DAILY;COUNT=5';
    
  • Use the UNTIL property if you want your event to stop at a given date. The date must be in UTC and formatted as YYYYMMDDTHHmmssZ (no dashes or colons):

    // Until December 31, 2025 at 23:59:59 UTC (inclusive)
    rrule: 'FREQ=WEEKLY;BYDAY=TU;UNTIL=20251231T235959Z';