Releases: ical-org/ical.net
v5.2.0
Implemented BYDAY with offset and limiting behavior
The following RRULE cases 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
v5.1.4
Fix: Regression introduced in v5.1.3 affecting RRULE:FREQ=YEARLY when negative BYMONTHDAY or BYYEARDAY values 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:20250101
RRULE: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
What'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
v5.1.2
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
v5.1.1
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
v5.1.0
What'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 - 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
v5.0.0
What'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
v5.0.0-pre.43
What'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
v5.0.0-pre.42
What's Changed
- Fix incorrect handling of UNTIL if falling into DST change and some related improvements in #738
- Fix: Minor NRT warnings with Recurrence in #743
- Fix: Benchmarks in #746
- Replace
DateTimewithCalDateTimeinRecurrencePatternEvaluatorand related code in #742 - Evaluation: Make
MaxIncrementCountconfigurable in #750 - Fix issue with
BYWEEKNO=1whereUNTILlies in the year prior to the year of the week of the last occurrence. in #752 - Remove
IServiceProviderin #753 - Update
PRODIDandVERSIONproperty handling in #748 - Enhance
RecurrencePatternSerializerin #758 - Evaluation: Avoid dependency on local culture settings. in #759
- Change
DateTimemethod args toCalDateTimein #761 - Enable NRT partially in #762, #763, #764, #765. Note: The current packages are created with
NRTdisabled, The v5 final release will be fully NRT compliant. - Fix positive/nagative args in
DurationCTOR in #767
Full Changelog: v5.0.0-pre.41...v5.0.0-pre.42