$darkmode
Libical API Documentation 4.0 STABLE VERSION Visit the v3.0 documentation
/tmp/B.47ejeh9m/BUILD/libical-4.0.3-build/libical-4.0.3/docs/CHANGELOG.md
1 # Changelog
2 
3 All notable changes to this project will be documented in this file.
4 
5 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7 
8 ## [4.0.3] - 2026-06-14
9 
10 - Built-in timezones updated to tzdata2026b.
11 - Fixes line folding where a line fold could mix with a line ending.
12 
13 ## [4.0.2] - 2026-05-30
14 
15 - Fix a heap-buffer-overflow in `icalcomponent_merge_component()`.
16 - Remove "-Wl,-z,nodlopen" from gcc/clang compile options.
17 - icaltime: Prefer passed-in time's timezone in `icaltime_compare_date_only()`.
18 - icaltime: Check for month out-of-range in `icaltime_day_of_year()`.
19 
20 ## [4.0.1] - 2026-05-14
21 
22 - Increase the ICAL_LIMIT_RRULE_SEARCH limit from 100 to 500.
23 - Fix an unsafe exec() in the `vzic` tool when compiled with the CREATE_SYMLINK option.
24 
25 ## [4.0.0] - 2026-04-30
26 
27 This is a major release and is **not** source or binary compatible with version 3.x.
28 
29 Please see [Version 4 Migration Guide](MigrationGuide_to_4.md)
30 for details about API changes since libical 3.x.
31 
32 Included in this release is a **Technical Preview (TP)** of our new library libicalvcard
33 for handling VCARD formatted data. We encourage users to try-out this new library
34 and provide feedback to our issue tracker at <https://github.com/libical/libical/issues>.
35 Note that the libicalvcard API is not finalized and no source or binary compatibility
36 is guaranteed until sometime later in 4.x release cycle. Additionally, there are currently
37 no C++ bindings available for libicalvcard (volunteers wanted).
38 
39 Please **do not** use libicalvcard for production or other non-experimental purposes
40 until the Technical Preview phase is completed.
41 
42 ### Added
43 
44 - REUSE compliant licensing
45 - Supports multi-valued parameters (DELEGATED-FROM, DELEGATED-TO, MEMBER, DISPLAY, FEATURE, etc)
46 - Adds java bindings
47 - (TP) Brand new icalvcard library that follows the libical API.
48 - draft-ietf-calext-eventpub-extensions-19 (RFC 9073) support added
49 - draft-ietf-calext-valarm-extensions-07 (RFC 9074) support added
50 - Added support for Event Publishing (RFC 9073) and VALARM (RFC 9074) Extensions
51 - New CMake option "LIBICAL_ENABLE_64BIT_ICALTIME_T" to use 64-bit time_t implementations
52  on 32-bit systems (where available and supported. Windows-only so far)
53 - GEO property has arbitrary precision (values are internally stored as strings, not doubles)
54 - Allow previous recurrence iteration
55 - icalparser_ctrl setting defines how to handle invalid CONTROL characters during parsing
56 - Full support for `BYSETPOS`, i.e. remove the limitation to MONTHLY and YEARLY frequencies
57 - An API for setting/getting internal library limits (`icallimit_set` and `icallimit_get`)
58 
59 ### Changed
60 
61 - Built-in timezones updated to tzdata2026a to include historical data
62 - Requires MSVC 2013 or higher (when building on Windows with MSVC)
63 - Requires CMake v3.20.0 or higher
64 - For the C++ bindings, requires a C++11 compliant C++ compiler
65 - libical-glib requires glib 2.38 or higher
66 - libical-glib requires a C11 compliant C compiler
67 - Replace gtk-doc with gi-docgen to produce libical-glib developer documentation
68 - libical-glib API is considered stable; no longer need to define LIBICAL_GLIB_UNSTABLE_API=1
69  before including <libical-glib/libical-glib.h>
70 - By default, only shared libraries are built; to get static libraries one must invoke
71  separate build using the CMake `-DLIBICAL_STATIC=True` option.
72 - CMake option -DGOBJECT_INTROSPECTION=True by default.
73 - `icaltzutil_get_zone_directory()` can use the TZDIR environment to find system zoneinfo
74 - `icaltimezone_set_tzid_prefix()` now allows setting an empty tzid prefix.
75 - `icaldurationtype_from_int` and `icaldurationtype_as_int` have been renamed to
76  `icaldurationtype_from_seconds` and `icaldurationtype_as_seconds`, respectively.
77 - Components and properties with arbitrary iana-token names now are parsed with kind
78  ICAL_IANA_COMPONENT and ICAL_IANA_PROPERTY if the `ical_unknown_token_handling`
79  setting is ICAL_ASSUME_IANA_TOKEN. Otherwise, they are handled as error.
80 - Property and parameter names that start with "x-" (lowercase) now also
81  are parsed as X kind.
82 - The `icalproperty_remove_parameter_by_(kind|name)` functions now remove all matching parameters.
83  Before, they only removed the first matching parameter contrary to their documentation.
84 - `icalrecurrencetype_new_from_string()` is more strict against overflows and empty rule parts.
85  E.g. it now rejects RRULE parts like `BYDAY=255SU` (which used to be interpreted as `BYDAY=-1SU`).
86 
87 ### Deprecated
88 
89 - Several CMake options are renamed in favor of a "namespaced" equivalent.
90  Please port your buildscripts to the new CMake option names.
91  A complete list is provided in this "CMake options" section of the
92  [Version 4 Migration Guide](MigrationGuide_to_4.md)
93 
94 ### Removed
95 
96 - The old src/python code is removed in favor of the glib-introspection generated
97  Python bindings. Requires building with -DGOBJECT_INTROSPECTION=True
98 
99 ### Fixed
100 
101 - Fixed `icalcomponent_get_duration()` to account for DTEND/DUE TZID
102 - Improved performance of recurrence iterators
103 - Improved handling of BYWEEKNO when BYDAY is not present
104 - Fixed `icalcomponent_get_dtend()` and `icalcomponent_foreach_recurrence()`
105  to correctly handle nominal durations
106 - Fixed `icalcomponent_foreach_recurrence` to filter out duplicate
107  instances
108 
109 ## [3.0.21] - Unreleased
110 
111 - Fix some scenarios with RRULEs and EXRULE (#754)
112 
113 ## [3.0.20] - 2025-05-10
114 
115 - Clean up the byte-swapping macros
116 - Fix a testcase in libical-glib when using 64-bit on a 32-bit system
117 - Fix regression introduced in v3.0.19 ignoring non-empty REQUEST-STATUS extdata
118 - Fix regression introduced in v3.0.19 error reporting for END before BEGIN
119 - Fix a CMake problem in libical-glib
120 
121 ## [3.0.19] - 2024-12-23
122 
123 - Fix for changes to the libicu 75 API
124 - Add vcpkg manifest-mode support
125 - Improved berkeley-db discovery on Mac with homebrew
126 - Improved libicu discrovery on Mac with homebrew
127 - Properly set DYLD_LIBRARY_PATH on Mac for libical-ical tests
128 - Resolved known limitation: Negative values are now also supported for `BYMONTHDAY` and `BYYEARDAY`.
129 - Add support for RDATE;VALUE=PERIOD
130 - Fix time conversion to time_t for times before epoch
131 - Allow `icalcomponent_foreach_recurrence` to receive `DATE`-only `start` and `end` params.
132 - Fix the calculation of an event's duration if `DTSTART` is a `DATE`-only value.
133 - Fix `icaltime_span_new()` - ignore the case where DTEND is unset and require it to be
134  set by the caller instead.
135 - Various fixes for fuzzer issues
136 
137 ## [3.0.18] - 2024-03-24
138 
139 - Requires CMake v3.5.0 or higher
140 - Escape ^ (U+005E) character in parameter values according to RFC 6868
141 - New CMake option LIBICAL_BUILD_EXAMPLES to disable building the examples
142 - Should be able to use the project as a submodule
143 - Built-in timezones updated to tzdata2024a
144 
145 ## [3.0.17] - 2023-10-14
146 
147 - Improved Android support
148 - Escape commas in x-property TEXT values
149 - Built-in timezones updated to tzdata2023c
150 - icalparser_ctrl setting defines how to handle invalid CONTROL characters during parsing
151 - New publicly available functions:
152  - get_zone_directory
153  - icalparser_get_ctrl
154  - icalparser_set_ctrl
155 
156 ## [3.0.16] - 2022-10-17
157 
158 - Fix regressions in 3.0.15 due to improperly tested fuzz fixes
159 - Fix argument guards in icaltime_as_timet to match documentation and tests
160 
161 ## [3.0.15] - 2022-10-06
162 
163 - Add missing property parameters into libical-glib
164 - Fix CMake option USE_32BIT_TIME_T actually uses a 32-bit time_t value
165 - Fix icaltime_as_timet, which returned incorrect results for years >= 2100,
166  to work properly between years 1902 and 10k.
167 - Fix x-property comma handling and escaping
168 - Built-in timezones updated to tzdata2022d (now with a VTIMEZONE for each time zone alias)
169 - Fix a fuzzer issue
170 - Handle unreachable-code compile warnings with clang
171 - Ensure all vanew_foo() calls finish with (void*)0 (not 0)
172 
173 ## [3.0.14] - 2022-02-15
174 
175 - icalvalue: Reset non-UTC icaltimetype::zone on set
176 - Fix icalcomponent_set_due not removing TZID when necessary
177 
178 ## [3.0.13] - 2022-01-17
179 
180 - `icalcomponent_get_dtend()` returns `icaltime_null_time()` unless called on VEVENT, VAVAILABILITY
181  or VFREEBUSY
182 - `icalcomponent_get_duration()` for VTODO calculate with DUE instead of DTEND
183 - Replace CMake FindBDB with FindBerleyDB (<https://github.com/sum01/FindBerkeleyDB>)
184 - Fix finding ICU and BerkeleyDB on Mac (look for homebrew installs first)
185 
186 ## [3.0.12] - 2021-12-08
187 
188 - Fix a libicalval crash in cleanVObject
189 - METHOD:DECLINECOUNTER must have DTEND or DURATION
190 - Handle if DTEND and DURATION are both missing
191 - Improved FindICU (copied from official CMake. see files in cmake/Kitware)
192 - Buildsystem fixes (especially for the Ninja generator)
193 - Built-in timezones updated to tzdata2021e
194 
195 ## [3.0.11] - 2021-10-09
196 
197 - Fix `icalrecur_iterator_set_start()` for hourly, minutely, and secondly recurrences
198 - Fix build for Berkeley DB version greater than 5
199 - Fix vcal for some architectures (like aarch64, ppc64le and s390x)
200 - Fix memory leaks in vcal
201 - Prevent crash when looking for tzid in initialize_rscale
202 - Adjust libdir and includedir in generated pkgconfig files
203 - Built-in timezones updated to tzdata2021c
204 
205 ## [3.0.10] - 2021-04-17
206 
207 - Fix building -DSTATIC_ONLY=True with Ninja
208 - Fix generating wrong recurrence rules (#478)
209 - Fix a bug computing transitions in tzfiles
210 - Fix reading TZif files to use TZ string in the footer as the last (non-terminating) transitions
211 - Fix reading TZif files to use more RRULEs and/or RDATEs whevever possible
212 - Built-in timezones updated to tzdata2021a
213 
214 ## [3.0.9] - 2021-01-16
215 
216 - Add support for empty parameters, e.g. CN=""
217 - Accept VTIMEZONE with more than one X- property
218 - Several fixes for recurrences containing BYWEEKNO
219 - `icalrecurrencetype_from_string()` will reject any RRULE that contains a rule-part that
220  occurs more than once
221 - Improve thread safety
222 - Fix compiled-in path for the built-in timezone data
223 - Fix reading TZif files with empty v1 data (use v2+ whenever possible)
224 - Add backwards compatibility for previous TZIDs
225 - Built-in timezones updated to tzdata2020d
226 - `icalrecurrencetype_from_string()` will reject any RRULE that contains a rule-part that
227  occurs more than once
228 - Fix build with newer libicu
229 - Fix cross-compile support in libical-glib
230 
231 ## [3.0.8] - 2020-03-07
232 
233 - Fix for `icalattach_new_from_data()` and the 'free_fn' argument
234 - Fix if recurrencetype contains both COUNT and UNTIL (only output UNTIL in the RRULE)
235 
236 ## [3.0.7] - 2019-12-15
237 
238 - libical-glib: Fix ICalAttach handling of the icalattach native structure
239 - Let `icalattach_new_from_data()` use the 'free_fn' argument again
240 - Fix memory leaks in attachment handling and elsewhere
241 - Fix a multithreading race condition
242 - More fuzzification fixes
243 
244 ## [3.0.6] - 2019-09-14
245 
246 - Handle both COUNT and UNTIL in RRULEs
247 - Fix RRULE BYDAY with INTERVAL=2 conflict
248 - Various fuzzification fixes
249 - New publicly available function:
250  - icaltimezone_truncate_vtimezone
251 - Add option to disable building the test suite
252 - Built-in timezones updated to tzdata2019c
253 
254 ## [3.0.5] - 2019-05-14
255 
256 - New publicly available function:
257  - icalproperty_get_datetime_with_component
258 - Allow reset DATE/DATE-TIME VALUE parameter for all-day events
259 - `icalproperty_get_datetime_with_component()` will use location as TZID fallback.
260 - New CMake option ENABLE_GTK_DOC for disabling the libical-glib developer documentation
261 - GObject Introspection - use $MAJOR-0 versioning
262 - libical-glib API is considered unstable, define LIBICAL_GLIB_UNSTABLE_API=1 before
263  including <libical-glib/libical-glib.h> to be able to use it.
264 - Built-in timezones updated to tzdata2019a
265 - De-fuzzifications and Coverity fixes
266 
267 ## [3.0.4] - 2018-08-14
268 
269 - Silently fail RSCALE recurrence clauses when RSCALE is disabled
270 - Fixed `icalcomponent_set_comment()` and `icalcomponent_set_uid()`
271 - fix FREQ=MONTHLY;BYMONTH
272 - Skip UTF-8 marker when parsing
273 - Fix parsing "<CR>?<LF>" in VCF files produced by Outlook
274 - Fix TZID on DATE-TIME value can override time specified in UTC
275 - CMake discovery module for ICU uses pkg-config now
276 - New publicly available function:
277  - icalparameter_kind_is_valid
278 - Built-in timezones updated to tzdata2018e
279 
280 ## [3.0.3] - 2018-02-27
281 
282 - VTODO COMPLETED property can be a DATE-TIME or DATE (for backward compatibility)
283 - Improved recurrence iteration
284 
285 ## [3.0.2] - 2018-02-17
286 
287 - No longer attempt to detect the need for -DUSE_32BIT_TIME_T with MSVC
288 - New CMake option ICAL_BUILD_DOCS which can be used to disable the docs target
289 - Fix threading hang in BSD type systems (OpenBSD, MacOS,...)
290 - Build with Ninja improvements
291 
292 ## [3.0.1] - 2017-11-18
293 
294 - Built-in timezones updated to tzdata2017c
295 - Fix a multi-threaded deadlock in `icaltimezone_load_builtin_timezone()`
296 - Fix a CMake problem with parallel builds
297 
298 ## [3.0.0] - 2017-10-28
299 
300 - Relicense from MPL 1.0 to MPL 2.0 (keep dual license for LGPL v2.1)
301 - Requires CMake v3.1.0 or higher along with various CMake and buildsystem fixes
302 - Added a 'make uninstall'
303 - Fixed use-after-free issues and some memory leaks
304 - Built-in timezones updated to tzdata2017b
305 - More accurate VTIMEZONE generation when using the system time zone data (when USE_BUILTIN_TZDATA=False)
306 - `icalvalue_as_ical_string()` returns "TRUE" (non-zero) or "FALSE" (zero) values only.
307 - New icalvalue.h convenience macros: ICAL_BOOLEAN_TRUE and ICAL_BOOLEAN_FALSE
308 - Better value type checking of property values when parsing
309 - icalvalue_new/set_date and icalvalue_new/set_datetime now enforce DATE and DATE-TIME values respectively
310 - draft-ietf-calext-extensions (RFC 7986) support added
311 - Parameter values are now en/decoded per RFC 6868
312 - Removed is_utc from icaltimetype struct
313  - Set icaltimetype.zone to `icaltimezone_get_utc_timezone()` to change a time to UTC
314  - Use `icaltime_is_utc()` to check if a time is in UTC
315 - Added support for VPATCH component
316 - New publicly available functions:
317  - icalproperty_set_parent (icalproperty_get_parent was already public)
318  - icalvalue_get_parent (icalvalue_set_parent was already public)
319  - icalparameter_set_parent
320  - icalparameter_get_parent
321  - icalvalue_new_datetimedate (DATE or DATE-TIME)
322  - icalvalue_set_datetimedate
323  - icalvalue_get_datetimedate
324  - icalrecur_iterator_set_start
325  - icalcomponent_normalize
326  - icalproperty_normalize
327 - Removed deprecated functions:
328  - icaltime_from_timet (use icaltime_from_timet_with_zone)
329  - icaltime_start_day_of_week (use icaltime_start_day_week)
330  - icalproperty_remove_parameter (use icalproperty_remove_parameter_by_kind)
331  - icalproperty_string_to_enum (use icalproperty_kind_and_string_to_enum)
332 - Signature changed for functions:
333  - Parse_MIME_FromFileName
334  - icalgauge *icalgauge_new_from_sql
335  - const char *icallangbind_property_eval_string
336  - const char *icallangbind_property_eval_string_r
337  - void set_zone_directory
338  - icalcalendar *icalcalendar_new
339  - int icalrecur_expand_recurrence
340 
341 ## [2.0.0] - 2015-12-28
342 
343 - WARNING: Version 2 IS NOT Binary Compatible with Older Versions
344 - Version 2 is Source Compatible with Older Versions
345 - Lots of source code scrubbing
346 - [New] RSCALE support (requires libicu from <https://icu.unicode.org>)
347 - [New] CalDAV attachment support (draft-ietf-calext-caldav-attachments)
348 - [New] Resurrect the Berkeley DB storage support
349 - [Bug] issue83: Incorrect recurrence generation for weekly pattern
350 - Handle RRULEs better
351 - Handle threading better
352 
353 ## [1.0.1] - 2014-10-11
354 
355 - [Bug] issue74: Do not escape double quote character
356 - [Bug] issue80,issue92: fix crashes using `icaltimezone_load_builtin_timezone()` recursively
357 - [Bug] Fix `icalcomponent_foreach_recurrence()` and large durations between recurrences (e.g. FREQ=YEARLY)
358 - [Bug] Properly handle UTCOFFSETs of the form +/-00mmss
359 - [Bug] Properly skip bogus dates (e.g. 2/30, 4/31) in RRULE:FREQ=MONTHLY
360 - [Bug] Properly handle RRULE:FREQ=MONTHLY;BYDAY;BYMONTHDAY when DTSTART isn't on BYDAY
361 - [Bug] Fix RRULE:FREQ=YEARLY;BYDAY;BYWEEKNO - MUST use ISO weeks
362 <!-- markdownlint-disable MD052 -->
363 - [Bug] Properly skip bogus dates (e.g. 2/29) in RRULE:FREQ=YEARLY[;BYMONTH][;BYMONTHDAY]
364 
365 - [New] Update tzdata to version 2014g
366 - [New] Support added for schedule params: agent, status, force-send
367 - [New] Added a UID to the VFREEBUSY component
368 - [New] Allow dates > 2038 if sizeof(time_t) > 4
369 - [New] Add properties from draft-ietf-tzdist-service
370 - [New] Add support for RRULE:FREQ=YEARLY;BYDAY;BYYEARDAY
371 - [New] Fixed RRULE:FREQ=YEARLY;BYYEARDAY for negative days
372 
373 - [Build] Autotools build system is removed
374 - [Build] CMake version 2.8.9 (or higher) is required (was CMake version 2.4.0)
375 - [Build] Add new -DSHARED_ONLY and -DSTATIC_ONLY CMake options
376 - [Build] Remove -DSTATIC_LIBRARY CMake option
377 - [Build] MSYS2 builds (fixed instructions)
378 - [Build/Doc] Now can build api documentation with make docs
379 
380 - [Quality] More regression tests added, in particular for recurrence
381 - [Quality] Almost all compile warnings silenced
382 - [Quality] A bunch of Coverity Scan warnings silenced
383 
384 ## [1.0.0] - 2014-06-28
385 
386 - Reborn