Skip to content

Releases: ical-org/ical.net

v5.2.0

23 Dec 23:25
c0b8ffa

Choose a tag to compare

Implemented BYDAY with offset and limiting behavior

The following RRULE cases are now implemented

  1. YEARLY + BYMONTH + numeric BYDAY offsets. Pattern: FREQ=YEARLY;BYMONTH=6,9;BYDAY=2MO
  2. YEARLY + numeric BYDAY without BYMONTH. Pattern: FREQ=YEARLY;BYDAY=20MO
  3. YEARLY + BYMONTH + negative numeric BYDAY. Pattern: FREQ=YEARLY;BYMONTH=6,9;BYDAY=-1SU

Changes in Detail

  • Implement BYDAY with 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

13 Dec 18:01
5e8b5bc

Choose a tag to compare

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,1

What'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

01 Dec 08:14
454247d

Choose a tag to compare

What's Changed

  • Fix: Correct handling RRULE:FREQ=YEARLY combined with BYMONTH and BYWEEKNO. The previous implementation could skip occurrences in some scenarios.
  • Fix: Correct handling RRULE:FREQ=YEARLY when BYMONTH ist missing, e.g. RRULE:FREQ=YEARLY;INTERVAL=2;BYDAY=MO,TU. Now takes the month of DTSTART as a limiter. The previous implementation could show occurrences for wrong months.

Full Changelog: v5.1.2...v5.1.3

v5.1.2

13 Nov 14:29
831d3f0

Choose a tag to compare

Changes

  • Chore: Mark classes and interfaces using EXRULE as obsolete. Reasoning: EXRULE is marked as deprecated in RFC 5545. Neither Google Calendar nor Microsoft Outlook/Exchange support it (#873)
  • Feat: CalDateTime.Add(Duration) for empty Durations. The methods gets called frequently during recurrence evaluation. Here it brings a performance improvement of about 10% (#877).
  • Fix: FREQ=WEEKLY rules that include BYMONTH were 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 VTimeZoneInfo in #874
  • Mark classes and interfaces using EXRULE as 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

06 Oct 08:57
355580a

Choose a tag to compare

What's Changed in release v5.1.1

  • Fix: CalendarEvents with RecurrenceId were not properly evaluated in some scenarios.
  • Feat: RecurringComponents like CalendarEvent support RECURRENCE-ID with optional RANGE parameter 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-ID overrides 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: RecurringComponent supports RECURRENCE-ID with optional RANGE parameter #870
  • Bump version 5.1.1 #872

Full Changelog: v5.1.0...v5.1.1

v5.1.0

16 Jul 07:47
97e3047

Choose a tag to compare

What's Changed

  • Chore:Make Publish workflow branch-agnostic in #817
  • Fix: Publish action 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 EXDATE when date-only while DTSTART is 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: CalDateTime CTOR 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 before periodStart by @minichma in #836
  • Fix GetOccurrences() not properly dealing with periodStart'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

17 Jun 15:04
03448ed

Choose a tag to compare

What's Changed

New Contributors

  • @NRG-Drink made their first contribution in #803, and welcome to the ical-org team.

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

21 May 20:53
c650fc5

Choose a tag to compare

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 MaxUnmatchedIncrementsLimit by @minichma in #775
  • RecurrencePatternEvaluator: Modernize some evaluation code. by @minichma in #783
  • Breaking: Evaluation: Remove periodEnd param from GetOccurrences et al by @minichma in #781. To limit the elements, it's recommended to used CollectionExtensions.TakeWhileBefore (see below), or simple TakeWhile.
  • Implement CollectionExtensions.TakeWhileBefore extensions in #796. This can e.g. be used on enumerations from GetOccurrences methods
  • Evaluation: Raise EvaluationOutOfRangeException if 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.None from enum FrequencyType
  • Breaking: Remove GroupedListEnumerator in #793 (Different solution made it redundant).
  • Enable CA1305 warnings and fix them in #794
  • Fix for serialization of property parameters: CalendarComponent.AddProperty adds the CalendarProperty in #801
  • Breaking: Feature: Serialize multiple categories and resources to one line by @NRG-Drink in #803 and #804

Thanks to new Contributors

Full Changelog: v5.0.0-pre.42...v5.0.0-pre.43

v5.0.0-pre.42

12 Apr 19:34
ccffea7

Choose a tag to compare

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 DateTime with CalDateTime in RecurrencePatternEvaluator and related code in #742
  • Evaluation: Make MaxIncrementCount configurable in #750
  • Fix issue with BYWEEKNO=1 where UNTIL lies in the year prior to the year of the week of the last occurrence. in #752
  • Remove IServiceProvider in #753
  • Update PRODID and VERSION property handling in #748
  • Enhance RecurrencePatternSerializer in #758
  • Evaluation: Avoid dependency on local culture settings. in #759
  • Change DateTime method args to CalDateTime in #761
  • Enable NRT partially in #762, #763, #764, #765. Note: The current packages are created with NRT disabled, The v5 final release will be fully NRT compliant.
  • Fix positive/nagative args in Duration CTOR in #767

Full Changelog: v5.0.0-pre.41...v5.0.0-pre.42

v5.0.0-pre.41

20 Feb 17:28
9725f2c

Choose a tag to compare

What's Changed

  • Make the time zone resolver plugable by @minichma in #732
  • Make CalendarEvent.EffectiveDuration and some conversion functions public. by @minichma in #733
  • Fix #729: incorrect expansion behaviour after BYWEEKNO by @minichma in #731

Full Changelog: v5.0.0-pre.40...v5.0.0-pre.41