Version 2.2.0

October 20, 2026

Features

  • cp: add a status filter to the calendar (7a7ed4b)
  • cp: default new events to user's preferred timezone (77b191e)
  • cp: display city for selected timezone (1aa9335)
  • cp: improve timezone picker ux (21d13dd)
  • cp: link the title in calendar popovers to the edit page, with the event type above it (9b06fe8)
  • cp: match the field settings to Craft's Date field (32d7f78)
  • cp: open the editor slideout when double-clicking calendar events (9be1a85)
  • cp: override Craft's timezone inputs (ad88a5e)
  • cp: show the calendar in the user's preferred timezone (8c8a13f)
  • cp: show the event's status in calendar popovers (b011d46)
  • end date for all-day events (517e7b6)
  • event to customize the organizer filter query (9051890)
  • event to override the timezone labels (7a2a57a)
  • format any event date with eventDate filter and EventDateHelper::formatDate() (c467530)
  • get a query for the events of each source with getEventQueries() (e7b68ba)
  • show fields based on whether an event repeats or is all day (334de2c)

Bug Fixes

  • apply the constraint in getOccurrences() to events that don't repeat (1eee142)
  • cp: calendar browser history (5e99ead)
  • cp: delete the right occurrence from the calendar for events in other timezones (2ba7e59)
  • cp: display time zones in calendar popup when they differ from user's (e540206)
  • cp: handle timezones newer than the intl extension's data (d082d21)
  • cp: keep weekly repeat weekdays when start date doesn't change (f802893)
  • cp: read dates from mobile date inputs as local dates (cc72502)
  • cp: show all-day events on the right day in element indexes (e5fcdc2)
  • cp: show event dates in event's timezone (1e37114)
  • cp: show events ending early the next morning on their start day only (02f9cc5)
  • cp: show the selected view in the calendar's view menu (f941fd8)
  • cp: show unpublished events (e.g. disabled or pending) as hollow instead of struck through (28f83e4)
  • cp: style calendar block events consistently with dot events (938058e)
  • cp: update timezone dropdown labels when start date changes (e3b22ee)
  • cp: use RRULE weekdays for monthly repeats (645921b)
  • don't fail when saving a new event element directly (33434da)
  • don't fail when skipping the format of the eventDate filter (ff495bb)
  • format dates and times in site locale (d75d12a)
  • increase a new event's sequence on its first change, instead of leaving it at 0 (819298a)
  • increase an event's sequence when it's deleted or restored, so calendars apply the change (5936086)
  • keep days of all-day events in system timezone (b32d35a)
  • keep paragraphs and line breaks in ICS descriptions (23d4ffe)
  • rename the after build ICS event from beforeExport to afterBuildIcs (a7eb124)
  • store all-day events in system timezone (67c4442)
  • throw a clear exception for an unknown event source key (150ba00)
  • throw an error for an invalid event date format (09b6d52)
  • use a hard-deleted event's latest sequence in its ICS, instead of 0 (5bca8d7)

Version 2.1.0

October 15, 2026

Features

  • get events & occurrences in range (11e07d9)
  • improve caching of event properties (136a1dd)
  • option to include in-progress occurrences when getting next (d3c7f44)

Bug Fixes

  • clone constraint when getting occurrences (2e356ff)
  • don't duplicate occurrences for inclusions on a repeat date (0023f38)
  • find the next occurrence of events with more past occurrences than the virtual limit (fd90b99)
  • optimize finding the last end of an until rule (99fe32e)

Version 2.0.1

October 15, 2026

Bug Fixes

  • find the last end date of events with more than 732 occurrences (3dd4945)
  • ics: convert dates in fixed offset timezones to UTC (a8b24a7)
  • ics: define timezones for inclusions before the start (05c42df)
  • ics: don't define a timezone for UTC (52e8475)
  • ics: include seconds in timezone offsets (9d97fdb)
  • ics: timezone definitions (b6e7a77)
  • include field label in validation errors (d2cf5f7)

Version 2.0.0

October 9, 2026

EventDate::getNextOccurrence() now only returns a future occurrence, instead of the first occurrence today.

Features

  • field: optional all day events (2b9ba9d)

Bug Fixes

  • all day events in ICS exports and repeating rules (0144229)
  • all day events in twig filters (d37adcf)
  • compare the calendar secret in constant time (0d891d3)
  • consistent separator for repeating event date ranges (dccc61e)
  • end an event the next day if end time is before start time (86b99ab)
  • field: always fill the start & end times (b9b6a30)
  • field: never-ending events dropping out of the calendar (c1f0e21)
  • ics: skip events without dates in exports (0793205)
  • only return occurrences that start after now (7bb1d0c)
  • refresh occurrences and repeat description when the rule is refreshed (925e422)
  • require post request to delete event occurrence (da0378e)
  • show both dates for events that end the next day (76cc0a0)
  • throw 400 when events action is passed invalid dates (6b29579)

Version 1.3.1

October 8, 2026

Bug Fixes

  • field: don't overwrite criteria (eda28a2)
  • find occurrences of long-running events within a date range (a4acf72)

Version 1.3.0

October 8, 2026

Features

Bug Fixes

  • handle multibyte repeat descriptions (9347cb6)
  • ics: handle timezones with half-hour offsets (df81c7a)
  • ics: handle users without names (47ebf4c)
  • show until date in event timezone (7b3e7ae)

Version 1.2.0

August 18, 2026

Features

  • avoid recalculating repeat description (3fa800e)

Bug Fixes

  • always store first start & last end (97bee68)

Version 1.1.2

August 8, 2026

Bug Fixes

  • field: support readonly mode (a162a08)
  • remove unnecessary permission check (cfced9d)

Version 1.1.1

August 8, 2026

Bug Fixes

  • field: validation for infinite repeat (f9a5f1d)

Version 1.1.0

August 8, 2026

Features

Bug Fixes

  • input serialization & validation (4d15834)

Version 1.0.0

August 6, 2026

Features