Changelog History
Page 1
-
v5.2.2 Changes
May 08, 2026π Fixes
π
Alarm.GetOccurrences(...) andAlarm.Poll(...)now have an optionalendTime` parameter to limit the evaluation of occurrences.π This prevents potential performance issues when evaluating alarms with no end date or a very long recurrence pattern. If
endTimeis not provided, the methods will evaluate occurrences indefinitely until an exception is thrown or the system's maximum date is reached.What's Changed
- π Deprecate RecurrenceRules and RecurrencePattern by @maknapp in #928
- Chore(deps): Bump actions/upload-artifact from 6 to 7 by @dependabot[bot] in #931
- β‘οΈ Update encoding and line endings for consistency in #932
- Chore(deps): Bump codecov/codecov-action from 5.5.2 to 6.0.0 by @dependabot[bot] in #935
- β chore(tests): Fix failing RecurrenceWikiTests in #941
- β Add alarm poll end time by @maknapp in #940
- π Bump release v5.2.2 in #945
Full Changelog : v5.2.1...v5.2.2
-
v5.2.1 Changes
February 09, 2026What's Changed
- π Fix: Stop TODO evaluation at given datetime by @maknapp in #915. Before: If a TODO had an RRULE without COUNT or UNTIL,
IsCompleted()threw withArgumentOutOfRangeException. - Chore(deps): Bump codecov/codecov-action from 5.5.1 to 5.5.2 in #919
- Chore(deps): Bump actions/upload-artifact from 5 to 6 in #920
- π Chore: Update release notes for v5.2.1 #927
Full Changelog : v5.2.0...v5.2.1
- π Fix: Stop TODO evaluation at given datetime by @maknapp in #915. Before: If a TODO had an RRULE without COUNT or UNTIL,
-
v5.2.0 Changes
December 23, 2025Implemented
BYDAYwith offset and limiting behaviorThe following
RRULEcases are now implemented- YEARLY + BYMONTH + numeric BYDAY offsets. Pattern:
FREQ=YEARLY;BYMONTH=6,9;BYDAY=2MO - YEARLY + numeric BYDAY without BYMONTH. Pattern:
FREQ=YEARLY;BYDAY=20MO - YEARLY + BYMONTH + negative numeric BYDAY. Pattern:
FREQ=YEARLY;BYMONTH=6,9;BYDAY=-1SU
π Changes in Detail
- Implement
BYDAYwith offset and limiting behavior in #887 - chore: Eliminate nested if statements in GetAbsWeekDaysMonthly/Weekly by in #896
- β¬οΈ Bump version 5.2.0 in #897
Full Changelog : v5.1.4...v5.2.0
- YEARLY + BYMONTH + numeric BYDAY offsets. Pattern:
-
v5.1.4 Changes
December 13, 2025Fix: Regression introduced in v5.1.3 affecting
RRULE:FREQ=YEARLYwhen negativeBYMONTHDAYorBYYEARDAYvalues are used. In certain combinations the evaluator could normalize negative positions incorrectly and skip valid occurrences (e.g., endβofβmonth or endβofβyear instances). This has been fixed β please upgrade to v5.1.4.Example of an affected rule (prior behavior could skip results):
DTSTART:20250101RRULE:FREQ=YEARLY;BYYEARDAY=-1,1;BYMONTHDAY=-1,1What's Changed
- β‘οΈ chore: Update GitHub Workflows in #891, #892, #893, #894
- π Fix regression introduced in v5.1.3 in #889 (see note above)
- β¬οΈ Bump version 5.1.4 in #895
Full Changelog : v5.1.3...v5.1.4
-
v5.1.3 Changes
December 01, 2025What's Changed
- π Fix: Correct handling
RRULE:FREQ=YEARLYcombined withBYMONTHandBYWEEKNO. The previous implementation could skip occurrences in some scenarios. - π Fix: Correct handling
RRULE:FREQ=YEARLYwhenBYMONTHist missing, e.g.RRULE:FREQ=YEARLY;INTERVAL=2;BYDAY=MO,TU. Now takes the month ofDTSTARTas a limiter. The previous implementation could show occurrences for wrong months.
Full Changelog : v5.1.2...v5.1.3
- π Fix: Correct handling
-
v5.1.2 Changes
November 13, 2025π Changes
- π Chore: Mark classes and interfaces using
EXRULEas obsolete. Reasoning:EXRULEis marked as deprecated in RFC 5545. Neither Google Calendar nor Microsoft Outlook/Exchange support it (#873) - π Feat:
CalDateTime.Add(Duration)for emptyDurations. The methods gets called frequently during recurrence evaluation. Here it brings a performance improvement of about 10% (#877). - Fix:
FREQ=WEEKLYrules that includeBYMONTHwere only including weeks that start inside the given months. This fix checks the end of the week also to see if any part of the week is inside the given months (#880)
Details
- β Remove misleading FIXME comment in
VTimeZoneInfoin #874 - Mark classes and interfaces using
EXRULEas obsolete in #873 - Skip
CalDateTime.Add(Duration)for Empty Durations in #877 - β‘οΈ Update logo image syntax in readme.md in #878
- π Fix weekly bymonth by @maknapp in #880
- β¬οΈ Bump version 5.1.2 in #881
Big Thanks to New Contributors
Full Changelog : v5.1.1...v5.1.2
- π Chore: Mark classes and interfaces using
-
v5.1.1 Changes
October 06, 2025π What's Changed in release v5.1.1
- π Fix:
CalendarEvents withRecurrenceIdwere not properly evaluated in some scenarios. - π Feat:
RecurringComponents likeCalendarEventsupportRECURRENCE-IDwith optionalRANGEparameter for serialization and deserialization. - β‘οΈ Wiki: Updated articles about recurrence evaluation
π Changes in detail
- β‘οΈ Update iCal.NET logo to display correctly in nuget readme #847
- π Fix failing coverage action #850
- β Add logging infrastructure #851
- π Fix: Event with
RECURRENCE-IDoverrides occurrence from orginal event #864 - β Add wiki recurrence page by @NRG-Drink in #848
- chore: Wiki sample: Get first occurences of all events in a
Calendar#869 - π feat:
RecurringComponentsupportsRECURRENCE-IDwith optionalRANGEparameter #870 - β¬οΈ Bump version 5.1.1 #872
Full Changelog : v5.1.0...v5.1.1
- π Fix:
-
v5.1.0 Changes
July 16, 2025What's Changed
- Chore:Make
Publishworkflow branch-agnostic in #817 - π Fix:
Publishaction in #818 - π Fix: Exception for Blazor WebAssembly and Self-Contained Assemblies using by @b-straub in #820
- π Fix: GetOccurrences(): Fix NPE when returning a ToDo's occurrences that don't have a duration by @minichma in #826
- π Fix: Evaluation of
EXDATEwhen date-only whileDTSTARTis date-time by @minichma in #830 - 0οΈβ£ Feat: Use UTF-8 Encoding without BOM by default in all serializers when writing to a stream. This is expected by most iCalendar consumers, including Outlook and Google Calendar. #827
- π Fix:
CalDateTimeCTOR using ISO 8601 UTC string resolves to UTC in #833 - β‘οΈ Chore: Update GitHub Actions for Tests and Coverage in #837
- β‘οΈ Chore: Update license history in #839
- π Fix
GetOccurrences(periodStart)to also include ongoing occurrences (beginning beforeperiodStartby @minichma in #836 - π Fix
GetOccurrences()not properly dealing withperiodStart's timezone ID by @minichma in #842 - π Chore: Add release notes for v5.1.0 in #844
π New Contributors
Full Changelog : v5.0.0...v5.1.0
- Chore:Make
-
v5.0.0 Changes
June 17, 2025What's Changed
- β Remove redundant
EqualsandGetHashCodeimplementations in #810 Occurrence.Periodis determined byStartTimeandDurationonly in #808- β‘οΈ Update package versions in #813
- π Fix:
Period.CollidesWithcalculation in #812 - β Added a Migration Guide for v4 to v5 to the wiki
- β‘οΈ Update the list of API Changes from v4 to v5 in the wiki
- Publish v5.0.0 GA
π New Contributors
- @NRG-Drink made their first contribution in #803, and welcome to the
ical-orgteam.
π Changelog for latest changes : v5.0.0-pre.43...v5.0.0
π Full Changelog for last GA release : v4.3.1...v5.0.0 - β Remove redundant
-
v5.0.0-pre.43 Changes
May 21, 2025What's Changed
- π₯ Breaking: Enable NRT project wide in #769, #771, #772, #778, #786. NuGet Packages are now published with NRT enabled.
- β‘οΈ Update license.md in #773
- EvaluationOptions: Fix off-by-one issue of
MaxUnmatchedIncrementsLimitby @minichma in #775 - RecurrencePatternEvaluator: Modernize some evaluation code. by @minichma in #783
- π₯ Breaking: Evaluation: Remove
periodEndparam fromGetOccurrenceset al by @minichma in #781. To limit the elements, it's recommended to usedCollectionExtensions.TakeWhileBefore(see below), or simpleTakeWhile. - Implement
CollectionExtensions.TakeWhileBeforeextensions in #796. This can e.g. be used on enumerations fromGetOccurrencesmethods - Evaluation: Raise
EvaluationOutOfRangeExceptionif year 10k is hit during evaluation by @minichma in #785 - β Remove unnecessary null checks in #790
- π₯ Breaking: Refactor handling of FREQ in recurrence pattern in #789. Removed
FrequencyType.Nonefrom enumFrequencyType - π₯ Breaking: Remove
GroupedListEnumeratorin #793 (Different solution made it redundant). - β Enable
CA1305warnings and fix them in #794 - π Fix for serialization of property parameters:
CalendarComponent.AddPropertyadds theCalendarPropertyin #801 - π₯ Breaking: Feature: Serialize multiple categories and resources to one line by @NRG-Drink in #803 and #804
Thanks to new Contributors
- @NRG-Drink made their first contribution in #803
Full Changelog : v5.0.0-pre.42...v5.0.0-pre.43