JSCalendar: Converting from and to iCalendar
draft-ietf-calext-jscalendar-icalendar-10
The information below is for an old version of the document.
| Document | Type |
This is an older version of an Internet-Draft whose latest revision state is "Active".
|
|
|---|---|---|---|
| Author | Robert Stepanek | ||
| Last updated | 2025-02-26 (Latest revision 2024-11-12) | ||
| RFC stream | Internet Engineering Task Force (IETF) | ||
| Formats | |||
| Additional resources | Mailing list discussion | ||
| Stream | WG state | WG Document | |
| Associated WG milestone |
|
||
| Document shepherd | (None) | ||
| IESG | IESG state | I-D Exists | |
| Consensus boilerplate | Unknown | ||
| Telechat date | (None) | ||
| Responsible AD | (None) | ||
| Send notices to | (None) |
draft-ietf-calext-jscalendar-icalendar-10
Calendaring extensions R. Stepanek
Internet-Draft Fastmail
Intended status: Informational 26 February 2025
Expires: 30 August 2025
JSCalendar: Converting from and to iCalendar
draft-ietf-calext-jscalendar-icalendar-10
Abstract
This document defines how to convert calendaring information between
the JSCalendar and iCalendar data formats. It considers every
JSCalendar and iCalendar element registered at IANA at the time of
publication. It defines conversion rules for all elements that are
common to both formats, as well as how convert arbitrary or unknown
JSCalendar and iCalendar elements.
Note
This note is to be removed before publishing as an RFC.
This document is unfinished. The term TBD stands for any unknown
item.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 30 August 2025.
Copyright Notice
Copyright (c) 2025 IETF Trust and the persons identified as the
document authors. All rights reserved.
Stepanek Expires 30 August 2025 [Page 1]
Internet-Draft JSCalendar February 2025
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1. Notational Conventions . . . . . . . . . . . . . . . . . 4
1.2. Scope and Goals . . . . . . . . . . . . . . . . . . . . . 5
1.3. How to Read the Examples . . . . . . . . . . . . . . . . 5
1.3.1. iCalendar Examples . . . . . . . . . . . . . . . . . 5
1.3.2. JSCalendar Examples . . . . . . . . . . . . . . . . . 7
2. Converting iCalendar to JSCalendar . . . . . . . . . . . . . 8
2.1. General rules . . . . . . . . . . . . . . . . . . . . . . 8
2.1.1. iCalendar Objects . . . . . . . . . . . . . . . . . . 8
2.1.2. Recurring Components . . . . . . . . . . . . . . . . 11
2.1.3. JSCalendar Ids . . . . . . . . . . . . . . . . . . . 14
2.1.4. Timezone identifiers . . . . . . . . . . . . . . . . 14
2.1.5. DATE and DATE-TIME . . . . . . . . . . . . . . . . . 15
2.2. Components . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.1. PARTICIPANT . . . . . . . . . . . . . . . . . . . . . 15
2.2.2. VALARM . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.3. VEVENT . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.4. VLOCATION . . . . . . . . . . . . . . . . . . . . . . 24
2.2.5. VRESOURCE . . . . . . . . . . . . . . . . . . . . . . 25
2.2.6. VTIMEZONE . . . . . . . . . . . . . . . . . . . . . . 27
2.2.7. VTODO . . . . . . . . . . . . . . . . . . . . . . . . 31
2.3. Properties . . . . . . . . . . . . . . . . . . . . . . . 35
2.3.1. ACKNOWLEDGED . . . . . . . . . . . . . . . . . . . . 35
2.3.2. ACTION . . . . . . . . . . . . . . . . . . . . . . . 36
2.3.3. ATTACH . . . . . . . . . . . . . . . . . . . . . . . 37
2.3.4. ATTENDEE . . . . . . . . . . . . . . . . . . . . . . 38
2.3.5. CALENDAR-ADDRESS . . . . . . . . . . . . . . . . . . 42
2.3.6. CATEGORIES . . . . . . . . . . . . . . . . . . . . . 43
2.3.7. CLASS . . . . . . . . . . . . . . . . . . . . . . . . 43
2.3.8. COLOR . . . . . . . . . . . . . . . . . . . . . . . . 44
2.3.9. COMMENT . . . . . . . . . . . . . . . . . . . . . . . 44
2.3.10. COMPLETED . . . . . . . . . . . . . . . . . . . . . . 46
2.3.11. CONCEPT . . . . . . . . . . . . . . . . . . . . . . . 46
2.3.12. CONFERENCE . . . . . . . . . . . . . . . . . . . . . 47
2.3.13. CREATED . . . . . . . . . . . . . . . . . . . . . . . 48
2.3.14. DESCRIPTION . . . . . . . . . . . . . . . . . . . . . 48
2.3.15. DTEND . . . . . . . . . . . . . . . . . . . . . . . . 48
Stepanek Expires 30 August 2025 [Page 2]
Internet-Draft JSCalendar February 2025
2.3.16. DTSTAMP . . . . . . . . . . . . . . . . . . . . . . . 50
2.3.17. DTSTART . . . . . . . . . . . . . . . . . . . . . . . 51
2.3.18. DUE . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.3.19. DURATION . . . . . . . . . . . . . . . . . . . . . . 54
2.3.20. ESTIMATED-DURATION . . . . . . . . . . . . . . . . . 54
2.3.21. EXDATE . . . . . . . . . . . . . . . . . . . . . . . 55
2.3.22. EXRULE . . . . . . . . . . . . . . . . . . . . . . . 55
2.3.23. GEO . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.3.24. IMAGE . . . . . . . . . . . . . . . . . . . . . . . . 57
2.3.25. LAST-MODIFIED . . . . . . . . . . . . . . . . . . . . 58
2.3.26. LINK . . . . . . . . . . . . . . . . . . . . . . . . 58
2.3.27. LOCATION . . . . . . . . . . . . . . . . . . . . . . 59
2.3.28. LOCATION-TYPE . . . . . . . . . . . . . . . . . . . . 60
2.3.29. METHOD . . . . . . . . . . . . . . . . . . . . . . . 61
2.3.30. NAME . . . . . . . . . . . . . . . . . . . . . . . . 61
2.3.31. ORGANIZER . . . . . . . . . . . . . . . . . . . . . . 63
2.3.32. PARTICIPANT-TYPE . . . . . . . . . . . . . . . . . . 65
2.3.33. PERCENT-COMPLETE . . . . . . . . . . . . . . . . . . 66
2.3.34. PRIORITY . . . . . . . . . . . . . . . . . . . . . . 67
2.3.35. PRODID . . . . . . . . . . . . . . . . . . . . . . . 68
2.3.36. RDATE . . . . . . . . . . . . . . . . . . . . . . . . 68
2.3.37. RECURRENCE-ID . . . . . . . . . . . . . . . . . . . . 69
2.3.38. RELATED-TO . . . . . . . . . . . . . . . . . . . . . 69
2.3.39. REQUEST-STATUS . . . . . . . . . . . . . . . . . . . 72
2.3.40. RRULE . . . . . . . . . . . . . . . . . . . . . . . . 72
2.3.41. SEQUENCE . . . . . . . . . . . . . . . . . . . . . . 74
2.3.42. STATUS . . . . . . . . . . . . . . . . . . . . . . . 75
2.3.43. SOURCE . . . . . . . . . . . . . . . . . . . . . . . 75
2.3.44. STRUCTURED-DATA . . . . . . . . . . . . . . . . . . . 76
2.3.45. STYLED-DESCRIPTION . . . . . . . . . . . . . . . . . 77
2.3.46. SUMMARY . . . . . . . . . . . . . . . . . . . . . . . 78
2.3.47. TRANSP . . . . . . . . . . . . . . . . . . . . . . . 78
2.3.48. TRIGGER . . . . . . . . . . . . . . . . . . . . . . . 79
2.3.49. TZID . . . . . . . . . . . . . . . . . . . . . . . . 80
2.3.50. TZID-ALIAS-OF . . . . . . . . . . . . . . . . . . . . 81
2.3.51. TZNAME . . . . . . . . . . . . . . . . . . . . . . . 81
2.3.52. TZOFFSETFROM . . . . . . . . . . . . . . . . . . . . 81
2.3.53. TZOFFSETTO . . . . . . . . . . . . . . . . . . . . . 81
2.3.54. TZUNTIL . . . . . . . . . . . . . . . . . . . . . . . 81
2.3.55. TZURL . . . . . . . . . . . . . . . . . . . . . . . . 81
2.3.56. UID . . . . . . . . . . . . . . . . . . . . . . . . . 82
2.3.57. URL . . . . . . . . . . . . . . . . . . . . . . . . . 82
3. Converting JSCalendar to iCalendar . . . . . . . . . . . . . 83
3.1. Alert . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.2. Event and Task . . . . . . . . . . . . . . . . . . . . . 83
3.3. Group . . . . . . . . . . . . . . . . . . . . . . . . . . 88
3.4. Link . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.5. Location . . . . . . . . . . . . . . . . . . . . . . . . 91
Stepanek Expires 30 August 2025 [Page 3]
Internet-Draft JSCalendar February 2025
3.6. Participant . . . . . . . . . . . . . . . . . . . . . . . 93
3.7. TimeZone . . . . . . . . . . . . . . . . . . . . . . . . 97
3.8. VirtualLocation . . . . . . . . . . . . . . . . . . . . . 98
4. Updates to iCalendar . . . . . . . . . . . . . . . . . . . . 99
4.1. New Parameters . . . . . . . . . . . . . . . . . . . . . 99
4.1.1. JSCALID . . . . . . . . . . . . . . . . . . . . . . . 99
4.2. New Properties . . . . . . . . . . . . . . . . . . . . . 99
4.2.1. JSCALID . . . . . . . . . . . . . . . . . . . . . . . 99
4.2.2. JSPROP . . . . . . . . . . . . . . . . . . . . . . . 99
5. Updates to JSCalendar . . . . . . . . . . . . . . . . . . . . 99
5.1. New Properties . . . . . . . . . . . . . . . . . . . . . 99
5.1.1. completed . . . . . . . . . . . . . . . . . . . . . . 99
5.1.2. iCalComponent . . . . . . . . . . . . . . . . . . . . 100
5.1.3. iCalProperty . . . . . . . . . . . . . . . . . . . . 102
5.1.4. locations (Participant) . . . . . . . . . . . . . . . 104
5.1.5. scheduleAgent (Event, Task) . . . . . . . . . . . . . 104
5.1.6. scheduleForceSend (Event, Task) . . . . . . . . . . . 104
5.1.7. scheduleStatus (Event, Task) . . . . . . . . . . . . 105
5.2. Updated Properties . . . . . . . . . . . . . . . . . . . 106
5.2.1. rel (Link) . . . . . . . . . . . . . . . . . . . . . 106
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 106
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 106
7.1. Normative References . . . . . . . . . . . . . . . . . . 106
7.2. Informative References . . . . . . . . . . . . . . . . . 108
Appendix A. Discrepancies between iCalendar and JSCalendar . . . 109
A.1. Unsupported iCalendar Elements . . . . . . . . . . . . . 109
A.1.1. Components . . . . . . . . . . . . . . . . . . . . . 109
A.1.2. Properties by Component . . . . . . . . . . . . . . . 109
A.1.3. Properties by Value Type . . . . . . . . . . . . . . 111
A.1.4. Parameters by Property . . . . . . . . . . . . . . . 111
A.2. Unsupported JSCalendar Elements . . . . . . . . . . . . . 114
A.2.1. Common Properties . . . . . . . . . . . . . . . . . . 114
A.2.2. Participant Properties . . . . . . . . . . . . . . . 114
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 114
1. Introduction
1.1. Notational Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
The ABNF definitions in this document use the notations of [RFC5234].
ABNF rules not defined in this document either are defined in
[RFC5234] or [RFC5545].
Stepanek Expires 30 August 2025 [Page 4]
Internet-Draft JSCalendar February 2025
1.2. Scope and Goals
This document outlines how to convert calendaring information between
the iCalendar and JSCalendar data formats. It describes which
elements are common to both, but also highlights where the two
formats differ. For each common element, it defines a conversion
rule and includes an example of how to convert that element. All
iCalendar and JSCalendar elements currently registered at IANA are in
scope, but not all of these elements are common to both formats.
For elements that have no counterpart in the other format, it is the
goal of this document to define how to preserve them during
conversion, but in general it is not the goal to achieve this by
defining new standard elements. Instead, this document defines
special-purpose properties to preserve arbitrary elements. These
conversion-specific properties are defined in Section 4.2.2 for
iCalendar, and Sections 5.1.2 and 5.1.3 for JSCalendar. Appendix A
further outlines the discrepancies between the two formats.
1.3. How to Read the Examples
Later sections contain examples that illustrate how to convert
between the iCalendar and JSCalendar data formats. The notation of
these examples is such that their main points should be clear to the
reader, but their contents can also be parsed for automated testing.
The following sections define the notation for such examples.
1.3.1. iCalendar Examples
An iCalendar example contains either an extract or a complete
representation of iCalendar data. It always represents an iCalendar
object, even if the example only depicts non-VCALENDAR components or
properties. The following rules apply:
* An example that only contains iCalendar properties implicitly
represents a VEVENT component that is part of a VCALENDAR
component.
* An example that only contains one or more non-VCALENDAR components
implicitly represents a VCALENDAR component that contains them.
* An example that only contains a VCALENDAR component but no
contained components implicitly represents a VCALENDAR component
that contains a VEVENT component.
* Implicit components (those without a BEGIN and END, or omitted
completely) are assumed to contain all mandatory properties with
some value, but the actual value is irrelevant for the example.
Stepanek Expires 30 August 2025 [Page 5]
Internet-Draft JSCalendar February 2025
Figure 1 contains three examples, all of which represent the same
iCalendar data. In the first example, both the VEVENT component and
VCALENDAR component are implicit. In the second example, only the
VCALENDAR component and its mandatory properties are implicit. The
third example depicts a complete VCALENDAR component, nothing is
implicit.
SUMMARY:hello
BEGIN:VEVENT
DTSTAMP:20060102T030405Z
DTSTART:20060102T030405Z
SUMMARY:hello
UID:CC0A494A-6E07-4827-8294-0752DD1ECFA4
END:VEVENT
BEGIN:VCALENDAR
PRODID:-//FOO//bar//EN
VERSION:2.0
BEGIN:VEVENT
DTSTAMP:20060102T030405Z
DTSTART:20060102T030405Z
SUMMARY:hello
UID:CC0A494A-6E07-4827-8294-0752DD1ECFA4
END:VEVENT
END:VCALENDAR
Figure 1: Examples for implicit and explicit iCalendar component
notation
A line containing just the value ... stands for any other properties
that might be present in a component but are irrelevant for this
example. This includes mandatory properties as described for
implicit components. The line ... at the end of the example
additionally stands for any END content lines to complete components
that started with BEGIN content lines, and any of their missing
mandatory properties. Figure 2 illustrates this as an alternative
representation for the examples of Figure 1.
BEGIN:VCALENDAR
BEGIN:VEVENT
SUMMARY:hello
...
Figure 2: Example for additional properties and component ENDs
represented by ...
A line starting with a single space represents the continuation of a
folded content line (Section 3.1 of [RFC5545]). Figure 3 illustrates
this.
Stepanek Expires 30 August 2025 [Page 6]
Internet-Draft JSCalendar February 2025
SUMMARY:he
llo
Figure 3: Example for a folded content line
1.3.2. JSCalendar Examples
A JSCalendar example always represents a Group object, even if the
example only depicts one of the Group entries or properties.
JSCalendar objects are depicted either explicitly or implicitly. An
explicit JSCalendar object starts and ends with braces. An implicit
JSCalendar object omits braces, it only consists of JSON name/value
pairs, separated by comma.
An implicit JSCalendar object is assumed to be of type Event, unless
it contains the @type property with a different value. It is assumed
to contain all mandatory properties with some value; if they are not
depicted, their actual value is irrelevant for the main point of the
example.
Figure 4 illustrates this with multiple examples, all of which
represent the same JSCalendar data. The first example contains an
implicit JSCalendar object of type Event. The second example
contains an implicit JSCalendar object with a @type property. The
third example contains an explicit Event object but the Group object
containing it is omitted. The fourth example contains the full Group
object, nothing is omitted.
"title": "hello"
"@type": "Event",
"title": "hello"
{
"@type": "Event",
"title": "hello",
"start": "2006-01-02T03:04:05",
"timeZone": "Etc/UTC",
"uid": "CC0A494A-6E07-4827-8294-0752DD1ECFA4",
"updated": "2006-01-02T03:04:05Z"
}
Stepanek Expires 30 August 2025 [Page 7]
Internet-Draft JSCalendar February 2025
{
"@type": "Group",
"entries": [
{
"@type": "Event",
"title": "hello",
"start": "2006-01-02T03:04:05",
"timeZone": "Etc/UTC",
"uid": "CC0A494A-6E07-4827-8294-0752DD1ECFA4",
"updated": "2006-01-02T03:04:05Z"
}
]
}
Figure 4: Examples for implicit and explicit JSCalendar object
notation
A property with name "..." and value "" stands for additional
properties that might be present in a JSCalendar object, but which
are irrelevant for this example. This includes mandatory properties.
Figure 5 illustrates this as an alternative representation for the
examples of Figure 4.
{
"@type": "Event",
"title": "hello",
"...": ""
}
Figure 5: Example for additional properties represented by ...
2. Converting iCalendar to JSCalendar
2.1. General rules
2.1.1. iCalendar Objects
Section 3.4 of [RFC5545] allows for an iCalendar stream to contain
one or more iCalendar objects. In contrast, this specification only
defines conversion for streams consisting of a single iCalendar
object. Converting streams of multiple iCalendar objects is
implementation-specific. All following sections of this document use
the terms "iCalendar object" and "VCALENDAR component"
interchangeably.
The VCALENDAR component [RFC5545] (Section 3.4) converts to a Group
object [RFC8984] (Section 2.3).
Stepanek Expires 30 August 2025 [Page 8]
Internet-Draft JSCalendar February 2025
Its properties convert as follows:
+===============+============+==================+=========+======+
| Name | Reference | Group property | See | Note |
+===============+============+==================+=========+======+
| CATEGORIES | [RFC5545], | keywords | Section | |
| | Section | | 2.3.6 | |
| | 3.8.1.2 | | | |
+---------------+------------+------------------+---------+------+
| COLOR | [RFC7986], | color | Section | |
| | Section | | 2.3.8 | |
| | 5.9 | | | |
+---------------+------------+------------------+---------+------+
| CONCEPT | [RFC9253], | categories | Section | |
| | Section | | 2.3.11 | |
| | 8.1 | | | |
+---------------+------------+------------------+---------+------+
| CREATED | [RFC5545], | created | Section | |
| | Section | | 2.3.13 | |
| | 3.8.7.1 | | | |
+---------------+------------+------------------+---------+------+
| DESCRIPTION | [RFC5545], | description | Section | |
| | Section | | 2.3.14 | |
| | 3.8.1.5 | | | |
+---------------+------------+------------------+---------+------+
| LAST-MODIFIED | [RFC5545], | updated | Section | |
| | Section | | 2.3.25 | |
| | 3.8.7.3 | | | |
+---------------+------------+------------------+---------+------+
| LINK | [RFC9253], | links | Section | |
| | Section | | 2.3.26 | |
| | 8.2 | | | |
+---------------+------------+------------------+---------+------+
| METHOD | [RFC5545], | entries/*/method | Section | |
| | Section | | 2.3.29 | |
| | 3.7.2 | | | |
+---------------+------------+------------------+---------+------+
| NAME | [RFC7986], | title | Section | |
| | Section | | 2.3.30 | |
| | 5.1 | | | |
+---------------+------------+------------------+---------+------+
| PRODID | [RFC5545], | prodId, | Section | |
| | Section | entries/*/prodId | 2.3.35 | |
| | 3.7.3 | | | |
+---------------+------------+------------------+---------+------+
| SOURCE | [RFC7986], | source | Section | |
| | Section | | 2.3.43 | |
| | 5.8 | | | |
Stepanek Expires 30 August 2025 [Page 9]
Internet-Draft JSCalendar February 2025
+---------------+------------+------------------+---------+------+
| UID | [RFC5545], | uid | Section | |
| | Section | | 2.3.56 | |
| | 3.8.4.7 | | | |
+---------------+------------+------------------+---------+------+
| URL | [RFC5545], | links | Section | |
| | Section | | 2.3.57 | |
| | 3.8.4.6 | | | |
+---------------+------------+------------------+---------+------+
Table 1: Properties of the VCALENDAR component
Its components convert as follows:
+===========+===============+================+=========+======+
| Name | Reference | Group property | See | Note |
+===========+===============+================+=========+======+
| VEVENT | [RFC5545], | entries | Section | |
| | Section 3.6.1 | | 2.2.3 | |
+-----------+---------------+----------------+---------+------+
| VTIMEZONE | [RFC5545], | timeZones | Section | |
| | Section 3.6.5 | | 2.2.6 | |
+-----------+---------------+----------------+---------+------+
| VTODO | [RFC5545], | entries | Section | |
| | Section 3.6.2 | | 2.2.7 | |
+-----------+---------------+----------------+---------+------+
Table 2: Components of the VCALENDAR component
Other properties or components MAY be converted to the
"iCalComponent" property (Section 5.1.2) of the Group object.
The order of elements in the "entries" property is implementation-
specific, e.g. entries need not be in the same order as their source
components in the iCalendar object.
The following example illustrates how to convert the VCALENDAR
component:
BEGIN:VCALENDAR
UID:41aa02b6-42d0-4f45-8cb4-8b5075be2e14
BEGIN:VEVENT
...
Stepanek Expires 30 August 2025 [Page 10]
Internet-Draft JSCalendar February 2025
{
"...": "",
"@type": "Group",
"entries": [
{
"...": "",
"@type": "Event"
}
],
"uid": "41aa02b6-42d0-4f45-8cb4-8b5075be2e14"
}
Figure 6: Converting the VCALENDAR component
2.1.2. Recurring Components
Components in an iCalendar object generally convert to distinct
JSCalendar objects. For example, two VEVENT components with
different UID property values in the same iCalendar object convert to
two separate Event objects in the Group object's entries. As an
exception to this rule, this does not apply to recurrence overrides,
defined as follows.
A VEVENT (or VTODO) component is a recurrence override if it has the
RECURRENCE-ID property set, and the iCalendar object contains a
VEVENT (or VTODO) component that does not have the RECURRENCE-ID but
the RRULE property set, and the UID property values of the two
components are equal. The component without the RECURRENCE-ID
property is in that case referred to as the "main component".
The main component converts to an entry in the Group object's entries
property.
The recurrence override converts to the "recurrenceOverrides"
property of the converted main component. Its RECURRENCE-ID property
value converts to the key in the "recurrenceOverrides" property. The
value of the "recurrenceOverrides" property at that key is a
PatchObject that transform the converted main component into the
converted recurrence override. The recurrenceId and
recurrenceIdTimeZone properties MUST NOT be set in the PatchObject.
The following example illustrates how to convert a main component and
its recurrence override:
Stepanek Expires 30 August 2025 [Page 11]
Internet-Draft JSCalendar February 2025
BEGIN:VCALENDAR
BEGIN:VEVENT
UID:F4257E1D-5461-4EF6-840F-9DFC653EB559
RRULE:FREQ=DAILY
DTSTART;TZID=Europe/Berlin:20240101T140000
...
END:VEVENT
BEGIN:VEVENT
UID:F4257E1D-5461-4EF6-840F-9DFC653EB559
RECURRENCE-ID;TZID=Europe/Berlin:20240202T140000
DTSTART;TZID=Europe/Berlin:20240202T160000
...
END:VEVENT
END:VCALENDAR
{
"...": "",
"@type": "Group",
"entries": [
{
"...": "",
"@type": "Event",
"recurrenceOverrides": {
"2024-02-02T14:00:00": {
"start": "2024-02-02T16:00:00"
}
},
"recurrenceRules": [
{
"@type": "RecurrenceRule",
"frequency": "daily"
}
],
"start": "2024-01-01T14:00:00",
"timeZone": "Europe/Berlin",
"uid": "F4257E1D-5461-4EF6-840F-9DFC653EB559"
}
]
}
Figure 7: Converting VEVENT recurrence overrides
A VEVENT (or VTODO) component is a stand-alone recurrence instance if
it has the RECURRENCE-ID property set and the iCalendar object does
not contain its related main component. Each stand-alone recurrence
instance converts to a distinct Event (or Task) object in the Group
object's entries property. The recurrenceId property MUST be set,
the "recurrenceIdTimeZone" property MUST be set if not "null".
Stepanek Expires 30 August 2025 [Page 12]
Internet-Draft JSCalendar February 2025
The following example illustrates how to convert stand-alone
recurrence instances:
BEGIN:VCALENDAR
BEGIN:VEVENT
UID:F4257E1D-5461-4EF6-840F-9DFC653EB559
RECURRENCE-ID;TZID=Europe/Berlin:20240202T140000
DTSTART;TZID=Europe/Berlin:20240202T160000
...
END:VEVENT
BEGIN:VEVENT
UID:F4257E1D-5461-4EF6-840F-9DFC653EB559
RECURRENCE-ID;TZID=Europe/Berlin:20240103T140000
DTSTART;TZID=Europe/Berlin:20240103T170000
...
END:VEVENT
END:VCALENDAR
{
"...": "",
"@type": "Group",
"entries": [
{
"...": "",
"@type": "Event",
"recurrenceId": "2024-02-02T14:00:00",
"recurrenceIdTimeZone": "Europe/Berlin",
"start": "2024-02-02T16:00:00",
"timeZone": "Europe/Berlin",
"uid": "F4257E1D-5461-4EF6-840F-9DFC653EB559"
},
{
"...": "",
"@type": "Event",
"recurrenceId": "2024-01-03T14:00:00",
"recurrenceIdTimeZone": "Europe/Berlin",
"start": "2024-01-03T17:00:00",
"timeZone": "Europe/Berlin",
"uid": "F4257E1D-5461-4EF6-840F-9DFC653EB559"
}
]
}
Figure 8: Converting VEVENT recurrence instances
Stepanek Expires 30 August 2025 [Page 13]
Internet-Draft JSCalendar February 2025
2.1.3. JSCalendar Ids
JSCalendar generally uses JSON objects to represent a collection of
same-typed values. The keys are of type Id [RFC8984]
(Section 1.4.1), the values are JSCalendar object types. If an
iCalendar element converts to a value in such a collection, then an
implementation needs to choose an identifier as key.
This document defines the new JSCALID (Section 4.1.1) parameter and
JSCALID property (Section 4.2.1), which allow to set a JSCalendar Id
value when converting from JSCalendar to iCalendar. If they are set
on a property or the component, then its value MUST be used as key
when converting that element from iCalendar to JSCalendar. If no
such parameter or property is set, then an implementation is free to
choose any identifier, as long the following requirements are met:
* The identifier MUST be a valid Id value.
* The identifiers for the exact same iCalendar element MUST stay the
same, irrespective of the order in which components, properties
and parameters are processed.
2.1.4. Timezone identifiers
Converting temporal properties such as DTSTART, DTEND, and
RECURRENCE-ID requires to not only determine the date and time of the
property value, but also the timezone it references.
If the property value data type is DATE [RFC5545] (Section 3.3.4) or
DATE-TIME in FORM #1: DATE WITH LOCAL TIME [RFC5545] (Section 3.3.5)
then the timezone identifier is the JSON null value in JSCalendar.
If the property value data type is DATE-TIME in FORM #2: DATE WITH
UTC TIME [RFC5545] (Section 3.3.5) then the timezone identifier is
the string "Etc/UTC" in JSCalendar.
If the property value data type is DATE-TIME in FORM #3: DATE WITH
LOCAL TIME AND TIME ZONE REFERENCE [RFC5545] (Section 3.3.5) then the
timezone identifier is determined by the TZID parameter value:
If the TZID parameter value is equal to a name in the IANA Time Zone
Database [TZDB] then the timezone identifier is that verbatim name.
If the TZID parameter value is unequal to an IANA timezone name then
implementations MAY determine the name of an IANA timezone which has
the same timezone rules over the timespan of the calendar object.
Otherwise, the non-IANA timezone identifier is represented in
JSCalendar as a string starting with the / (SLASH) character,
Stepanek Expires 30 August 2025 [Page 14]
Internet-Draft JSCalendar February 2025
followed by the TZID parameter value. The corresponding VTIMEZONE
MUST be converted to the "timeZones" property with the prefixed
identifier as key. See Figure 14 for an example.
2.1.5. DATE and DATE-TIME
iCalendar provides the DATE and DATE-TIME value types to distinguish
date-only from date-time values. JSCalendar only supports date-time
values. A property value of type DATE-TIME converts to either a
LocalDateTime or UTCDateTime, depending on the JSCalendar property
definition. A DATE value type converts to a LocalDateTime with zero
time.
2.2. Components
2.2.1. PARTICIPANT
The PARTICIPANT component [RFC9073] (Section 7.1) converts to a
Participant object [RFC8984] (Section 4.4.6).
Its properties convert as follows:
+================+==========+====================+=======+=========+
|Name |Reference |Participant property|See |Note |
+================+==========+====================+=======+=========+
|ATTACH |[RFC5545],|links |Section| |
| |Section | |2.3.3 | |
| |3.8.1.1 | | | |
+----------------+----------+--------------------+-------+---------+
|CALENDAR-ADDRESS|[RFC9073],|calendarAddress |Section| |
| |Section | |2.3.5 | |
| |6.4 | | | |
+----------------+----------+--------------------+-------+---------+
|COMMENT |[RFC5545],|participationComment|Section|Only one |
| |Section | |2.3.9 |comment |
| |3.8.1.4 | | |supported|
+----------------+----------+--------------------+-------+---------+
|DESCRIPTION |[RFC5545],|description |Section| |
| |Section | |2.3.14 | |
| |3.8.1.5 | | | |
+----------------+----------+--------------------+-------+---------+
|DTSTAMP |[RFC5545],|scheduleUpdated |Section| |
| |Section | |2.3.16 | |
| |3.8.7.2 | | | |
+----------------+----------+--------------------+-------+---------+
|GEO |[RFC5545],|locations |Section| |
| |Section | |2.3.23 | |
| |3.8.1.6 | | | |
Stepanek Expires 30 August 2025 [Page 15]
Internet-Draft JSCalendar February 2025
+----------------+----------+--------------------+-------+---------+
|LINK |[RFC9253],|links |Section| |
| |Section | |2.3.26 | |
| |8.2 | | | |
+----------------+----------+--------------------+-------+---------+
|LOCATION |[RFC5545],|locations |Section| |
| |Section | |2.3.27 | |
| |3.8.1.7 | | | |
+----------------+----------+--------------------+-------+---------+
|PARTICIPANT-TYPE|[RFC9073],|roles |Section| |
| |Section | |2.3.32 | |
| |6.2 | | | |
+----------------+----------+--------------------+-------+---------+
|SEQUENCE |[RFC5545],|scheduleSequence |Section| |
| |Section | |2.3.41 | |
| |3.8.7.4 | | | |
+----------------+----------+--------------------+-------+---------+
|STRUCTURED-DATA |[RFC9073],|links |Section| |
| |Section | |2.3.44 | |
| |6.6 | | | |
+----------------+----------+--------------------+-------+---------+
|SUMMARY |[RFC5545],|name |Section| |
| |Section | |2.3.46 | |
| |3.8.1.12 | | | |
+----------------+----------+--------------------+-------+---------+
|URL |[RFC5545],|links |Section| |
| |Section | |2.3.57 | |
| |3.8.4.6 | | | |
+----------------+----------+--------------------+-------+---------+
Table 3: Properties of the PARTICIPANT component
Its components convert as follows:
+===========+=============+======================+=========+======+
| Name | Reference | Participant property | See | Note |
+===========+=============+======================+=========+======+
| VLOCATION | [RFC9073], | locations | Section | |
| | Section 7.2 | (Section 5.1.4) | 2.2.4 | |
+-----------+-------------+----------------------+---------+------+
Table 4: Components of the PARTICIPANT component
Other properties or components MAY be converted to the
"iCalComponent" property (Section 5.1.2) of the Participant object.
This includes mandatory properties such as UID [RFC5545]
(Section 3.8.4.7).
Stepanek Expires 30 August 2025 [Page 16]
Internet-Draft JSCalendar February 2025
The following example illustrates how to convert the PARTICIPANT
component:
BEGIN:VEVENT
BEGIN:PARTICIPANT
UID:47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2
STRUCTURED-DATA;VALUE=URI:
http://dir.example.com/vcard/contacts/contact1.vcf
PARTICIPANT-TYPE:CONTACT
DESCRIPTION:A contact
END:PARTICIPANT
...
{
"...": "",
"@type": "Event",
"participants": {
"p32": {
"@type": "Participant",
"description": "A contact",
"iCalComponent": {
"@type": "ICalComponent",
"name": "participant",
"properties": [
[
"uid",
{},
"text",
"47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2"
]
]
},
"links": {
"l4": {
"@type": "Link",
"href": "http://dir.example.com/vcard/contacts/contact1.vcf",
"...": ""
}
},
"roles": {
"contact": true
}
}
}
}
Figure 9: Converting the PARTICIPANT component
Stepanek Expires 30 August 2025 [Page 17]
Internet-Draft JSCalendar February 2025
2.2.2. VALARM
The VALARM component [RFC5545] (Section 3.6.6) converts to an Alert
object [RFC8984] (Section 4.5.2).
Its properties convert as follows:
+==============+============+==============+=========+===========+
| Name | Reference | Alert | See | Note |
| | | property | | |
+==============+============+==============+=========+===========+
| ACKNOWLEDGED | [RFC9074], | acknowledged | Section | |
| | Section | | 2.3.1 | |
| | 6.1 | | | |
+--------------+------------+--------------+---------+-----------+
| ACTION | [RFC5545], | action | Section | Only if |
| | Section | | 2.3.2 | ACTION is |
| | 3.8.6.1 | | | EMAIL or |
| | | | | DISPLAY. |
+--------------+------------+--------------+---------+-----------+
| RELATED-TO | [RFC5545], | relatedTo | Section | |
| | Section | | 2.3.38 | |
| | 3.8.4.5 | | | |
+--------------+------------+--------------+---------+-----------+
| TRIGGER | [RFC5545], | trigger | Section | |
| | Section | | 2.3.48 | |
| | 3.8.6.3 | | | |
+--------------+------------+--------------+---------+-----------+
Table 5: Properties of the VALARM component
Other properties or components MAY be converted to the
"iCalComponent" property (Section 5.1.2) of the Alert object. This
includes mandatory properties such as ATTENDEE [RFC5545]
(Section 3.8.4.1), DESCRIPTION [RFC5545] (Section 3.8.1.5), or
SUMMARY [RFC5545] (Section 3.8.1.12).
The following example illustrates how to convert the VALARM
component:
BEGIN:VEVENT
BEGIN:VALARM
TRIGGER:-PT30M
ACTION:DISPLAY
DESCRIPTION:Breakfast meeting
END:VALARM
...
Stepanek Expires 30 August 2025 [Page 18]
Internet-Draft JSCalendar February 2025
{
"...": "",
"@type": "Event",
"alerts": {
"a8": {
"@type": "Alert",
"iCalComponent": {
"@type": "ICalComponent",
"name": "valarm",
"properties": [
[
"description",
{},
"text",
"Breakfast meeting"
]
]
},
"trigger": {
"@type": "OffsetTrigger",
"offset": "-PT30M"
},
"action": "display"
}
}
}
Figure 10: Converting the VALARM component
2.2.3. VEVENT
The VEVENT component [RFC5545] (Section 3.6.1) converts to a Event
object [RFC8984] (Section 2.1).
Its properties convert as follows:
+===========+==========+===================================+=======+====+
|Name |Reference |Event property |See |Note|
+===========+==========+===================================+=======+====+
|ATTACH |[RFC5545],|links |Section| |
| |Section | |2.3.3 | |
| |3.8.1.1 | | | |
+-----------+----------+-----------------------------------+-------+----+
|ATTENDEE |[RFC5545],|participants |Section| |
| |Section | |2.3.4 | |
| |3.8.4.1 | | | |
+-----------+----------+-----------------------------------+-------+----+
|CATEGORIES |[RFC5545],|keywords |Section| |
Stepanek Expires 30 August 2025 [Page 19]
Internet-Draft JSCalendar February 2025
| |Section | |2.3.6 | |
| |3.8.1.2 | | | |
+-----------+----------+-----------------------------------+-------+----+
|CLASS |[RFC5545],|privacy |Section| |
| |Section | |2.3.7 | |
| |3.8.1.3 | | | |
+-----------+----------+-----------------------------------+-------+----+
|COLOR |[RFC7986],|color |Section| |
| |Section | |2.3.8 | |
| |5.9 | | | |
+-----------+----------+-----------------------------------+-------+----+
|COMMENT |[RFC5545],|participants/*/participationComment|Section| |
| |Section | |2.3.9 | |
| |3.8.1.4 | | | |
+-----------+----------+-----------------------------------+-------+----+
|CONCEPT |[RFC9253],|categories |Section| |
| |Section | |2.3.11 | |
| |8.1 | | | |
+-----------+----------+-----------------------------------+-------+----+
|CONFERENCE |[RFC7986],|virtualLocations |Section| |
| |Section | |2.3.12 | |
| |5.11 | | | |
+-----------+----------+-----------------------------------+-------+----+
|CREATED |[RFC5545],|created |Section| |
| |Section | |2.3.13 | |
| |3.8.7.1 | | | |
+-----------+----------+-----------------------------------+-------+----+
|DESCRIPTION|[RFC5545],|description |Section| |
| |Section | |2.3.14 | |
| |3.8.1.5 | | | |
+-----------+----------+-----------------------------------+-------+----+
|DTEND |[RFC5545],|duration |Section| |
| |Section | |2.3.15 | |
| |3.8.2.2 | | | |
+-----------+----------+-----------------------------------+-------+----+
|DTSTAMP |[RFC5545],|updated, scheduleUpdated |Section| |
| |Section | |2.3.16 | |
| |3.8.7.2 | | | |
+-----------+----------+-----------------------------------+-------+----+
|DTSTART |[RFC5545],|start |Section| |
| |Section | |2.3.17 | |
| |3.8.2.4 | | | |
+-----------+----------+-----------------------------------+-------+----+
|DURATION |[RFC5545],|duration |Section| |
| |Section | |2.3.19 | |
| |3.8.2.5 | | | |
+-----------+----------+-----------------------------------+-------+----+
|EXDATE |[RFC5545],|recurrenceOverrides |Section| |
Stepanek Expires 30 August 2025 [Page 20]
Internet-Draft JSCalendar February 2025
| |Section | |2.3.21 | |
| |3.8.5.1 | | | |
+-----------+----------+-----------------------------------+-------+----+
|EXRULE |[RFC2445],|excludedRecurrenceRules |Section| |
| |Section | |2.3.22 | |
| |4.8.5.2 | | | |
+-----------+----------+-----------------------------------+-------+----+
|GEO |[RFC5545],|locations |Section| |
| |Section | |2.3.23 | |
| |3.8.1.6 | | | |
+-----------+----------+-----------------------------------+-------+----+
|IMAGE |[RFC7986],|links |Section| |
| |Section | |2.3.24 | |
| |5.10 | | | |
+-----------+----------+-----------------------------------+-------+----+
|LAST- |[RFC5545],|updated |Section| |
|MODIFIED |Section | |2.3.25 | |
| |3.8.7.3 | | | |
+-----------+----------+-----------------------------------+-------+----+
|LINK |[RFC9253],|links |Section| |
| |Section | |2.3.26 | |
| |8.2 | | | |
+-----------+----------+-----------------------------------+-------+----+
|LOCATION |[RFC5545],|locations |Section| |
| |Section | |2.3.27 | |
| |3.8.1.7 | | | |
+-----------+----------+-----------------------------------+-------+----+
|ORGANIZER |[RFC5545],|replyTo |Section| |
| |Section | |2.3.31 | |
| |3.8.4.3 | | | |
+-----------+----------+-----------------------------------+-------+----+
|PRIORITY |[RFC5545],|priority |Section| |
| |Section | |2.3.34 | |
| |3.8.1.9 | | | |
+-----------+----------+-----------------------------------+-------+----+
|RDATE |[RFC5545],|recurrenceOverrides |Section| |
| |Section | |2.3.36 | |
| |3.8.5.2 | | | |
+-----------+----------+-----------------------------------+-------+----+
|RECURRENCE-|[RFC5545],|recurrenceId |Section| |
|ID |Section | |2.3.37 | |
| |3.8.4.4 | | | |
+-----------+----------+-----------------------------------+-------+----+
|RELATED-TO |[RFC5545],|relatedTo |Section| |
| |Section | |2.3.38 | |
| |3.8.4.5 | | | |
+-----------+----------+-----------------------------------+-------+----+
|REQUEST- |[RFC5545],|requestStatus |Section| |
Stepanek Expires 30 August 2025 [Page 21]
Internet-Draft JSCalendar February 2025
|STATUS |Section | |2.3.39 | |
| |3.8.8.3 | | | |
+-----------+----------+-----------------------------------+-------+----+
|RRULE |[RFC5545],|recurrenceRules |Section| |
| |Section | |2.3.40 | |
| |3.8.5.3 | | | |
+-----------+----------+-----------------------------------+-------+----+
|SEQUENCE |[RFC5545],|sequence |Section| |
| |Section | |2.3.41 | |
| |3.8.7.4 | | | |
+-----------+----------+-----------------------------------+-------+----+
|STATUS |[RFC5545],|status |Section| |
| |Section | |2.3.42 | |
| |3.8.1.11 | | | |
+-----------+----------+-----------------------------------+-------+----+
|STRUCTURED-|[RFC9073],|links |Section| |
|DATA |Section | |2.3.44 | |
| |6.6 | | | |
+-----------+----------+-----------------------------------+-------+----+
|STYLED- |[RFC9073],|description |Section| |
|DESCRIPTION|Section | |2.3.45 | |
| |6.5 | | | |
+-----------+----------+-----------------------------------+-------+----+
|SUMMARY |[RFC5545],|title |Section| |
| |Section | |2.3.46 | |
| |3.8.1.12 | | | |
+-----------+----------+-----------------------------------+-------+----+
|TRANSP |[RFC5545],|freeBusyStatus |Section| |
| |Section | |2.3.47 | |
| |3.8.2.7 | | | |
+-----------+----------+-----------------------------------+-------+----+
|UID |[RFC5545],|uid |Section| |
| |Section | |2.3.56 | |
| |3.8.4.7 | | | |
+-----------+----------+-----------------------------------+-------+----+
|URL |[RFC5545],|links |Section| |
| |Section | |2.3.57 | |
| |3.8.4.6 | | | |
+-----------+----------+-----------------------------------+-------+----+
Table 6: Properties of the VEVENT component
Its components convert as follows:
Stepanek Expires 30 August 2025 [Page 22]
Internet-Draft JSCalendar February 2025
+========+===============+================+=========+======+
| Name | Reference | Event property | See | Note |
+========+===============+================+=========+======+
| VALARM | [RFC5545], | alerts | Section | |
| | Section 3.6.6 | | 2.2.2 | |
+--------+---------------+----------------+---------+------+
Table 7: Components of the VEVENT component
Other properties or components MAY be converted to the
"iCalComponent" property (Section 5.1.2) of the Event object.
VEVENT components with different UID property values in the same
iCalendar object convert to different entries in the Group. They
sort in the same order as in the VCALENDAR component.
The following example illustrates how to convert the VEVENT
component:
BEGIN:VCALENDAR
BEGIN:VEVENT
UID:DE935D01-3DF7-4201-B61A-D77D05C8B21A
DTSTART:20060102T030405Z
...
END:VEVENT
BEGIN:VEVENT
UID:60BE3D6E-6383-473A-BCF1-3C43EA1FA571
...
END:VEVENT
END:VCALENDAR
{
"...": "",
"@type": "Group",
"entries": [
{
"@type": "Event",
"start": "2006-01-02T03:04:05",
"timeZone": "Etc/UTC",
"uid": "DE935D01-3DF7-4201-B61A-D77D05C8B21A",
"...": ""
},
{
"@type": "Event",
"uid": "60BE3D6E-6383-473A-BCF1-3C43EA1FA571",
"...": ""
}
]
}
Stepanek Expires 30 August 2025 [Page 23]
Internet-Draft JSCalendar February 2025
Figure 11: Converting the VEVENT component
2.2.4. VLOCATION
The VLOCATION component [RFC9073] (Section 7.2) converts to a
Location object [RFC8984] (Section 4.2.5).
Its properties convert as follows:
+=================+============+===============+=========+======+
| Name | Reference | Location | See | Note |
| | | property | | |
+=================+============+===============+=========+======+
| ATTACH | [RFC5545], | links | Section | |
| | Section | | 2.3.3 | |
| | 3.8.1.1 | | | |
+-----------------+------------+---------------+---------+------+
| DESCRIPTION | [RFC5545], | description | Section | |
| | Section | | 2.3.14 | |
| | 3.8.1.5 | | | |
+-----------------+------------+---------------+---------+------+
| GEO | [RFC5545], | coordinates | Section | |
| | Section | | 2.3.23 | |
| | 3.8.1.6 | | | |
+-----------------+------------+---------------+---------+------+
| IMAGE | [RFC7986], | links | Section | |
| | Section | | 2.3.24 | |
| | 5.10 | | | |
+-----------------+------------+---------------+---------+------+
| LINK | [RFC9253], | links | Section | |
| | Section | | 2.3.26 | |
| | 8.2 | | | |
+-----------------+------------+---------------+---------+------+
| LOCATION-TYPE | [RFC9073], | locationTypes | Section | |
| | Section | | 2.3.28 | |
| | 6.1 | | | |
+-----------------+------------+---------------+---------+------+
| NAME | [RFC7986], | name | Section | |
| | Section | | 2.3.30 | |
| | 5.1 | | | |
+-----------------+------------+---------------+---------+------+
| STRUCTURED-DATA | [RFC9073], | links | Section | |
| | Section | | 2.3.44 | |
| | 6.6 | | | |
+-----------------+------------+---------------+---------+------+
Table 8: Properties of the VLOCATION component
Stepanek Expires 30 August 2025 [Page 24]
Internet-Draft JSCalendar February 2025
Other properties or components MAY be converted to the
"iCalComponent" property (Section 5.1.2) of the Location object.
This includes mandatory properties such as UID [RFC5545]
(Section 3.8.4.7).
The following example illustrates how to convert the VLOCATION
component:
BEGIN:VLOCATION
UID:4954DC22-5BD6-4E98-844D-0302982F54AC
NAME:The venue
STRUCTURED-DATA;VALUE=URI:
http://dir.example.com/venues/big-hall.vcf
END:VLOCATION
"locations": {
"e4": {
"@type": "Location",
"name": "The venue",
"links": {
"21": {
"@type": "Link",
"href": "http://dir.example.com/venues/big-hall.vcf",
"...": ""
}
},
"iCalComponent": {
"@type": "ICalComponent",
"name": "vlocation",
"properties": [
[
"uid",
{},
"text",
"4954DC22-5BD6-4E98-844D-0302982F54AC"
]
]
}
}
}
Figure 12: Converting the VLOCATION component
2.2.5. VRESOURCE
The VRESOURCE component [RFC9073] (Section 7.3) converts to a
Participant object [RFC8984] (Section 4.4.6). The kind property
value of the Participant object MUST be "resource".
Stepanek Expires 30 August 2025 [Page 25]
Internet-Draft JSCalendar February 2025
Its properties convert as follows:
+=================+=================+=============+=========+======+
| Name | Reference | Participant | See | Note |
| | | property | | |
+=================+=================+=============+=========+======+
| ATTACH | [RFC5545], | links | Section | |
| | Section 3.8.1.1 | | 2.3.3 | |
+-----------------+-----------------+-------------+---------+------+
| DESCRIPTION | [RFC5545], | description | Section | |
| | Section 3.8.1.5 | | 2.3.14 | |
+-----------------+-----------------+-------------+---------+------+
| GEO | [RFC5545], | locations | Section | |
| | Section 3.8.1.6 | | 2.3.23 | |
+-----------------+-----------------+-------------+---------+------+
| IMAGE | [RFC7986], | links | Section | |
| | Section 5.10 | | 2.3.24 | |
+-----------------+-----------------+-------------+---------+------+
| LINK | [RFC9253], | links | Section | |
| | Section 8.2 | | 2.3.26 | |
+-----------------+-----------------+-------------+---------+------+
| NAME | [RFC7986], | name | Section | |
| | Section 5.1 | | 2.3.30 | |
+-----------------+-----------------+-------------+---------+------+
| STRUCTURED-DATA | [RFC9073], | links | Section | |
| | Section 6.6 | | 2.3.44 | |
+-----------------+-----------------+-------------+---------+------+
Table 9: Properties of the VRESOURCE component
Other properties or components MAY be converted to the
"iCalComponent" property (Section 5.1.2) of the Participant object.
This includes mandatory properties such as UID [RFC5545]
(Section 3.8.4.7).
The following example illustrates how to convert the VRESOURCE
component:
BEGIN:VEVENT
BEGIN:VRESOURCE
UID:456789-abcdef-98765432
NAME:The projector
RESOURCE-TYPE:PROJECTOR
STRUCTURED-DATA;VALUE=URI:http://dir.example.com/projectors/3d.vcf
END:VRESOURCE
...
Stepanek Expires 30 August 2025 [Page 26]
Internet-Draft JSCalendar February 2025
{
"...": "",
"@type": "Event",
"participants": {
"p2": {
"@type": "Participant",
"name": "The projector",
"kind": "resource",
"links": {
"l4": {
"@type": "Link",
"href": "http://dir.example.com/projectors/3d.vcf",
"...": ""
}
},
"iCalComponent": {
"@type": "ICalComponent",
"name": "vresource",
"properties": [
[
"uid",
{},
"text",
"456789-abcdef-98765432"
],
[
"resource-type",
{},
"text",
"PROJECTOR"
]
]
}
}
}
}
Figure 13: Converting the VRESOURCE component
2.2.6. VTIMEZONE
The VTIMEZONE component [RFC5545] (Section 3.6.5) converts to a
TimeZone object [RFC8984] (Section 4.7.2).
Its properties convert as follows:
Stepanek Expires 30 August 2025 [Page 27]
Internet-Draft JSCalendar February 2025
+===============+=================+============+=========+======+
| Name | Reference | TimeZone | See | Note |
| | | property | | |
+===============+=================+============+=========+======+
| LAST-MODIFIED | [RFC5545], | updated | Section | |
| | Section 3.8.7.3 | | 2.3.25 | |
+---------------+-----------------+------------+---------+------+
| TZID | [RFC5545], | tzId | Section | |
| | Section 3.8.3.1 | | 2.3.49 | |
+---------------+-----------------+------------+---------+------+
| TZID-ALIAS-OF | [RFC7808], | aliases | Section | |
| | Section 7.2 | | 2.3.50 | |
+---------------+-----------------+------------+---------+------+
| TZUNTIL | [RFC7808], | validUntil | Section | |
| | Section 7.1 | | 2.3.54 | |
+---------------+-----------------+------------+---------+------+
| TZURL | [RFC5545], | url | Section | |
| | Section 3.8.3.5 | | 2.3.55 | |
+---------------+-----------------+------------+---------+------+
Table 10: Properties of the VTIMEZONE component
Its components convert as follows:
+==========+===============+===================+=========+======+
| Name | Reference | TimeZone property | See | Note |
+==========+===============+===================+=========+======+
| DAYLIGHT | [RFC5545], | daylight | In this | |
| | Section 3.6.5 | | section | |
+----------+---------------+-------------------+---------+------+
| STANDARD | [RFC5545], | standard | In this | |
| | Section 3.6.5 | | section | |
+----------+---------------+-------------------+---------+------+
Table 11: Components of the VTIMEZONE component
Other properties or components MAY be converted to the
"iCalComponent" property (Section 5.1.2) of the TimeZone object.
The DAYLIGHT component [RFC5545] (Section 3.6.5) and STANDARD
component [RFC5545] (Section 3.6.5) convert to a TimeZoneRule object
[RFC8984] (Section 4.7.2).
Their properties convert as follows:
Stepanek Expires 30 August 2025 [Page 28]
Internet-Draft JSCalendar February 2025
+==============+============+=====================+=========+======+
| Name | Reference | TimeZoneRule | See | Note |
| | | property | | |
+==============+============+=====================+=========+======+
| COMMENT | [RFC5545], | comments | Section | |
| | Section | | 2.3.9 | |
| | 3.8.1.4 | | | |
+--------------+------------+---------------------+---------+------+
| DTSTART | [RFC5545], | start | Section | |
| | Section | | 2.3.17 | |
| | 3.8.2.4 | | | |
+--------------+------------+---------------------+---------+------+
| RDATE | [RFC5545], | recurrenceOverrides | Section | |
| | Section | | 2.3.36 | |
| | 3.8.5.2 | | | |
+--------------+------------+---------------------+---------+------+
| RRULE | [RFC5545], | recurrenceRules | Section | |
| | Section | | 2.3.40 | |
| | 3.8.5.3 | | | |
+--------------+------------+---------------------+---------+------+
| TZNAME | [RFC5545], | names | Section | |
| | Section | | 2.3.51 | |
| | 3.8.3.2 | | | |
+--------------+------------+---------------------+---------+------+
| TZOFFSETFROM | [RFC5545], | offsetFrom | Section | |
| | Section | | 2.3.52 | |
| | 3.8.3.3 | | | |
+--------------+------------+---------------------+---------+------+
| TZOFFSETTO | [RFC5545], | offsetTo | Section | |
| | Section | | 2.3.53 | |
| | 3.8.3.4 | | | |
+--------------+------------+---------------------+---------+------+
Table 12: Properties of the DAYLIGHT or STANDARD component
Other properties or components MAY be converted to the
"iCalComponent" property (Section 5.1.2) of the TimeZoneRule object.
The following example illustrates how to convert the VTIMEZONE
component:
Stepanek Expires 30 August 2025 [Page 29]
Internet-Draft JSCalendar February 2025
BEGIN:VCALENDAR
BEGIN:VTIMEZONE
TZID:CustomTz
TZID-ALIAS-OF:Puerto_Rico
TZID-ALIAS-OF:America/Anguilla
LAST-MODIFIED:20240909T122233Z
TZUNTIL:20080709T000000Z
TZURL:https://example.com/tz/CustomTz.ics
BEGIN:DAYLIGHT
TZNAME:AWT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
DTSTART:19420503T000000
END:DAYLIGHT
BEGIN:DAYLIGHT
TZNAME:APT
TZOFFSETFROM:-0300
TZOFFSETTO:-0300
DTSTART:19450814T200000
END:DAYLIGHT
BEGIN:STANDARD
TZNAME:AST
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
DTSTART:19450930T020000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=CustomTz:20080708T130000
...
{
"...": "",
"@type": "Group",
"entries": [
{
"...": "",
"@type": "Event",
"start": "2008-07-08T13:00:00",
"timeZone": "/CustomTz"
}
],
"timeZones": {
"/CustomTz": {
"@type": "TimeZone",
"aliases": {
"Puerto_Rico": true,
"America/Anguilla": true
},
Stepanek Expires 30 August 2025 [Page 30]
Internet-Draft JSCalendar February 2025
"validUntil": "2008-07-09T00:00:00Z",
"daylight": [
{
"@type": "TimeZoneRule",
"offsetFrom": "-0400",
"offsetTo": "-0300",
"start": "1942-05-03T00:00:00",
"names": {
"AWT": true
}
},
{
"@type": "TimeZoneRule",
"offsetFrom": "-0300",
"offsetTo": "-0300",
"start": "1945-08-14T20:00:00",
"names": {
"APT": true
}
}
],
"standard": [
{
"@type": "TimeZoneRule",
"offsetFrom": "-0300",
"offsetTo": "-0400",
"start": "1945-09-30T02:00:00",
"names": {
"AST": true
}
}
],
"tzId": "CustomTz",
"updated": "2024-09-09T12:22:33Z",
"url": "https://example.com/tz/CustomTz.ics"
}
}
}
Figure 14: Converting the VTIMEZONE component
2.2.7. VTODO
The VTODO component [RFC5545] (Section 3.6.2) converts to a Task
object [RFC8984] (Section 2.2).
Its properties convert as follows:
Stepanek Expires 30 August 2025 [Page 31]
Internet-Draft JSCalendar February 2025
+===========+=============================+===================================+=======+====+
|Name |Reference |Task property |See |Note|
+===========+=============================+===================================+=======+====+
|ATTACH |[RFC5545], Section 3.8.1.1 |links |Section| |
| | | |2.3.3 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|ATTENDEE |[RFC5545], Section 3.8.4.1 |participants |Section| |
| | | |2.3.4 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|CATEGORIES |[RFC5545], Section 3.8.1.2 |keywords |Section| |
| | | |2.3.6 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|CLASS |[RFC5545], Section 3.8.1.3 |privacy |Section| |
| | | |2.3.7 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|COLOR |[RFC7986], Section 5.9 |color |Section| |
| | | |2.3.8 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|COMMENT |[RFC5545], Section 3.8.1.4 |participants/*/participationComment|Section| |
| | | |2.3.9 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|COMPLETED |[RFC5545], Section 3.8.2.1 |completed |Section| |
| | | |2.3.10 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|CONCEPT |[RFC9253], Section 8.1 |categories |Section| |
| | | |2.3.11 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|CONFERENCE |[RFC7986], Section 5.11 |virtualLocations |Section| |
| | | |2.3.12 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|CREATED |[RFC5545], Section 3.8.7.1 |created |Section| |
| | | |2.3.13 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|DESCRIPTION|[RFC5545], Section 3.8.1.5 |description |Section| |
| | | |2.3.14 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|DTSTAMP |[RFC5545], Section 3.8.7.2 |updated, scheduleUpdated |Section| |
| | | |2.3.16 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|DTSTART |[RFC5545], Section 3.8.2.4 |start |Section| |
| | | |2.3.17 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|DUE |[RFC5545], Section 3.8.2.3 |due |Section| |
| | | |2.3.18 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|DURATION |[RFC5545], Section 3.8.2.5 |duration |Section| |
| | | |2.3.19 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
Stepanek Expires 30 August 2025 [Page 32]
Internet-Draft JSCalendar February 2025
|ESTIMATED- |[I-D.ietf-calext-ical-tasks],|estimatedDuration |Section| |
|DURATION |Section 12.1 | |2.3.20 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|EXDATE |[RFC5545], Section 3.8.5.1 |recurrenceOverrides |Section| |
| | | |2.3.21 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|EXRULE |[RFC2445], Section 4.8.5.2 |excludedRecurrenceRules |Section| |
| | | |2.3.22 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|GEO |[RFC5545], Section 3.8.1.6 |locations |Section| |
| | | |2.3.23 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|IMAGE |[RFC7986], Section 5.10 |links |Section| |
| | | |2.3.24 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|LAST- |[RFC5545], Section 3.8.7.3 |updated |Section| |
|MODIFIED | | |2.3.25 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|LINK |[RFC9253], Section 8.2 |links |Section| |
| | | |2.3.26 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|LOCATION |[RFC5545], Section 3.8.1.7 |locations |Section| |
| | | |2.3.27 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|ORGANIZER |[RFC5545], Section 3.8.4.3 |replyTo |Section| |
| | | |2.3.31 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|PERCENT- |[RFC5545], Section 3.8.1.8 |percentComplete |Section| |
|COMPLETE | | |2.3.33 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|PRIORITY |[RFC5545], Section 3.8.1.9 |priority |Section| |
| | | |2.3.34 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|RDATE |[RFC5545], Section 3.8.5.2 |recurrenceOverrides |Section| |
| | | |2.3.36 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|RECURRENCE-|[RFC5545], Section 3.8.4.4 |recurrenceId |Section| |
|ID | | |2.3.37 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|RELATED-TO |[RFC5545], Section 3.8.4.5 |relatedTo |Section| |
| | | |2.3.38 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|REQUEST- |[RFC5545], Section 3.8.8.3 |requestStatus |Section| |
|STATUS | | |2.3.39 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|RRULE |[RFC5545], Section 3.8.5.3 |recurrenceRules |Section| |
| | | |2.3.40 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
Stepanek Expires 30 August 2025 [Page 33]
Internet-Draft JSCalendar February 2025
|SEQUENCE |[RFC5545], Section 3.8.7.4 |sequence |Section| |
| | | |2.3.41 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|STRUCTURED-|[RFC9073], Section 6.6 |links |Section| |
|DATA | | |2.3.44 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|STYLED- |[RFC9073], Section 6.5 |description |Section| |
|DESCRIPTION| | |2.3.45 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|SUMMARY |[RFC5545], Section 3.8.1.12 |title |Section| |
| | | |2.3.46 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|TRANSP |[RFC5545], Section 3.8.2.7 |freeBusyStatus |Section| |
| | | |2.3.47 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|UID |[RFC5545], Section 3.8.4.7 |uid |Section| |
| | | |2.3.56 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
|URL |[RFC5545], Section 3.8.4.6 |links |Section| |
| | | |2.3.57 | |
+-----------+-----------------------------+-----------------------------------+-------+----+
Table 13: Properties of the VTODO component
Its components convert as follows:
+========+===============+===============+=========+======+
| Name | Reference | Task property | See | Note |
+========+===============+===============+=========+======+
| VALARM | [RFC5545], | alerts | Section | |
| | Section 3.6.6 | | 2.2.2 | |
+--------+---------------+---------------+---------+------+
Table 14: Components of the VTODO component
Other properties or components MAY be converted to the
"iCalComponent" property (Section 5.1.2) of the Task object.
VTODO components with different UID property values in the same
iCalendar object convert to different entries in the Group. They
sort in the same order as in the VCALENDAR component.
The following example illustrates how to convert the VTODO component:
Stepanek Expires 30 August 2025 [Page 34]
Internet-Draft JSCalendar February 2025
BEGIN:VCALENDAR
BEGIN:VTODO
UID:83C80482-806D-41C4-8029-E438F793005D
DUE:20060102T030405Z
...
{
"...": "",
"@type": "Group",
"entries": [
{
"...": "",
"@type": "Task",
"due": "2006-01-02T03:04:05",
"timeZone": "Etc/UTC",
"uid": "83C80482-806D-41C4-8029-E438F793005D"
}
]
}
Figure 15: Converting the VTODO component
2.3. Properties
2.3.1. ACKNOWLEDGED
The ACKNOWLEDGED property [RFC9074] (Section 6.1) in a VALARM
component converts to the "acknowledged" property [RFC8984]
(Section 4.5.2) of the Alert object.
The following example illustrates how to convert the ACKNOWLEDGED
property:
BEGIN:VEVENT
BEGIN:VALARM
ACKNOWLEDGED:20241002T114703Z
...
"alerts": {
"a": {
"@type": "Alert",
"acknowledged": "2024-10-02T11:47:03Z",
"...": ""
}
}
Figure 16: Converting the ACKNOWLEDGED property
Stepanek Expires 30 August 2025 [Page 35]
Internet-Draft JSCalendar February 2025
2.3.2. ACTION
The ACTION property [RFC5545] (Section 3.8.6.1) in a VALARM component
converts to the "action" property [RFC8984] (Section 4.5.2) of the
Alert object.
Its values convert as follows:
+=================+==================+
| iCalendar value | JSCalendar value |
+=================+==================+
| DISPLAY | display |
+-----------------+------------------+
| EMAIL | email |
+-----------------+------------------+
Table 15: Values of the ACTION
property
An ACTION property with value AUDIO or any other not listed in
Table 15 does not convert to the "action" property. Instead, the
property converts to the iCalComponent/properties property
(Section 5.1.2) of the Alert.
The following examples illustrate how to convert the ACTION property:
BEGIN:VEVENT
BEGIN:VALARM
ACTION:DISPLAY
...
"alerts": {
"a": {
"@type": "Alert",
"action": "display",
"...": ""
}
}
Figure 17: Converting the ACTION property for value DISPLAY
BEGIN:VEVENT
BEGIN:VALARM
ACTION:AUDIO
...
Stepanek Expires 30 August 2025 [Page 36]
Internet-Draft JSCalendar February 2025
"alerts": {
"a": {
"@type": "Alert",
"iCalComponent": {
"@type": "ICalComponent",
"name": "valarm",
"properties": [
[
"action",
{},
"text",
"AUDIO"
]
]
},
"...": ""
}
}
Figure 18: Converting the ACTION property for value AUDIO
2.3.3. ATTACH
The ATTACH property [RFC5545] (Section 3.8.1.1) in a VEVENT, VTODO,
VRESOURCE, PARTICIPANT, or VLOCATION component converts to a Link
object [RFC8984] (Section 1.4.11). The converted object is set in
the "links" property of the Event, Task, Participant, or Location
object.
The property value converts to the "href" property of the Link
object. A value of type URI converts as-is. A value of type BINARY
converts to a URI in the "data" URL scheme ([RFC2397]. If the
FMTTYPE parameter is set on the ATTACH property, then the parameter
value SHOULD be set in the mediatype part of the data URL.
The ATTACH property parameters convert as follows:
+=========+==========================+===============+======+
| Name | Reference | Link Property | Note |
+=========+==========================+===============+======+
| FMTTYPE | [RFC5545], Section 3.2.8 | contentType | |
+---------+--------------------------+---------------+------+
| SIZE | [RFC8607], Section 4.1 | size | |
+---------+--------------------------+---------------+------+
Table 16: Parameters of the ATTACH property
The following examples illustrate how to convert the ATTACH property:
Stepanek Expires 30 August 2025 [Page 37]
Internet-Draft JSCalendar February 2025
ATTACH:https://example.com/foo.pdf
"links": {
"a": {
"@type": "Link",
"href": "https://example.com/foo.pdf"
}
}
Figure 19: Converting the ATTACH property with URI value
ATTACH;ENCODING=BASE64;VALUE=BINARY;FMTTYPE=image/png:iVBORw
0KGgoAAAANSUhEUgAAAAEAAAABAQAAAAA3bvkkAAAAAmJLR0QAAd2KE6QAA
AAKSURBVAjXY2gAAACCAIHdQ2r0AAAAAElFTkSuQmCC
"links": {
"a": {
"@type": "Link",
"href": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQAAAAA3bvkkAAAAAmJLR0QAAd2KE6QAAAAKSURBVAjXY2gAAACCAIHdQ2r0AAAAAElFTkSuQmCC",
"contentType": "image/png",
"...": ""
}
}
Figure 20: Converting the ATTACH property with BINARY value
2.3.4. ATTENDEE
The ATTENDEE property [RFC5545] (Section 3.8.4.1) in a VEVENT or
VTODO component converts to a Participant object [RFC8984]
(Section 4.4.6). The converted object is set in the "participants"
property of the Event or Task object.
The property value converts to both the calendarAddress and sendTo
properties of the Participant object. If the CAL-ADDRESS value is in
the "mailto" scheme, then it converts to the "imip" method in the
"sendTo" property, otherwise it converts to the "other" method.
An ATTENDEE property and a PARTICIPANT component in the same
iCalendar component convert to the same Participant object, if their
converted calendarAddress property values are equal after URI
normalization [RFC3986] (Section 6). How to deal with conflicting
values when converting other Participant properties is
implementation-specific.
The ATTENDEE property parameters convert as follows:
Stepanek Expires 30 August 2025 [Page 38]
Internet-Draft JSCalendar February 2025
+=====================+================+=====================+======+
| Name | Reference | Participant | Note |
| | | Property | |
+=====================+================+=====================+======+
| CN | [RFC5545], | name | |
| | Section 3.2.2 | | |
+---------------------+----------------+---------------------+------+
| CUTYPE | [RFC5545], | kind | |
| | Section 3.2.3 | | |
+---------------------+----------------+---------------------+------+
| DELEGATED-FROM | [RFC5545], | delegatedFrom | |
| | Section 3.2.4 | | |
+---------------------+----------------+---------------------+------+
| DELEGATED-TO | [RFC5545], | delegatedTo | |
| | Section 3.2.5 | | |
+---------------------+----------------+---------------------+------+
| DIR | [RFC5545], | links | |
| | Section 3.2.6 | | |
+---------------------+----------------+---------------------+------+
| EMAIL | [RFC7986], | email | |
| | Section 6.2 | | |
+---------------------+----------------+---------------------+------+
| MEMBER | [RFC5545], | memberOf | |
| | Section | | |
| | 3.2.11 | | |
+---------------------+----------------+---------------------+------+
| PARTSTAT | [RFC5545], | participationStatus | |
| | Section | | |
| | 3.2.12 | | |
+---------------------+----------------+---------------------+------+
| ROLE | [RFC5545], | roles | |
| | Section | | |
| | 3.2.16 | | |
+---------------------+----------------+---------------------+------+
| RSVP | [RFC5545], | expectReply | |
| | Section | | |
| | 3.2.17 | | |
+---------------------+----------------+---------------------+------+
| SCHEDULE-AGENT | [RFC6638], | scheduleAgent | |
| | Section 7.1 | | |
+---------------------+----------------+---------------------+------+
| SCHEDULE-FORCE-SEND | [RFC6638], | scheduleForceSend | |
| | Section 7.2 | | |
+---------------------+----------------+---------------------+------+
| SCHEDULE-STATUS | [RFC6638], | scheduleStatus | |
| | Section 7.3 | | |
+---------------------+----------------+---------------------+------+
Stepanek Expires 30 August 2025 [Page 39]
Internet-Draft JSCalendar February 2025
Table 17: Parameters of the ATTENDEE property
If no ROLE parameter is set, then the "attendee" role in the "roles"
property MUST be set.
Every calendar address value of the DELEGATED-FROM, DELEGATED-TO, or
MEMBER parameters converts to the identifier of a Participant object.
This identifier is determined by finding that Participant object in
the "participants" property, which has a calendarAddress property
value matching the parameter value. If no such Participant object
exists after all properties and components have been converted, then
a new Participant object having that calendarAddress property value
is created. If multiple Participant objects match, then choosing the
Participant identifier is implementation-specific.
The PARTSTAT of an ATTENDEE property in a VTODO component converts
not only to the "participationStatus" property of the Participant
object, but also to its progress property if the PARTSTAT parameter
value is specific for VTODO components:
+=========+=============================+===================+=========+
|PARTSTAT |Reference |participationStatus|progress |
+=========+=============================+===================+=========+
|NEEDS- |[RFC5545], Section 3.2.12 |needs-action | |
|ACTION | | | |
+---------+-----------------------------+-------------------+---------+
|ACCEPTED |[RFC5545], Section 3.2.12 |accepted | |
+---------+-----------------------------+-------------------+---------+
|DECLINED |[RFC5545], Section 3.2.12 |declined | |
+---------+-----------------------------+-------------------+---------+
|TENTATIVE|[RFC5545], Section 3.2.12 |tentative | |
+---------+-----------------------------+-------------------+---------+
|DELEGATED|[RFC5545], Section 3.2.12 |delegated | |
+---------+-----------------------------+-------------------+---------+
|COMPLETED|[RFC5545], Section 3.2.12 |accepted |completed|
+---------+-----------------------------+-------------------+---------+
|IN- |[RFC5545], Section 3.2.12 |accepted |in- |
|PROCESS | | |process |
+---------+-----------------------------+-------------------+---------+
|FAILED |[I-D.ietf-calext-ical-tasks],|accepted |failed |
| |Section 11.1 | | |
+---------+-----------------------------+-------------------+---------+
Table 18: Converting the PARTSTAT parameter in a VTODO component
to Participant properties
The following examples illustrate how to convert the ATTENDEE
property:
Stepanek Expires 30 August 2025 [Page 40]
Internet-Draft JSCalendar February 2025
ATTENDEE;PARTSTAT=TENTATIVE;CN=Henry Cabot:mailto:hcabot@example.com
ORGANIZER:mailto:organizer@example.com
"participants": {
"p3": {
"@type": "Participant",
"calendarAddress": "mailto:hcabot@example.com",
"name": "Henry Cabot",
"participationStatus": "tentative",
"roles": {
"attendee": true
},
"sendTo": {
"imip": "mailto:hcabot@example.com"
}
},
"o4": {
"@type": "Participant",
"calendarAddress": "mailto:organizer@example.com",
"...": ""
}
}
Figure 21: Converting the ATTENDEE property
BEGIN:PARTICIPANT
CALENDAR-ADDRESS:mailto:foo@example.com
DTSTAMP:20230723T125201Z
...
END:PARTICIPANT
ATTENDEE;PARTSTAT=TENTATIVE:mailto:foo@example.com
ORGANIZER:mailto:bar@example.com
"participants": {
"23": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"participationStatus": "tentative",
"scheduleUpdated": "2023-07-23T12:52:01Z",
"...": ""
},
"o4": {
"calendarAddress": "mailto:bar@example.com",
"...": ""
}
}
Figure 22: Converting the ATTENDEE property and PARTICIPANT component
Stepanek Expires 30 August 2025 [Page 41]
Internet-Draft JSCalendar February 2025
BEGIN:VTODO
ATTENDEE;PARTSTAT=COMPLETED:mailto:foo@example.com
ORGANIZER:mailto:organizer@example.com
...
"@type": "Task",
"participants": {
"1": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"participationStatus": "accepted",
"progress": "completed",
"...": ""
},
"o": {
"@type": "Participant",
"calendarAddress": "mailto:organizer@example.com",
"...": ""
}
}
Figure 23: Converting the ATTENDEE property with a VTODO-specific
participation status
2.3.5. CALENDAR-ADDRESS
The CALENDAR-ADDRESS property [RFC9073] (Section 6.4) in a
PARTICIPANT component converts to the "calendarAddress" property
[I-D.ietf-jmap-calendars] (Section 5.1.1) of the Participant object.
The following example illustrates how to convert the CALENDAR-ADDRESS
property:
BEGIN:PARTICIPANT
CALENDAR-ADDRESS:mailto:foo@example.com
...
"participants": {
"a2": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"...": ""
}
}
Figure 24: Converting the CALENDAR-ADDRESS property
Stepanek Expires 30 August 2025 [Page 42]
Internet-Draft JSCalendar February 2025
2.3.6. CATEGORIES
The CATEGORIES property [RFC5545] (Section 3.8.1.2) in a VEVENT,
VTODO, or VCALENDAR component converts to the "keywords" property
[RFC8984] (Section 4.2.9) of the Event, Task, or Group object.
The list of category values converts to a set of keywords. The
values convert case-sensitively. All CATEGORIES properties in the
same iCalendar component convert to the "keywords" property in the
JSCalendar object.
The following example illustrates how to convert the CATEGORIES
property:
CATEGORIES:APPOINTMENT,EDUCATION
CATEGORIES:meeting
"keywords": {
"APPOINTMENT": true,
"EDUCATION": true,
"meeting": true
}
Figure 25: Converting the CATEGORIES property
2.3.7. CLASS
The CLASS property [RFC5545] (Section 3.8.1.3) in a VEVENT or VTODO
component converts to the "privacy" property [RFC8984]
(Section 4.4.3) of the Event or Task object.
Its values convert as follows:
+=================+==================+
| iCalendar value | JSCalendar value |
+=================+==================+
| PUBLIC | public |
+-----------------+------------------+
| PRIVATE | private |
+-----------------+------------------+
| CONFIDENTIAL | secret |
+-----------------+------------------+
Table 19: Values of the CLASS property
Any other value does not convert to the "class" property. Instead,
the property converts to the iCalComponent/properties property
(Section 5.1.2) of the JSCalendar object.
Stepanek Expires 30 August 2025 [Page 43]
Internet-Draft JSCalendar February 2025
The following example illustrates how to convert the CLASS property:
CLASS:PRIVATE
"privacy": "private"
Figure 26: Converting the CLASS property
2.3.8. COLOR
The COLOR property [RFC7986] (Section 5.9) in a VEVENT, VTODO, or
VCALENDAR component converts to the "color" property [RFC8984]
(Section 4.2.11) of the Event, Task, or Group object.
Its value converts verbatim.
The following examples illustrate how to convert the COLOR property:
COLOR:maroon
"color": "maroon"
Figure 27: Converting the COLOR property with color name
COLOR:#ffa07a
"color": "#ffa07a"
Figure 28: Converting the COLOR property with numeric value
2.3.9. COMMENT
The COMMENT property [RFC5545] (Section 3.8.1.4) in a DAYLIGHT or
STANDARD component converts to the "comments" property [RFC8984]
(Section 4.7.2) of the TimeZoneRule object.
The COMMENT property [RFC5545] (Section 3.8.1.4) in a PARTICIPANT
component converts to the "participationComment" property [RFC8984]
(Section 4.4.6).
The COMMENT property [RFC5545] (Section 3.8.1.4) in an iTIP-scheduled
[RFC5546] VEVENT or VTODO component converts to the
"participationComment" property [RFC8984] (Section 4.4.6) of that
Participant object, which represents the source of this scheduling
message, if any. It otherwise converts to the iCalComponent/
properties property (Section 5.1.2) of the Event or Task object.
Multiple COMMENT properties in a DAYLIGHT or STANDARD component
convert in any order to the multi-valued "comments" property.
Converting multiple COMMENT properties to the single-valued
participationComment property is implementation-specific.
Stepanek Expires 30 August 2025 [Page 44]
Internet-Draft JSCalendar February 2025
The following examples illustrate how to convert the COMMENT
property:
BEGIN:VCALENDAR
BEGIN:VTIMEZONE
TZID:NonIana
BEGIN:DAYLIGHT
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
DTSTART:20010503T000000
COMMENT:take note of this
COMMENT:and this
END:DAYLIGHT
END:VTIMEZONE
...
{
"@type": "Group",
"timeZones": {
"/NonIana": {
"@type": "TimeZone",
"daylight": [
{
"@type": "TimeZoneRule",
"comments": [
"take note of this",
"and this"
],
"...": ""
}
],
"...": ""
}
},
"...": ""
}
Figure 29: Converting the COMMENT property in a DAYLIGHT component
BEGIN:PARTICIPANT
UID:127ABD62-D07A-4F39-AA62-530E37A8DF78
COMMENT:I'll think about it
...
Stepanek Expires 30 August 2025 [Page 45]
Internet-Draft JSCalendar February 2025
"participants": {
"g2": {
"@type": "Participant",
"participationComment": "I'll think about it",
"...": ""
}
}
Figure 30: Converting the COMMENT property in a PARTICIPANT component
2.3.10. COMPLETED
The COMPLETED property [RFC5545] (Section 3.8.2.1) in a VTODO
component converts to the "completed" property (Section 5.1.1) of the
Task object.
The following example illustrates how to convert the COMPLETED
property:
BEGIN:VTODO
COMPLETED:20241108T111029Z
...
{
"@type": "Task",
"completed": "2024-11-08T11:10:29Z",
"...": ""
}
Figure 31: Converting the COMPLETED property
2.3.11. CONCEPT
The CONCEPT property [RFC9253] (Section 8.1) in a VEVENT, VTODO, or
VCALENDAR component converts to the "categories" property [RFC8984]
(Section 4.2.10) of the Event, Task, or Group object.
The list of URI values converts to a set of URIs. Multiple
occurrences of the CONCEPT property in the same iCalendar component
convert to the same categories property in the JSCalendar object.
The following example illustrates how to convert the CONCEPT
property:
CONCEPT:https://example.com/event-types/arts/music
CONCEPT:https://example.com/event-types/arts/literature
Stepanek Expires 30 August 2025 [Page 46]
Internet-Draft JSCalendar February 2025
"categories": {
"https://example.com/event-types/arts/music": true,
"https://example.com/event-types/arts/literature": true
}
Figure 32: Converting the CONCEPT property
2.3.12. CONFERENCE
The CONFERENCE property [RFC7986] (Section 5.11) in a VEVENT or VTODO
component converts to a VirtualLocation object [RFC8984]
(Section 4.2.6). The converted object is set in the
"virtualLocations" property of the Event or Task object.
The property value converts to the "uri" property of the
VirtualLocation object.
Its parameters convert as follows:
+=========+========================+==========+======+
| Name | Reference | Property | Note |
+=========+========================+==========+======+
| FEATURE | [RFC7986], Section 6.3 | features | |
+---------+------------------------+----------+------+
| LABEL | [RFC7986], Section 6.4 | name | |
+---------+------------------------+----------+------+
Table 20: Parameters of the CONFERENCE property
The following example illustrates how to convert the CONFERENCE
property:
CONFERENCE;VALUE=URI;FEATURE=AUDIO,VIDEO;
LABEL=Attendee dial-in:https://chat.example.com/audio?id=123456
"virtualLocations": {
"b2": {
"@type": "VirtualLocation",
"name": "Attendee dial-in",
"uri": "https://chat.example.com/audio?id=123456",
"features": {
"audio": true,
"video": true
}
}
}
Figure 33: Converting the CONFERENCE property
Stepanek Expires 30 August 2025 [Page 47]
Internet-Draft JSCalendar February 2025
2.3.13. CREATED
The CREATED property [RFC5545] (Section 3.8.7.1) in a VEVENT, VTODO,
or VCALENDAR component converts to the "created" property [RFC8984]
(Section 4.1.5) of the Event, Task, or Group object.
The following example illustrates how to convert the CREATED
property:
CREATED:20240329T133000Z
"created": "2024-03-29T13:30:00Z"
Figure 34: Converting the CREATED property
2.3.14. DESCRIPTION
The DESCRIPTION property [RFC5545] (Section 3.8.1.5) in a VEVENT,
VTODO, VCALENDAR, VLOCATION, VRESOURCE, or PARTICIPANT component
converts to the "description" property [RFC8984] (Section 4.2.2) of
the Event, Task, Group, Location, Link, or Participant object, unless
its DERIVED parameter value is TRUE.
If the DERIVED parameter value is TRUE, then the property does not
convert to the "description" property. Instead, a non-derived
STYLED-DESCRIPTION property is expected to contain the description.
Implementations MAY preserve the property in the "iCalComponent"
property (Section 5.1.2).
The following example illustrates how to convert the DESCRIPTION
property:
DESCRIPTION:The pancakes there are delicious\; they are fluffy and sweet.
"description": "The pancakes there are delicious; they are fluffy and sweet."
Figure 35: Converting the DESCRIPTION property
2.3.15. DTEND
The DTEND property [RFC5545] (Section 3.8.2.2) in a VEVENT component
converts to the "duration" property [RFC8984] (Section 5.1.2) of the
Event object.
The duration is the timespan between the points in time of the
DTSTART and DTEND property values when converted to UTC time.
If the timezone identifier (Section 2.1.4) of the DTEND property
differs from that of the DTSTART property, then the DTEND property
also converts to a Location object. The timezone identifier converts
Stepanek Expires 30 August 2025 [Page 48]
Internet-Draft JSCalendar February 2025
to the "timeZone" property of the Location object. The relativeTo
property of the Location is set to "end". The Location object is set
in the "locations" property of the Event object.
Implementations MAY preserve the fact that the duration got
determined by the DTEND property. How to do this depends on the
timezone identifiers of the DTSTART and DTEND properties. If the
identifiers are equal, then implementations MUST set the
"iCalComponent" property (Section 5.1.2) in the Event object and
there add an entry for the path "duration" in the
"convertedProperties" property. If instead the timezone identifiers
are not equal, then implementations MUST set the "iCalProperty"
property (Section 5.1.3) of the Location object. In both cases, the
value MUST be an ICalProperty object with the "name" property set to
"dtend".
The following examples illustrate how to convert the DTEND property:
DTSTART;TZID=Australia/Melbourne:20241002T130000
DTEND;TZID=Australia/Melbourne:20241002T140000
"start": "2024-10-02T13:00:00",
"timeZone": "Australia/Melbourne",
"duration": "PT1H",
"iCalComponent": {
"@type": "ICalComponent",
"name": "vevent",
"convertedProperties": {
"duration": {
"@type": "ICalProperty",
"name": "dtend"
}
}
}
Figure 36: Converting the DTEND property with same timezone
DTSTART;TZID=Europe/Berlin:20241017T130000
DTEND;TZID=Asia/Bangkok:20241018T040000
Stepanek Expires 30 August 2025 [Page 49]
Internet-Draft JSCalendar February 2025
"start": "2024-10-17T13:00:00",
"timeZone": "Europe/Berlin",
"duration": "PT10H",
"locations": {
"l5": {
"@type": "Location",
"timeZone": "Asia/Bangkok",
"relativeTo": "end",
"iCalProperty": {
"@type": "ICalProperty",
"name": "dtend"
}
}
}
Figure 37: Converting the DTEND property with different timezone
DTSTART;VALUE=DATE:20240102
DTEND;VALUE=DATE:20240107
"start": "2024-01-02T00:00:00",
"timeZone": null,
"duration": "P5D",
"showWithoutTime": true
Figure 38: Converting the DTEND property with DATE value type
2.3.16. DTSTAMP
The DTSTAMP property [RFC5545] (Section 3.8.7.2) in a VEVENT or VTODO
component converts to the "updated" property [RFC8984]
(Section 4.1.6) of the Event or Task object.
An Event or Task object which has the "method" property set might
represent an iTIP reply of one of the participants in the object. In
this case the value of the DTSTAMP property also converts to the
"scheduleUpdated" property [RFC8984] (Section 4.4.6) of that
Participant object, which represents the participant from which the
iTIP reply originated.
The DTSTAMP property in a PARTICIPANT component converts to the
"scheduleUpdated" property [RFC8984] (Section 4.4.6) of the
Participant object.
The following examples illustrate how to convert the DTSTAMP
property:
Stepanek Expires 30 August 2025 [Page 50]
Internet-Draft JSCalendar February 2025
BEGIN:VCALENDAR
METHOD:REPLY
BEGIN:VEVENT
DTSTAMP:20240304T132000Z
...
{
"@type": "Group",
"entries": [
{
"@type": "Event",
"method": "reply",
"updated": "2024-03-04T13:20:00Z",
"...": ""
}
],
"...": ""
}
Figure 39: Converting the DTSTAMP property in a VEVENT component
BEGIN:VEVENT
BEGIN:PARTICIPANT
DTSTAMP:20240304T132000Z
...
"participants": {
"f4": {
"@type": "Participant",
"scheduleUpdated": "2024-03-04T13:20:00Z",
"...": ""
}
}
Figure 40: Converting the DTSTAMP property in a PARTICIPANT component
2.3.17. DTSTART
The DTSTART property [RFC5545] (Section 3.8.2.4) in a VEVENT, VTODO,
DAYLIGHT or STANDARD component converts to the "start" property
[RFC8984] (Section 4.7.2) of the Event, Task, or TimeZoneRule object.
See Section 2.1.5 how to convert DATE and DATE-TIME values.
For VEVENT and VTODO components, the timezone identifier
(Section 2.1.4) of the DTSTART property converts to the "timeZone"
property of the Event or Task object. In addition, if the value type
of the DTSTART property is DATE, then the value of the
"showWithoutTime" property [RFC8984] (Section 4.2.4) is "true".
Stepanek Expires 30 August 2025 [Page 51]
Internet-Draft JSCalendar February 2025
The following examples illustrate how to convert the DTSTART property
for the VEVENT and VTODO components. See Section 2.2.6 for examples
how to convert the DTSTART property for the DAYLIGHT and STANDARD
components.
DTSTART;TZID=Europe/Berlin:20240921T105302
"start": "2024-09-21T10:53:02",
"timeZone": "Europe/Berlin",
"showWithoutTime": false
Figure 41: Converting the DTSTART property with TZID parameter
DTSTART:20240921T105302Z
"start": "2024-09-21T10:53:02",
"timeZone": "Etc/UTC",
"showWithoutTime": false
Figure 42: Converting the DTSTART property with UTC time
DTSTART:20240921T105302
"start": "2024-09-21T10:53:02",
"timeZone": null,
"showWithoutTime": false
Figure 43: Converting the DTSTART property with floating time
DTSTART;VALUE=DATE:20240921
"start": "2024-09-21T00:00:00",
"timeZone": null,
"showWithoutTime": true
Figure 44: Converting the DTSTART property with value type DATE
2.3.18. DUE
The DUE property [RFC5545] (Section 3.8.2.3) in a VTODO component
converts to the "due" property [RFC8984] (Section 5.2.1) of the Task
object.
See Section 2.1.5 how to convert DATE and DATE-TIME values.
Stepanek Expires 30 August 2025 [Page 52]
Internet-Draft JSCalendar February 2025
If the VTODO component does not contain a DTSTART property, then the
timezone identifier (Section 2.1.4) of the DUE property converts to
the "timeZone" property of the Task object. If instead the VTODO
component contains both the DUE and DTSTART properties, then the
timezone identifier of the DUE property does not convert to a
standard JSCalendar element. The value of the "due" property MUST
denote the date and time relative to the timezone of the DTSTART
property.
If the value type of the DUE property is DATE, then the value of the
"showWithoutTime" property [RFC8984] (Section 4.2.4) is "true".
The following examples illustrate how to convert the DUE property:
BEGIN:VTODO
DUE;TZID=Europe/Berlin:20240921T105302
"@type": "Task",
"due": "2024-09-21T10:53:02",
"timeZone": "Europe/Berlin",
"showWithoutTime": false
Figure 45: Converting the DUE property with TZID parameter
BEGIN:VTODO
DUE:20240921T105302Z
"@type": "Task",
"due": "2024-09-21T10:53:02",
"timeZone": "Etc/UTC",
"showWithoutTime": false
Figure 46: Converting the DUE property with UTC time
BEGIN:VTODO
DUE:20240921T105302
"@type": "Task",
"due": "2024-09-21T10:53:02",
"timeZone": null,
"showWithoutTime": false
Figure 47: Converting the DUE property with floating time
BEGIN:VTODO
DUE;VALUE=DATE:20240921
"@type": "Task",
"due": "2024-09-21T00:00:00",
"timeZone": null,
"showWithoutTime": true
Stepanek Expires 30 August 2025 [Page 53]
Internet-Draft JSCalendar February 2025
Figure 48: Converting the DUE property with value type DATE
BEGIN:VTODO
DTSTART;VALUE=DATE:20250220
DUE;VALUE=DATE:20250221
"@type": "Task",
"start": "2025-02-20T00:00:00",
"due": "2025-02-21T00:00:00",
"showWithoutTime": true
Figure 49: Converting the DUE property with value type DATE in
combination with DTSTART
2.3.19. DURATION
The DURATION property [RFC5545] (Section 3.8.2.5) in a VEVENT or
VTODO component converts to the "duration" property [RFC8984]
(Section 5.1.2) of the Event or Task object.
The following example illustrates how to convert the DURATION
property:
DURATION:PT1H
"duration": "PT1H"
Figure 50: Converting the DURATION
2.3.20. ESTIMATED-DURATION
The ESTIMATED-DURATION property [I-D.ietf-calext-ical-tasks]
(Section 12.1) in a VTODO component converts to the
"estimatedDuration" property [RFC8984] (Section 5.2.3) of the Task
object.
The following example illustrates how to convert the ESTIMATED-
DURATION property:
BEGIN:VTODO
ESTIMATED-DURATION:P2D
"@type": "Task",
"estimatedDuration": "P2D"
Figure 51: Converting the ESTIMATED-DURATION
Stepanek Expires 30 August 2025 [Page 54]
Internet-Draft JSCalendar February 2025
2.3.21. EXDATE
The EXDATE property [RFC5545] (Section 3.8.5.1) in a VEVENT or VTODO
component converts to a PatchObject value [RFC8984] (Section 1.4.9).
The converted object is set in the "recurrenceOverrides" property of
the Event or Task object.
The property value converts to the key in the "recurrenceOverrides"
property value. See Section 2.1.5 how to convert DATE and DATE-TIME
values. The date-time MUST be relative to the timezone identified by
the "timeZone" property of the Event or Task. The PatchObject value
MUST set the "excluded" property to "true" and MUST NOT set any other
property.
The following example illustrates how to convert the EXDATE property:
DTSTART:20230101T130000Z
RRULE:FREQ=MONTHLY
EXDATE:20230801T130000Z
"start": "2023-01-01T13:00:00",
"timeZone": "Etc/UTC",
"recurrenceRules": [
{
"@type": "RecurrenceRule",
"frequency": "monthly"
}
],
"recurrenceOverrides": {
"2023-08-01T13:00:00": {
"excluded": true
}
}
Figure 52: Converting the EXDATE property
2.3.22. EXRULE
The EXRULE property [RFC2445] (Section 4.8.5.2) in a VEVENT or VTODO
component converts to a RecurrenceRule object [RFC8984]
(Section 4.3.3). The converted object is set in the
"excludedRecurrenceRules" property of the Event or Task.
See Section 2.3.40 for an example how to convert a recurrence rule.
Stepanek Expires 30 August 2025 [Page 55]
Internet-Draft JSCalendar February 2025
2.3.23. GEO
The GEO property [RFC5545] (Section 3.8.1.6) in a VEVENT, VTODO,
PARTICIPANT or VRESOURCE component converts to a Location object
[RFC8984] (Section 4.2.5). The converted object is set in the
"locations" property of the Event, Task, or Participant object.
The GEO property [RFC5545] (Section 3.8.1.6) in a VLOCATION component
converts to the "coordinates" property [RFC8984] (Section 4.2.5) of
the Location object.
The pair of FLOAT values converts to a URI with the "geo" scheme
[RFC5870]. The first FLOAT value converts to the "coord-a" part of
the URI, the second FLOAT value to the "coord-b" part. A preceding
plus sign (+) of the FLOAT value MUST be omitted, a preceding minus
sign (-) MUST be preserved. The optional "coord-c" part of the URI
MUST be omitted.
The following examples illustrate how to convert the GEO property:
GEO:+45.5;-93.3
"locations": {
"d4": {
"@type": "Location",
"coordinates": "geo:45.5,-93.3"
}
}
Figure 53: Converting the GEO property in a VEVENT
BEGIN:VEVENT
BEGIN:VLOCATION
NAME:Eiffel Tower
GEO:48.858222;2.2945
...
"locations": {
"2": {
"@type": "Location",
"name": "Eiffel Tower",
"coordinates": "geo:48.858222,2.2945"
}
}
Figure 54: Converting the GEO property in a VLOCATION
Stepanek Expires 30 August 2025 [Page 56]
Internet-Draft JSCalendar February 2025
2.3.24. IMAGE
The IMAGE property [RFC7986] (Section 5.10) in a VEVENT, VTODO,
VLOCATION, or VRESOURCE component converts to a Link object [RFC8984]
(Section 1.4.11). The converted object is set in the "links"
property of the Event, Task, Location, or Participant object.
The property value converts to the "href" property of the Link
object. A value of type URI converts as-is. See Section 2.3.3 how
to convert a BINARY value. If the DISPLAY parameter is set, then the
"rel" property of the Link object MUST be set to "icon".
Its parameters convert as follows:
+=========+==========================+=============+======+
| Name | Reference | Property | Note |
+=========+==========================+=============+======+
| DISPLAY | [RFC7986], Section 6.1 | display | |
+---------+--------------------------+-------------+------+
| FMTTYPE | [RFC5545], Section 3.2.8 | contentType | |
+---------+--------------------------+-------------+------+
| SIZE | [RFC8607], Section 4.1 | size | |
+---------+--------------------------+-------------+------+
Table 21: Parameters of the IMAGE property
Implementations MAY preserve the fact that the Link object got
converted from an IMAGE property. To do so, they MUST set the
iCalProperty (Section 5.1.3) on the Link object.
The following example illustrates how to convert the IMAGE property:
IMAGE;VALUE=URI;DISPLAY=BADGE;FMTTYPE=image/png:
https://example.com/images/party.png
"links": {
"4": {
"@type": "Link",
"href": "https://example.com/images/party.png",
"display": "badge",
"rel": "icon",
"contentType": "image/png",
"iCalProperty": {
"@type": "ICalProperty",
"name": "image"
}
}
}
Stepanek Expires 30 August 2025 [Page 57]
Internet-Draft JSCalendar February 2025
Figure 55: Converting the IMAGE property
2.3.25. LAST-MODIFIED
The LAST-MODIFIED property [RFC5545] (Section 3.8.7.3) in a VCALENDAR
or VTIMEZONE component converts to the "updated" property [RFC8984]
(Section 4.1.6) of the Group or TimeZone object.
The LAST-MODIFIED property [RFC5545] (Section 3.8.7.3) in a VEVENT or
VTODO component does _not_ convert to the "updated" property
[RFC8984] (Section 4.1.6) of the Event or Task object.
Implementations MAY instead preserve the LAST-MODIFIED property in
the "iCalComponent" property.
The following example illustrates how to convert the LAST-MODIFIED
property:
BEGIN:VCALENDAR
LAST-MODIFIED:20240914T231257Z
...
"@type": "Group",
"updated": "2024-09-14T23:12:57Z"
Figure 56: Converting the IMAGE property
2.3.26. LINK
A LINK property [RFC9253] (Section 8.2) of type URI in a VEVENT,
VTODO, VCALENDAR, VRESOURCE, PARTICIPANT, or VLOCATION component
converts to a Link object [RFC8984] (Section 1.4.11).
The converted object is set in the "links" property of the Event,
Task, Group, Participant, or Location object. The LINK property
value converts to the "href" property of the Link object.
Its parameters convert as follows:
+=========+==========================+=====================+======+
| Name | Reference | Property | Note |
+=========+==========================+=====================+======+
| FMTTYPE | [RFC5545], Section 3.2.8 | contentType | |
+---------+--------------------------+---------------------+------+
| LABEL | [RFC7986], Section 6.4 | title | |
+---------+--------------------------+---------------------+------+
| LINKREL | [RFC9253], Section 6.1 | rel (Section 5.2.1) | |
+---------+--------------------------+---------------------+------+
Table 22: Parameters of the LINK property
Stepanek Expires 30 August 2025 [Page 58]
Internet-Draft JSCalendar February 2025
A LINK property with a value type other than URI or an unregistered
LINK parameter value does not convert to a standard JSCalendar
element. Implementations MAY convert it to the "iCalComponent"
property (Section 5.1.2).
The following examples illustrate how to convert the LINK property:
LINK;LINKREL=SOURCE;LABEL=Venue;VALUE=URI:https://example.com/events
"links": {
"l1": {
"@type": "Link",
"href": "https://example.com/events",
"title": "Venue",
"rel": "source"
}
}
Figure 57: Converting the LINK property to a Link object
BEGIN:VEVENT
LINK;LINKREL="https://example.com/linkrel/costStructure";
VALUE=XML-REFERENCE:
https://example.com/xmlDocs/bidFramework.xml#xpointer(id("cost"))
...
"iCalComponent": {
"@type": "ICalComponent",
"name": "vevent",
"properties": [
[
"link",
{
"linkrel": "https://example.com/linkrel/costStructure"
},
"xml-reference",
"https://example.com/xmlDocs/bidFramework.xml#xpointer(id(\"cost\"))"
]
]
}
Figure 58: Converting the LINK property to iCalComponent
2.3.27. LOCATION
The LOCATION property [RFC5545] (Section 3.8.1.7) in a VEVENT, VTODO,
or PARTICIPANT component converts to a Location object [RFC8984]
(Section 4.2.5), unless its DERIVED parameter value is TRUE. The
converted object is set in the "locations" property of the Event,
Task, or Participant object.
Stepanek Expires 30 August 2025 [Page 59]
Internet-Draft JSCalendar February 2025
The property value converts to the "title" property of the Location
object.
If the DERIVED parameter value is TRUE, then the property does not
convert to a Location object. Instead, a VLOCATION component is
expected to represent the location. Implementations MAY preserve the
property in the "iCalComponent" property (Section 5.1.2).
The following example illustrates how to convert the LOCATION
property:
LOCATION:Conference Room - F123\, Bldg. 002
"locations": {
"f45": {
"@type": "Location",
"title": "Conference Room - F123, Bldg. 002"
}
}
Figure 59: Converting the LOCATION property
2.3.28. LOCATION-TYPE
The LOCATION-TYPE property [RFC9073] (Section 6.1) in a VLOCATION
component converts to the "locationTypes" property [RFC8984]
(Section 4.2.5) of the Location object.
The list of location type values converts to a set of location types.
The values convert case-sensitively. All LOCATION-TYPE properties in
the same VLOCATION convert to the "locationTypes" property in the
Location object.
The following example illustrates how to convert the LOCATION-TYPE
property:
BEGIN:VEVENT
BEGIN:VLOCATION
LOCATION-TYPE:hotel,restaurant
LOCATION-TYPE:bar
...
Stepanek Expires 30 August 2025 [Page 60]
Internet-Draft JSCalendar February 2025
"locations": {
"1": {
"@type": "Location",
"locationTypes": {
"bar": true,
"hotel": true,
"restaurant": true
},
"...": ""
}
}
Figure 60: Converting the LOCATION property
2.3.29. METHOD
The METHOD property [RFC5545] (Section 3.7.2) in a VCALENDAR
component converts to the "method" property [RFC8984] (Section 4.1.8)
of all Event or Task objects that are listed in the Group object's
entries property.
The property value converts in lowercase.
The following example illustrates how to convert the METHOD property:
BEGIN:VCALENDAR
METHOD:REQUEST
BEGIN:VEVENT
...
{
"@type": "Group",
"entries": [
{
"@type": "Event",
"method": "request",
"...": ""
}
],
"...": ""
}
Figure 61: Converting the METHOD property
2.3.30. NAME
The NAME property [RFC7986] (Section 5.1) in a VLOCATION or VRESOURCE
component converts to the "name" property of the Location [RFC8984]
(Section 4.2.5) or Participant [RFC8984] (Section 4.4.6) object.
Stepanek Expires 30 August 2025 [Page 61]
Internet-Draft JSCalendar February 2025
The NAME property [RFC7986] (Section 5.1) in a VCALENDAR component
converts to the "title" property [RFC8984] (Section 4.2.1) of the
Group object.
The following examples illustrate how to convert the NAME property:
BEGIN:VCALENDAR
NAME:Company Vacation Days
...
{
"@type": "Group",
"title": "Company Vacation Days",
"...": ""
}
Figure 62: Converting the NAME property in a VCALENDAR component
BEGIN:VEVENT
BEGIN:VLOCATION
NAME:Room B
...
END:VLOCATION
BEGIN:VRESOURCE
NAME:Whiteboard
...
END:VRESOURCE
...
"locations": {
"1": {
"@type": "Location",
"name": "Room B",
"...": ""
}
},
"participants": {
"1": {
"@type": "Participant",
"kind": "resource",
"name": "Whiteboard",
"...": ""
}
}
Figure 63: Converting the NAME property in the VLOCATION and
VRESOURCE components
Stepanek Expires 30 August 2025 [Page 62]
Internet-Draft JSCalendar February 2025
2.3.31. ORGANIZER
The ORGANIZER property [RFC5545] (Section 3.8.4.3) in a VEVENT or
VTODO component converts to the "replyTo" property [RFC8984]
(Section 4.4.4) of the Event or Task object. In addition, it
converts to a Participant object in the "participants" property
[RFC8984] (Section 4.4.6).
If the CAL-ADDRESS property value is in the "mailto" scheme, then it
converts to the "imip" method in the "replyTo" property, otherwise it
converts to the "other" method. The property value also converts to
the "calendarAddress" property of the Participant object. The
"owner" role is set in the "roles" property of the Participant. In
contrast to the ATTENDEE property, the property value does not
convert to the "sendTo" property of the Participant object.
An ORGANIZER property, an ATTENDEE property, and a PARTICIPANT
component in the same iCalendar component all convert to the same
Participant object, if their converted calendarAddress property
values are equal after URI normalization [RFC3986] (Section 6). How
to deal with conflicting property values is implementation-specific.
Implementations MAY preserve arbitrary parameters of the ORGANIZER
property, in which case they MUST convert these to the "replyTo"
entry in the "convertedProperties" property of the Event or Task
object's "iCalComponent" property (Section 5.1.2).
The ORGANIZER property parameters convert as follows:
Stepanek Expires 30 August 2025 [Page 63]
Internet-Draft JSCalendar February 2025
+=====================+===============+===================+======+
| Name | Reference | Property | Note |
+=====================+===============+===================+======+
| CN | [RFC5545], | name | |
| | Section 3.2.2 | | |
+---------------------+---------------+-------------------+------+
| DIR | [RFC5545], | links | |
| | Section 3.2.6 | | |
+---------------------+---------------+-------------------+------+
| SCHEDULE-AGENT | [RFC6638], | scheduleAgent | |
| | Section 7.1 | (Section 5.1.5) | |
+---------------------+---------------+-------------------+------+
| SCHEDULE-FORCE-SEND | [RFC6638], | scheduleForceSend | |
| | Section 7.2 | (Section 5.1.6) | |
+---------------------+---------------+-------------------+------+
| SCHEDULE-STATUS | [RFC6638], | scheduleStatus | |
| | Section 7.3 | (Section 5.1.7) | |
+---------------------+---------------+-------------------+------+
Table 23: Parameters of the ORGANIZER property
The following examples illustrate how to convert the ORGANIZER
property:
ORGANIZER:mailto:foo@example.com
ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION:mailto:bar@example.com
"replyTo": {
"imip": "mailto:foo@example.com"
},
"participants": {
"a": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"roles": {
"owner": true
}
},
"b": {
"@type": "Participant",
"calendarAddress": "mailto:bar@example.com",
"...": ""
}
}
Figure 64: Converting an ORGANIZER property
Stepanek Expires 30 August 2025 [Page 64]
Internet-Draft JSCalendar February 2025
ORGANIZER:mailto:foo@example.com
ATTENDEE;RSVP=FALSE;PARTSTAT=ACCEPTED;CN="Jane Doe":mailto:foo@example.com
...
ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION:mailto:bar@example.com
"replyTo": {
"imip": "mailto:foo@example.com"
},
"participants": {
"a": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"name": "Jane Doe",
"participationStatus": "accepted",
"roles": {
"attendee": true,
"owner": true
},
"sendTo": {
"imip": "mailto:foo@example.com"
}
},
"b": {
"@type": "Participant",
"calendarAddress": "mailto:bar@example.com",
"...": ""
}
}
Figure 65: Converting an ORGANIZER and ATTENDEE property
2.3.32. PARTICIPANT-TYPE
The PARTICIPANT-TYPE property [RFC9073] (Section 6.2) in a
PARTICIPANT component converts to the "roles" property [RFC8984]
(Section 4.4.6) of the Participant object.
The property value converts in lowercase.
The following example illustrates how to convert the PARTICIPANT-TYPE
property:
BEGIN:PARTICIPANT
PARTICIPANT-TYPE:CONTACT
CALENDAR-ADDRESS:mailto:foo@example.com
...
END:PARTICIPANT
ATTENDEE;RSVP=YES;PARTSTAT=NEEDS-ACTION:mailto:foo@example.com
ORGANIZER:mailto:bar@example.com
Stepanek Expires 30 August 2025 [Page 65]
Internet-Draft JSCalendar February 2025
"participants": {
"a": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"roles": {
"attendee": true,
"contact": true
},
"...": ""
},
"b": {
"@type": "Participant",
"calendarAddress": "mailto:bar@example.com",
"...": ""
}
}
Figure 66: Converting the PARTICIPANT-TYPE property
2.3.33. PERCENT-COMPLETE
The PERCENT-COMPLETE property [RFC5545] (Section 3.8.1.8) in a VTODO
component converts to the "percentComplete" property [RFC8984]
(Section 5.2.4) of the Task object.
A Task object which has the "method" property set might represent an
iTIP reply of one of the participants in the object. In this case
the value of the "percentComplete" property in the Task also converts
to the percentComplete [RFC8984] (Section 4.4.6) of that Participant
object, which represents the participant from which the iTIP reply
originated.
The PERCENT-COMPLETE property in a PARTICIPANT component converts to
the "percentComplete" property [RFC8984] (Section 4.4.6) of the
Participant object.
The following examples illustrate how to convert the PERCENT-COMPLETE
property:
BEGIN:VCALENDAR
METHOD:REPLY
BEGIN:VTODO
PERCENT-COMPLETE:53
...
Stepanek Expires 30 August 2025 [Page 66]
Internet-Draft JSCalendar February 2025
{
"@type": "Group",
"entries": [
{
"@type": "Task",
"method": "reply",
"percentComplete": 53,
"...": ""
}
],
"...": ""
}
Figure 67: Converting the PERCENT-COMPLETE property in a VEVENT
component
BEGIN:VTODO
BEGIN:PARTICIPANT
PERCENT-COMPLETE:78
...
"@type": "Task",
"participants": {
"f4": {
"@type": "Participant",
"percentComplete": 78,
"...": ""
}
}
Figure 68: Converting the PERCENT-COMPLETE property in a
PARTICIPANT component
2.3.34. PRIORITY
The PRIORITY property [RFC5545] (Section 3.8.1.9) in a VEVENT or
VTODO component converts to the "priority" property [RFC8984]
(Section 4.4.1) of the Event or Task object.
The following example illustrates how to convert the PRIORITY
property:
PRIORITY:3
"priority": 3
Figure 69: Converting the PRIORITY property
Stepanek Expires 30 August 2025 [Page 67]
Internet-Draft JSCalendar February 2025
2.3.35. PRODID
The PRODID property [RFC5545] (Section 3.7.3) in a VCALENDAR
component converts to the "prodId" property [RFC8984] (Section 4.1.4)
of the Group object, and to the "prodId" property of all Event or
Task objects that are listed in the Group object's entries property.
The property value converts verbatim.
The following example illustrates how to convert the PRODID property:
BEGIN:VCALENDAR
PRODID:-//BAZ//bam//EN
BEGIN:VEVENT
...
{
"@type": "Group",
"prodId": "-//BAZ//bam//EN",
"entries": [
{
"@type": "Event",
"prodId": "-//BAZ//bam//EN",
"...": ""
}
],
"...": ""
}
Figure 70: Converting the PRODID property
2.3.36. RDATE
A RDATE property [RFC5545] (Section 3.8.5.2) of type DATE or DATE-
TIME in a VEVENT, VTODO, DAYLIGHT or STANDARD component converts to a
PatchObject value [RFC8984] (Section 1.4.9). The converted object is
set in the "recurrenceOverrides" property of the Event, Task, or
TimeZoneRule object.
The property value converts to the key in the "recurrenceOverrides"
property value. See Section 2.1.5 how to convert DATE and DATE-TIME
values. For Event Task objects, the date-time MUST be relative to
the timezone identified by the "timeZone" property, for TimeZoneRule
objects the date-time is relative to the UTC offset specified in the
"offsetFrom" property. The PatchObject value MUST be an empty JSON
object.
Stepanek Expires 30 August 2025 [Page 68]
Internet-Draft JSCalendar February 2025
An RDATE property of value type PERIOD does not convert to a standard
JSCalendar element. Implementations MAY convert it to the
"iCalComponent" property (Section 5.1.2) of the Event, Task, or
TimeZoneRule object.
The following example illustrates how to convert the RDATE property:
DTSTART:20230101T130000Z
RRULE:FREQ=MONTHLY
RDATE:20230805T170000Z
"start": "2023-01-01T13:00:00",
"timeZone": "Etc/UTC",
"recurrenceRules": [
{
"@type": "RecurrenceRule",
"frequency": "monthly"
}
],
"recurrenceOverrides": {
"2023-08-05T17:00:00": {}
}
Figure 71: Converting the RDATE property
2.3.37. RECURRENCE-ID
The RECURRENCE-ID property [RFC5545] (Section 3.8.4.4) in a VEVENT or
VTODO component converts to the "recurrenceId" property [RFC8984]
(Section 4.3.1) of the Event or Task object. The timezone identifier
(Section 2.1.4) of the RECURRENCE-ID property converts to the
"recurrenceIdTimeZone" property.
See Section 2.1.5 how to convert DATE and DATE-TIME values.
The RANGE parameter [RFC5545] (Section 3.2.13) does not convert to a
standard JSCalendar element. Implementations MAY preserve it in the
iCalComponent (Section 5.1.2) property.
See Section 2.1.2 for further requirements and examples.
2.3.38. RELATED-TO
The RELATED-TO property [RFC5545] (Section 3.8.4.5) in a VEVENT,
VTODO, or VALARM component converts to a Relation object [RFC8984]
(Section 1.4.10). The converted object is set in the "relatedTo"
property of the Event or Task object [RFC8984] (Section 4.1.3), or
the Alert object [RFC8984] (Section 4.5.2).
Stepanek Expires 30 August 2025 [Page 69]
Internet-Draft JSCalendar February 2025
The property value in a VEVENT or VTODO converts as-is to the key of
the Relation object in the "relatedTo" property. The property value
in a VALARM converts to the same value as the key of that Alert
object, which represents the VALARM component having that property
value set in the UID property. Any RELTYPE parameters convert to the
"relations" property in that Relation object. The parameter values
convert in lowercase.
The GAP parameter [RFC9253] (Section 6.2) does not convert to a
standard JSCalendar element. Implementations MAY convert it to the
"iCalProperty" property (Section 5.1.3) of the Relation object.
The following examples illustrate how to convert the RELATED-TO
property:
BEGIN:VEVENT
RELATED-TO;RELTYPE=PARENT:4E05861C-A0C9-46AC-9A66-760FC1E0E167
RELATED-TO:4120A9B1-1133-4AC0-9185-C4C8396048ED
...
"relatedTo": {
"4E05861C-A0C9-46AC-9A66-760FC1E0E167": {
"@type": "Relation",
"relation": {
"parent": true
}
},
"4120A9B1-1133-4AC0-9185-C4C8396048ED": {
"@type": "Relation"
}
}
Figure 72: Converting the RELATED-TO property in a VEVENT
Stepanek Expires 30 August 2025 [Page 70]
Internet-Draft JSCalendar February 2025
BEGIN:VEVENT
...
BEGIN:VALARM
UID:8297C37D-BA2D-4476-91AE-C1EAA364F8E1
TRIGGER:-PT15M
DESCRIPTION:Event reminder
ACTION:DISPLAY
ACKNOWLEDGED:20210302T151514Z
END:VALARM
...
BEGIN:VALARM
UID:DE7B5C34-83FF-47FE-BE9E-FF41AE6DD097
TRIGGER;VALUE=DATE-TIME:20210302T152000Z
RELATED-TO;RELTYPE=SNOOZE:8297C37D-BA2D-4476-91AE-C1EAA364F8E1
DESCRIPTION:Event reminder
ACTION:DISPLAY
END:VALARM
...
"alerts": {
"1": {
"@type": "Alert",
"trigger": {
"@type": "OffsetTrigger",
"offset": "-PT15M"
},
"...": ""
},
"2": {
"@type": "Alert",
"trigger": {
"@type": "AbsoluteTrigger",
"when": "2021-03-02T15:20:00Z"
},
"relatedTo": {
"1": {
"@type": "Relation",
"relation": {
"snooze": true
}
}
},
"...": ""
}
}
Figure 73: Converting the RELATED-TO property in a VALARM
Stepanek Expires 30 August 2025 [Page 71]
Internet-Draft JSCalendar February 2025
2.3.39. REQUEST-STATUS
The REQUEST-STATUS property [RFC5545] (Section 3.8.8.3) in a VEVENT
or VTODO component converts to the "requestStatus" property [RFC8984]
(Section 4.4.7) of the Event or Task object.
The following example illustrates how to convert the REQUEST-STATUS
property:
2.3.39.1. Example: Converting the REQUEST-STATUS property
REQUEST-STATUS:2.0;Success
"requestStatus": "2.0;Success"
Figure 74: Converting the REQUEST-STATUS property
2.3.40. RRULE
The RRULE property [RFC5545] (Section 3.8.5.3) in a VEVENT, VTODO,
DAYLIGHT or STANDARD component converts to a RecurrenceRule object
[RFC8984] (Section 4.3.3). The converted object is set in the
"recurrenceRules" property of the Event, Task, or TimeZoneRule
object.
The RECUR value data type converts to a RecurrenceRule object as
follows:
Stepanek Expires 30 August 2025 [Page 72]
Internet-Draft JSCalendar February 2025
+==================+=========================+
| RRULE field | RecurrenceRule property |
+==================+=========================+
| FREQ | frequency |
+------------------+-------------------------+
| UNTIL | until |
+------------------+-------------------------+
| COUNT | count |
+------------------+-------------------------+
| INTERVAL | interval |
+------------------+-------------------------+
| BYSECOND | bySecond |
+------------------+-------------------------+
| BYMINUTE | byMinute |
+------------------+-------------------------+
| BYHOUR | byHour |
+------------------+-------------------------+
| BYDAY | byDay |
+------------------+-------------------------+
| BYMONTHDAY | byMonthDay |
+------------------+-------------------------+
| BYYEARDAY | byYearDay |
+------------------+-------------------------+
| BYWEEKNO | byWeekNo |
+------------------+-------------------------+
| BYMONTH | byMonth |
+------------------+-------------------------+
| BYSETPOS | bySetPosition |
+------------------+-------------------------+
| WKST | firstDayOfWeek |
+------------------+-------------------------+
| RSCALE [RFC7529] | rscale |
+------------------+-------------------------+
| SKIP [RFC7529] | skip |
+------------------+-------------------------+
Table 24: Converting the RECUR value type
to a RecurrenceRule object
The string values of the FREQ, WKST, RSCALE convert to lowercase.
The UNTIL part in a VEVENT or VTODO converts to a LocalDateTime value
relative to the timezone of the Event or Task, or to floating time
for the TimeZoneRule object.
The following example illustrates how to convert the RRULE property:
Stepanek Expires 30 August 2025 [Page 73]
Internet-Draft JSCalendar February 2025
DTSTART;TZID=Europe/Berlin:20240101T010000
RRULE:FREQ=YEARLY
;INTERVAL=2
;BYMONTH=1
;BYDAY=SU
;BYHOUR=8,9
;BYMINUTE=30
;UNTIL=20240930T120000Z
"recurrenceRules": [
{
"@type": "RecurrenceRule",
"frequency": "yearly",
"interval": 2,
"byMonth": [
"1"
],
"byDay": [
{
"@type": "NDay",
"day": "su"
}
],
"byHour": [
8,
9
],
"byMinute": [
30
],
"until": "2024-09-30T14:00:00"
}
],
"start": "2024-01-01T01:00:00",
"timeZone": "Europe/Berlin"
Figure 75: Example for converting the RRULE property
2.3.41. SEQUENCE
The SEQUENCE property [RFC5545] (Section 3.8.7.4) in a VEVENT or
VTODO component converts to the "sequence" property [RFC8984]
(Section 4.1.7) of the Event or Task object. The SEQUENCE property
in a PARTICIPANT component converts to the "scheduleSequence"
property [RFC8984] (Section 4.4.6) of the Participant object.
The following example illustrates how to convert the SEQUENCE
property:
Stepanek Expires 30 August 2025 [Page 74]
Internet-Draft JSCalendar February 2025
SEQUENCE:3
"sequence": 3
Figure 76: Example for converting the SEQUENCE property
2.3.42. STATUS
The STATUS property [RFC5545] (Section 3.8.1.11) in a VEVENT
component converts to the "status" property [RFC8984] (Section 5.1.3)
of the Event object. The STATUS property in a VTODO component
converts to the "progress" property [RFC8984] (Section 5.2.5) of the
Task object.
The property value converts in lowercase.
The following examples illustrate how to convert the STATUS property:
STATUS:TENTATIVE
"status": "tentative"
Figure 77: Example for converting the STATUS property in a VEVENT
component
BEGIN:VTODO
STATUS:IN-PROCESS
...
{
"@type": "Task",
"progress": "in-process",
"...": ""
}
Figure 78: Example for converting the STATUS property in a VTODO
component
2.3.43. SOURCE
The SOURCE property [RFC7986] (Section 5.8) in a VCALENDAR component
converts to the "source" property [RFC8984] (Section 5.3.2) of the
Group object.
The following example illustrates how to convert the SOURCE property:
BEGIN:VCALENDAR
SOURCE;VALUE=URI:https://example.com/holidays.ics
...
Stepanek Expires 30 August 2025 [Page 75]
Internet-Draft JSCalendar February 2025
{
"@type": "Group",
"source": "https://example.com/holidays.ics",
"...": ""
}
Figure 79: Example for converting the SOURCE property
2.3.44. STRUCTURED-DATA
A STRUCTURED-DATA property [RFC9073] (Section 6.6) of type URI or
BINARY in a VEVENT, VTODO, VCALENDAR, VRESOURCE, PARTICIPANT, or
VLOCATION component converts to a Link object [RFC8984]
(Section 1.4.11). The converted object is set in the "links"
property of the Event, Task, Group, Participant, or Location object.
The property value converts to the "href" property of the Link
object. A value of type URI converts as-is. See Section 2.3.3 how
to convert a BINARY value.
Its parameters convert as follows:
+=========+==========================+=============+======+
| Name | Reference | Property | Note |
+=========+==========================+=============+======+
| FMTTYPE | [RFC5545], Section 3.2.8 | contentType | |
+---------+--------------------------+-------------+------+
Table 25: Parameters of the STRUCTURED-DATA property
Implementations MAY preserve the fact that the Link object got
converted from a STRUCTURED-DATA property. To do so, they MUST set
the iCalProperty (Section 5.1.3) on the Link object.
The following example illustrates how to convert the STRUCTURED-DATA
property:
STRUCTURED-DATA;FMTTYPE=application/ld+json;
SCHEMA="https://schema.org/FlightReservation";
ENCODING=BASE64;VALUE=BINARY:InRydW5jYXRlZC4uLiIK
Stepanek Expires 30 August 2025 [Page 76]
Internet-Draft JSCalendar February 2025
"links": {
"l1": {
"@type": "Link",
"contentType": "application/ld+json",
"href": "data:application/ld+json;base64,InRydW5jYXRlZC4uLiIK",
"iCalProperty": {
"@type": "ICalProperty",
"name": "structured-data",
"parameters": {
"schema": "https://schema.org/FlightReservation"
},
"valueType": "binary"
}
}
}
Figure 80: Converting the STRUCTURED-DATA property
2.3.45. STYLED-DESCRIPTION
The STYLED-DESCRIPTION property [RFC9073] (Section 6.5) in a VEVENT
or VTODO component converts to the "description" property [RFC8984]
(Section 4.2.2) of the Event or Task object under the following
conditions:
* The property value type MUST be TEXT.
* The FMTTYPE parameter either MUST NOT be set, or its value MUST be
a media type [RFC6838] with top-level type "text".
* Its DERIVED parameter value MUST NOT be TRUE. If the value is
TRUE, then another property in the same component is expected to
contain its description.
If these conditions are not met, implementations MAY preserve the
property in the "iCalComponent" property (Section 5.1.2).
Its parameters convert as follows:
+=========+===============+========================+======+
| Name | Reference | Property | Note |
+=========+===============+========================+======+
| FMTTYPE | [RFC5545], | descriptionContentType | |
| | Section 3.2.8 | | |
+---------+---------------+------------------------+------+
Table 26: Parameters of the STYLED-DESCRIPTION property
Stepanek Expires 30 August 2025 [Page 77]
Internet-Draft JSCalendar February 2025
The following example illustrates how to convert the STYLED-
DESCRIPTION property:
STYLED-DESCRIPTION;VALUE=TEXT;FMTTYPE=text/html:
<!DOCTYPE html><html><body>hello\,<b>world</b></body></html>
"description": "<!DOCTYPE html><html><body>hello,<b>world</b></body></html>",
"descriptionContentType": "text/html"
Figure 81: Converting the STYLED-DESCRIPTION property
2.3.46. SUMMARY
The SUMMARY property [RFC5545] (Section 3.8.1.12) in a VEVENT or
VTODO component converts to the "title" property [RFC8984]
(Section 4.2.1) of the Event or Task object.
The SUMMARY property [RFC5545] (Section 3.8.1.12) in a PARTICIPANT
component converts to the "name" property [RFC8984] (Section 4.2.5).
The following examples illustrate how to convert the SUMMARY
property:
SUMMARY:Birthday Party
"title": "Birthday Party"
Figure 82: Converting the SUMMARY property in a VEVENT
BEGIN:VEVENT
BEGIN:PARTICIPANT
SUMMARY:John
...
"participants": {
"1": {
"@type": "Participant",
"name": "John",
"...": ""
}
}
Figure 83: Converting the SUMMARY property in a PARTICIPANT
2.3.47. TRANSP
The TRANSP property [RFC5545] (Section 3.8.2.7) in a VEVENT or VTODO
component converts to the "freeBusyStatus" property [RFC8984]
(Section 4.4.2) of the Event or Task object.
Its values convert as follows:
Stepanek Expires 30 August 2025 [Page 78]
Internet-Draft JSCalendar February 2025
+=================+==================+
| iCalendar value | JSCalendar value |
+=================+==================+
| OPAQUE | busy |
+-----------------+------------------+
| TRANSPARENT | free |
+-----------------+------------------+
Table 27: Values of the TRANSP
property
The following example illustrates how to convert the TRANSP property:
TRANSP:TRANSPARENT
"freeBusyStatus": "free"
Figure 84: Converting the TRANSP property
2.3.48. TRIGGER
The TRIGGER property [RFC5545] (Section 3.8.6.3) in a VALARM
component converts to either an AbsoluteTrigger or OffsetTrigger
object. The converted object is set in the "trigger" property
[RFC8984] (Section 4.5.2) of the Alert object.
A property of value type DURATION converts an OffsetTrigger object.
The property value converts to its offset property. A value of type
DATE-TIME converts to an AbsoluteTrigger object. The property value
converts to its when property.
Its parameters convert as follows:
+=========+===========================+============+================+
| Name | Reference | Property | Note |
+=========+===========================+============+================+
| RELATED | [RFC5545], | relativeTo | If |
| | Section 3.2.14 | | VALUE=DURATION |
+---------+---------------------------+------------+----------------+
Table 28: Parameters of the TRIGGER property
The following examples illustrate how to convert the TRIGGER
property:
Stepanek Expires 30 August 2025 [Page 79]
Internet-Draft JSCalendar February 2025
BEGIN:VEVENT
...
BEGIN:VALARM
TRIGGER;RELATED=END:PT5M
...
"alerts": {
"2d": {
"@type": "Alert",
"trigger": {
"@type": "OffsetTrigger",
"offset": "PT5M",
"relativeTo": "end"
},
"...": ""
}
}
Figure 85: Converting the TRIGGER property to an OffsetTrigger
BEGIN:VEVENT
...
BEGIN:VALARM
TRIGGER;VALUE=DATE-TIME:20250302T010203Z
...
"alerts": {
"14": {
"@type": "Alert",
"trigger": {
"@type": "AbsoluteTrigger",
"when": "2025-03-02T01:02:03Z"
},
"...": ""
}
}
Figure 86: Converting the TRIGGER property to an AbsoluteTrigger
2.3.49. TZID
The TZID property [RFC5545] (Section 3.8.3.1) in a VTIMEZONE
component converts to the "tzId" property [RFC8984] (Section 4.7.2)
of the TimeZone object.
See Figure 14 for an example.
Stepanek Expires 30 August 2025 [Page 80]
Internet-Draft JSCalendar February 2025
2.3.50. TZID-ALIAS-OF
The TZID-ALIAS-OF property [RFC7808] (Section 7.2) in a VTIMEZONE
component converts to an entry in the "aliases" property [RFC8984]
(Section 4.7.2) of the TimeZone object.
See Figure 14 for an example.
2.3.51. TZNAME
The TZNAME property [RFC5545] (Section 3.8.3.2) in a DAYLIGHT or
STANDARD component converts to an entry in the "names" property
[RFC8984] (Section 4.7.2) of the TimeZoneRule object.
See Figure 14 for an example.
2.3.52. TZOFFSETFROM
The TZOFFSETFROM property [RFC5545] (Section 3.8.3.3) in a DAYLIGHT
or STANDARD component converts to the "offsetFrom" property [RFC8984]
(Section 4.7.2) of the TimeZoneRule object.
See Figure 14 for an example.
2.3.53. TZOFFSETTO
The TZOFFSETTO property [RFC5545] (Section 3.8.3.4) in a DAYLIGHT or
STANDARD component converts to the "offsetTo" property [RFC8984]
(Section 4.7.2) of the TimeZoneRule object.
See Figure 14 for an example.
2.3.54. TZUNTIL
The TZUNTIL property [RFC7808] (Section 7.1) in a VTIMEZONE component
converts to the "validUntil" property [RFC8984] (Section 4.7.2) of
the TimeZone object.
See Section 2.1.5 how to convert DATE and DATE-TIME values.
See Figure 14 for an example.
2.3.55. TZURL
The TZURL property [RFC5545] (Section 3.8.3.5) in a VTIMEZONE
component converts to the "url" property [RFC8984] (Section 4.7.2) of
the TimeZone object.
Stepanek Expires 30 August 2025 [Page 81]
Internet-Draft JSCalendar February 2025
See Figure 14 for an example.
2.3.56. UID
The UID property [RFC5545] (Section 3.8.4.7) in a VEVENT, VTODO, or
VCALENDAR component converts to the "uid" property [RFC8984]
(Section 4.1.2) of the Event, Task, or Group object.
The following example illustrates how to convert the UID property:
UID:5ACEA86F-40CF-47EE-9CCA-7C85588A589F
"uid": "5ACEA86F-40CF-47EE-9CCA-7C85588A589F"
Figure 87: Converting the UID property
2.3.57. URL
The URL property [RFC5545] (Section 3.8.4.6) in a VEVENT, VTODO,
VCALENDAR, or PARTICIPANT component converts to a Link object
[RFC8984] (Section 1.4.11). The converted object is set in the
"links" property of the Event, Task, Group, or Participant object.
The property value converts to the "href" property of the Link
object.
Implementations MAY preserve the fact that the Link object got
converted from a URL property. To do so, they MUST set the
iCalProperty (Section 5.1.3) on the Link object.
The following example illustrates how to convert the URL property:
URL:https://example.com/calendar/birthdays.ics
"links": {
"3": {
"@type": "Link",
"href": "https://example.com/calendar/birthdays.ics",
"iCalProperty": {
"@type": "ICalProperty",
"name": "url"
}
}
}
Figure 88: Converting the IMAGE property
Stepanek Expires 30 August 2025 [Page 82]
Internet-Draft JSCalendar February 2025
3. Converting JSCalendar to iCalendar
3.1. Alert
The Alert object [RFC8984] (Section 4.5.2) converts to a VALARM
component (Section 2.2.2).
Its properties convert as follows:
+==============+===============+==============+===================+
| Name | Reference | Property (or | See |
| | | other) | |
+==============+===============+==============+===================+
| acknowledged | [RFC8984], | ACKNOWLEDGED | Section 2.3.1 |
| | Section 4.5.2 | | |
+--------------+---------------+--------------+-------------------+
| action | [RFC8984], | ACTION | Section 2.3.2 |
| | Section 4.5.2 | | |
+--------------+---------------+--------------+-------------------+
| relatedTo | [RFC8984], | RELATED-TO | Section 2.3.38, |
| | Section 4.1.3 | | and remarks below |
+--------------+---------------+--------------+-------------------+
| trigger | [RFC8984], | TRIGGER | Section 2.3.48 |
| | Section 4.5.2 | | |
+--------------+---------------+--------------+-------------------+
Table 29: Properties of the Alert object
Remarks:
* The value of the RELATED-TO property is the UID property value of
that VALARM component, to which the related Alert object converts
to. Consequently, the UID property for such a VALARM MUST be set,
otherwise the UID property SHOULD be set.
3.2. Event and Task
The Event object [RFC8984] (Section 2.1) converts to a VEVENT
component (Section 2.2.3), the Task object [RFC8984] (Section 2.2)
converts to a VTODO component (Section 2.2.7).
The following table defines how to convert properties that are common
to both the Event and Task object types. Table 31 and Table 32 later
in this section define how to convert properties specific to either
Event or Task objects.
Stepanek Expires 30 August 2025 [Page 83]
Internet-Draft JSCalendar February 2025
+=======================+==========+============+===================+
|Name |Reference |Property (or|See |
| | |other) | |
+=======================+==========+============+===================+
|alerts |[RFC8984],|VALARM |Alert object |
| |Section |(component) |(Section 3.1) |
| |4.5.2 | | |
+-----------------------+----------+------------+-------------------+
|categories |[RFC8984],|CONCEPT |Section 2.3.11 |
| |Section | | |
| |4.2.10 | | |
+-----------------------+----------+------------+-------------------+
|color |[RFC8984],|COLOR |Section 2.3.8 |
| |Section | | |
| |4.2.11 | | |
+-----------------------+----------+------------+-------------------+
|created |[RFC8984],|CREATED |Section 2.3.13 |
| |Section | | |
| |4.1.5 | | |
+-----------------------+----------+------------+-------------------+
|description |[RFC8984],|DESCRIPTION,|Section 2.3.14, |
| |Section |or STYLED- |Section 2.3.45, and|
| |4.2.2 |DESCRIPTION |remarks below |
+-----------------------+----------+------------+-------------------+
|descriptionContentType |[RFC8984],|FMTTYPE |Section 2.3.45, and|
| |Section |(parameter) |remarks below |
| |4.2.3 |of STYLED- | |
| | |DESCRIPTION | |
+-----------------------+----------+------------+-------------------+
|excluded |[RFC8984],| |Section 2.3.21, and|
| |Section | |remarks about |
| |4.3.6 | |recurrenceOverrides|
| | | |below |
+-----------------------+----------+------------+-------------------+
|excludedRecurrenceRules|[RFC8984],|EXRULE |Section 2.3.22 |
| |Section | | |
| |4.3.4 | | |
+-----------------------+----------+------------+-------------------+
|freeBusyStatus |[RFC8984],|TRANSP |Section 2.3.47 |
| |Section | | |
| |4.4.2 | | |
+-----------------------+----------+------------+-------------------+
|keywords |[RFC8984],|CATEGORIES |Section 2.3.6 |
| |Section | | |
| |4.2.9 | | |
+-----------------------+----------+------------+-------------------+
|links |[RFC8984],|ATTACH, or |Link object |
| |Section |other |(Section 3.4) |
Stepanek Expires 30 August 2025 [Page 84]
Internet-Draft JSCalendar February 2025
| |4.2.7 | | |
+-----------------------+----------+------------+-------------------+
|locations |[RFC8984],|LOCATION, |Location object |
| |Section |GEO, or |(Section 3.5) |
| |4.2.5 |VLOCATION | |
| | |(component) | |
+-----------------------+----------+------------+-------------------+
|method |[RFC8984],|METHOD of |Section 2.3.29, and|
| |Section |iCalendar |Group object |
| |4.1.8 |object |(Section 3.3) |
+-----------------------+----------+------------+-------------------+
|participants |[RFC8984],|ATTENDEE, or|Participant object |
| |Section |PARTICIPANT |(Section 3.6) |
| |4.4.6 |(component) | |
+-----------------------+----------+------------+-------------------+
|priority |[RFC8984],|PRIORITY |Section 2.3.34 |
| |Section | | |
| |4.4.1 | | |
+-----------------------+----------+------------+-------------------+
|privacy |[RFC8984],|CLASS |Section 2.3.7 |
| |Section | | |
| |4.4.3 | | |
+-----------------------+----------+------------+-------------------+
|prodId |[RFC8984],|PRODID of |Section 2.3.35, and|
| |Section |iCalendar |Group object |
| |4.1.4 |object |(Section 3.3) |
+-----------------------+----------+------------+-------------------+
|recurrenceId |[RFC8984],|RECURRENCE- |Section 2.3.37 |
| |Section |ID | |
| |4.3.1 | | |
+-----------------------+----------+------------+-------------------+
|recurrenceIdTimeZone |[RFC8984],|TZID |Section 2.3.37 |
| |Section |(parameter) | |
| |4.3.2 |of | |
| | |RECURRENCE- | |
| | |ID | |
+-----------------------+----------+------------+-------------------+
|recurrenceOverrides |[RFC8984],|RDATE, |Section 2.1.2, and |
| |Section |EXDATE or |remarks below |
| |4.3.5 |recurrence | |
| | |override | |
| | |component | |
+-----------------------+----------+------------+-------------------+
|recurrenceRules |[RFC8984],|RRULE |Section 2.3.40 |
| |Section | | |
| |4.3.3 | | |
+-----------------------+----------+------------+-------------------+
|relatedTo |[RFC8984],|RELATED-TO |Section 2.3.38 |
Stepanek Expires 30 August 2025 [Page 85]
Internet-Draft JSCalendar February 2025
| |Section | | |
| |4.1.3 | | |
+-----------------------+----------+------------+-------------------+
|replyTo |[RFC8984],|ORGANIZER |Section 2.3.31, and|
| |Section | |remarks below |
| |4.4.4 | | |
+-----------------------+----------+------------+-------------------+
|requestStatus |[RFC8984],|REQUEST- |Section 2.3.39 |
| |Section |STATUS | |
| |4.4.7 | | |
+-----------------------+----------+------------+-------------------+
|sequence |[RFC8984],|SEQUENCE |Section 2.3.41 |
| |Section | | |
| |4.1.7 | | |
+-----------------------+----------+------------+-------------------+
|start |[RFC8984],|DTSTART |Section 2.3.17 |
| |Section | | |
| |4.7.2 | | |
+-----------------------+----------+------------+-------------------+
|timeZone |[RFC8984],|TZID |Section 2.3.17, |
| |Section |(parameter) |Section 2.3.18 |
| |4.7.1 |of DTSTART | |
| | |and DUE | |
+-----------------------+----------+------------+-------------------+
|timeZones |[RFC8984],|VTIMEZONE |TimeZone object |
| |Section |(component) |(Section 3.7) |
| |4.7.2 |of iCalendar| |
| | |object | |
+-----------------------+----------+------------+-------------------+
|title |[RFC8984],|SUMMARY |Section 2.3.46 |
| |Section | | |
| |4.2.1 | | |
+-----------------------+----------+------------+-------------------+
|uid |[RFC8984],|UID |Section 2.3.56 |
| |Section | | |
| |4.1.2 | | |
+-----------------------+----------+------------+-------------------+
|updated |[RFC8984],|DTSTAMP, and|Section 2.3.16, |
| |Section |LAST- |Section 2.3.25 |
| |4.1.6 |MODIFIED | |
+-----------------------+----------+------------+-------------------+
|virtualLocations |[RFC8984],|CONFERENCE |Section 2.3.12 |
| |Section | | |
| |4.2.6 | | |
+-----------------------+----------+------------+-------------------+
Table 30: Properties of the Event and Task object
Stepanek Expires 30 August 2025 [Page 86]
Internet-Draft JSCalendar February 2025
Remarks:
* The descriptionContentType property value determines if the
"description" property converts to the DESCRIPTION or STYLED-
DESCRIPTION property. A description of content type "text/plain"
converts to the DESCRIPTION property. Any other description
converts to a STYLED-DESCRIPTION; in this case, a plain text
version of the rich-text description SHOULD be set in the
DESCRIPTION property and its DERIVED parameter MUST be set to
"TRUE". How to derive plain text from rich-text is
implementation-specific.
* The entries in the "recurrenceOverrides" property convert
depending on the contents of the PatchObject value. A PatchObject
that sets the "excluded" property to "true" converts to an EXDATE
property for the date-time of that recurrence instance. An empty
PatchObject converts to an RDATE property. Any other PatchObject
converts to a recurrence override component in the embedding
VCALENDAR component.
The replyTo property converts to the ORGANIZER property as follows:
* If the "replyTo" property value only defines a single scheduling
method then the URI value of that method converts to the ORGANIZER
property value.
* If the "replyTo" property defines multiple scheduling methods, and
a Participant object with a calendarAddress property value
matching one of the replyTo URIs exists in the same Event or Task,
then the URI matching the "calendarAddress" property converts to
the ORGANIZER property value. Otherwise, choosing the ORGANIZER
property value is implementation-specific.
* TBD - how to preserve multiple replyTo methods?
* TBD - how to preserve method name of converted replyTo value?
Properties specific to the Event object type convert to iCalendar
properties as follows:
Stepanek Expires 30 August 2025 [Page 87]
Internet-Draft JSCalendar February 2025
+==========+===============+=====================+=================+
| Name | Reference | Property (or other) | See |
+==========+===============+=====================+=================+
| duration | [RFC8984], | DURATION, or DTEND | Section 2.3.19, |
| | Section 5.1.2 | | Section 2.3.15 |
+----------+---------------+---------------------+-----------------+
| status | [RFC8984], | STATUS | Section 2.3.42 |
| | Section 5.1.3 | | |
+----------+---------------+---------------------+-----------------+
Table 31: Properties of the Event object
Properties specific to the Task object type convert to iCalendar
properties as follows:
+===================+===============+=====================+=========+
| Name | Reference | Property (or | See |
| | | other) | |
+===================+===============+=====================+=========+
| due | [RFC8984], | DUE | Section |
| | Section 5.2.1 | | 2.3.18 |
+-------------------+---------------+---------------------+---------+
| estimatedDuration | [RFC8984], | ESTIMATED-DURATION | Section |
| | Section 5.2.3 | | 2.3.20 |
+-------------------+---------------+---------------------+---------+
| percentComplete | [RFC8984], | PERCENT-COMPLETE | Section |
| | Section 5.2.4 | | 2.3.33 |
+-------------------+---------------+---------------------+---------+
| progress | [RFC8984], | STATUS | Section |
| | Section 5.2.5 | | 2.3.42 |
+-------------------+---------------+---------------------+---------+
| progressUpdated | [RFC8984], | TBD | |
| | Section 5.2.6 | | |
+-------------------+---------------+---------------------+---------+
Table 32: Properties of the Task object
3.3. Group
The Group object [RFC8984] (Section 2.3) converts to a VCALENDAR
component (Section 2.1.1).
Its properties convert as follows:
Stepanek Expires 30 August 2025 [Page 88]
Internet-Draft JSCalendar February 2025
+============+============+===============+=======================+
| Name | Reference | Property (or | See |
| | | other) | |
+============+============+===============+=======================+
| categories | [RFC8984], | CONCEPT | Section 2.3.11 |
| | Section | | |
| | 4.2.10 | | |
+------------+------------+---------------+-----------------------+
| color | [RFC8984], | COLOR | Section 2.3.8 |
| | Section | | |
| | 4.2.11 | | |
+------------+------------+---------------+-----------------------+
| created | [RFC8984], | CREATED | Section 2.3.13 |
| | Section | | |
| | 4.1.5 | | |
+------------+------------+---------------+-----------------------+
| entries | [RFC8984], | VEVENT or | Event and Task object |
| | Section | VTODO | (Section 3.2), and |
| | 5.3.1 | (component) | remarks below |
+------------+------------+---------------+-----------------------+
| keywords | [RFC8984], | CATEGORIES | Section 2.3.6 |
| | Section | | |
| | 4.2.9 | | |
+------------+------------+---------------+-----------------------+
| links | [RFC8984], | ATTACH, or | Link object |
| | Section | other | (Section 3.4) |
| | 4.2.7 | | |
+------------+------------+---------------+-----------------------+
| prodId | [RFC8984], | PRODID | Section 2.3.35, and |
| | Section | | remarks below |
| | 4.1.4 | | |
+------------+------------+---------------+-----------------------+
| source | [RFC8984], | SOURCE | Section 2.3.43 |
| | Section | | |
| | 5.3.2 | | |
+------------+------------+---------------+-----------------------+
| title | [RFC8984], | NAME | Section 2.3.30 |
| | Section | | |
| | 4.2.1 | | |
+------------+------------+---------------+-----------------------+
| uid | [RFC8984], | UID | Section 2.3.56 |
| | Section | | |
| | 4.1.2 | | |
+------------+------------+---------------+-----------------------+
| updated | [RFC8984], | LAST-MODIFIED | Section 2.3.25 |
| | Section | | |
| | 4.1.6 | | |
+------------+------------+---------------+-----------------------+
Stepanek Expires 30 August 2025 [Page 89]
Internet-Draft JSCalendar February 2025
Table 33: Properties of the Group object
Remarks:
* The prodId property value of the Group object is expected to be
equal to the "prodId" property value of all the Group entries.
They all convert to the same, single PRODID property in the
VCALENDAR component. How to convert unequal prodId property
values is implementation-specific.
* The method property value in all the Group entries is expected to
be equal. How to convert entries with unequal method property
values is implementation-specific.
3.4. Link
The Link object [RFC8984] (Section 1.4.11) converts either an ATTACH
property (Section 2.3.3), an IMAGE property (Section 2.3.24), a LINK
property (Section 2.3.26), a STRUCTURED-DATA property
(Section 2.3.44), or an URL property (Section 2.3.57). Which
iCalendar property to choose is implementation-specific. As a
guideline:
* Choose IMAGE, if the "display" property is set or the "rel"
property value is "icon".
* Choose LINK, if the "rel" property is set to any other value.
* Choose URL, if only the "href" property is set and its value links
to a dynamic rendition of the calendar object.
* TBD - Choose STRUCTURED-DATA, if the "schema" property is set.
* Choose ATTACH otherwise.
The href property converts to the "iCalendar" property value. The
other Link properties convert as follows:
Stepanek Expires 30 August 2025 [Page 90]
Internet-Draft JSCalendar February 2025
+=============+================+============+===================+
| Name | Reference | Parameter | See |
| | | (or other) | |
+=============+================+============+===================+
| cid | [RFC8984], | TBD | |
| | Section 1.4.11 | | |
+-------------+----------------+------------+-------------------+
| contentType | [RFC8984], | FMTTYPE | Section 2.3.3 |
| | Section 1.4.11 | | |
+-------------+----------------+------------+-------------------+
| display | [RFC8984], | DISPLAY | Section 2.3.24 |
| | Section 1.4.11 | | |
+-------------+----------------+------------+-------------------+
| rel | [RFC8984], | LINKREL | Section 2.3.26, |
| | Section 1.4.11 | | and remarks below |
+-------------+----------------+------------+-------------------+
| size | [RFC8984], | SIZE | Section 2.3.3 |
| | Section 1.4.11 | | |
+-------------+----------------+------------+-------------------+
| title | [RFC8984], | TBD | |
| | Section 4.2.1 | | |
+-------------+----------------+------------+-------------------+
Table 34: Properties of the Link object
Remarks:
* The LINKREL parameter SHOULD be omitted if the Link object
converts to an IMAGE property and the "rel" property value is
"icon".
3.5. Location
The Location object [RFC8984] (Section 4.2.5) converts to either a
LOCATION (Section 2.3.27), GEO (Section 2.3.23), or DTEND
(Section 2.3.23) property, or it converts to a VLOCATION component
(Section 2.2.4). Which iCalendar element to choose is
implementation-specific. As a guideline:
* Choose LOCATION, if only the "title" property is set and the
iCalendar component does not already contain a LOCATION property.
The title property converts to the LOCATION property value.
* Choose GEO, if only the "coordinates" property is set and the
iCalendar component does not already contain a GEO property. The
coordinates property converts to the GEO property value. TBD -
How to convert arbitrary geo: URIs?
Stepanek Expires 30 August 2025 [Page 91]
Internet-Draft JSCalendar February 2025
* Choose DTEND, if the embedding object is an Event, only the
timeZone and the relativeTo properties are set, the "relativeTo"
property value is "end" and the iCalendar component does not
already contain a DTEND property. The timeZone property converts
to the TZID parameter of the DTEND property. The duration of the
embedding Event object determines the DTEND property value.
* Choose the VLOCATION component otherwise.
Implementations MAY convert one of the Location objects that convert
to a VLOCATION also to the LOCATION property; converting the title or
description property to the LOCATION property value is a reasonable
choice. The DERIVED parameter MUST be set on the LOCATION property.
The properties convert to a VLOCATION component as follows:
+===============+===============+===============+===============+
| Name | Reference | Property (or | See |
| | | other) | |
+===============+===============+===============+===============+
| coordinates | [RFC8984], | GEO | Section |
| | Section 4.2.5 | | 2.3.23 |
+---------------+---------------+---------------+---------------+
| description | [RFC8984], | DESCRIPTION | Section |
| | Section 4.2.2 | | 2.3.14 |
+---------------+---------------+---------------+---------------+
| links | [RFC8984], | ATTACH, or | Link object |
| | Section 4.2.7 | other | (Section 3.4) |
+---------------+---------------+---------------+---------------+
| locationTypes | [RFC8984], | LOCATION-TYPE | Section |
| | Section 4.2.5 | | 2.3.28 |
+---------------+---------------+---------------+---------------+
| name | [RFC8984], | NAME | Section |
| | Section 4.2.5 | | 2.3.30 |
+---------------+---------------+---------------+---------------+
| relativeTo | [RFC8984], | TBD | |
| | Section 4.5.2 | | |
+---------------+---------------+---------------+---------------+
| timeZone | [RFC8984], | TBD | |
| | Section 4.7.1 | | |
+---------------+---------------+---------------+---------------+
Table 35: Properties of the Location object
Stepanek Expires 30 August 2025 [Page 92]
Internet-Draft JSCalendar February 2025
3.6. Participant
The Participant object [RFC8984] (Section 4.4.6) either converts to
one of an ATTENDEE property (Section 2.3.4), a PARTICIPANT component
(Section 2.2.1), or a VRESOURCE component (Section 2.2.5); or it
converts to both an ATTENDEE property and a PARTICIPANT component:
* It converts to an ATTENDEE property if at least one of the
calendarAddress [I-D.ietf-jmap-calendars] (Section 5.1.1) or
sendTo [RFC8984] (Section 4.4.6) properties is set. The
calendarAddress property converts to the ATTENDEE property value,
if set; otherwise one of the scheduling methods in the "sendTo"
property converts to the ATTENDEE property value.
* It converts to a PARTICIPANT component if it converts to an
ATTENDEE property but not all of its properties convert to
ATTENDEE property parameters as depicted in Table 36. In this
case the CALENDAR-ADDRESS property value of the PARTICIPANT MUST
be set to the ATTENDEE property value. Alternatively, the
Participant object also converts to a PARTICIPANT component if it
does not convert to an ATTENDEE property but its kind property
value is unequal to "resource".
* It converts to a VRESOURCE component if it does not convert to an
ATTENDEE property and its kind property value is "resource".
The following Participant properties convert to the ATTENDEE
property. How to convert these properties if the Participant does
not convert to an ATTENDEE is implementation-specific.
+=====================+============+=====================+=========+
| Name | Reference | Parameter (or | See |
| | | other) | |
+=====================+============+=====================+=========+
| delegatedFrom | [RFC8984], | DELEGATED-FROM | Section |
| | Section | | 2.3.4 |
| | 4.4.6 | | |
+---------------------+------------+---------------------+---------+
| delegatedTo | [RFC8984], | DELEGATED-TO | Section |
| | Section | | 2.3.4 |
| | 4.4.6 | | |
+---------------------+------------+---------------------+---------+
| email | [RFC8984], | EMAIL | Section |
| | Section | | 2.3.4 |
| | 4.4.6 | | |
+---------------------+------------+---------------------+---------+
| expectReply | [RFC8984], | RSVP | Section |
| | Section | | 2.3.4 |
Stepanek Expires 30 August 2025 [Page 93]
Internet-Draft JSCalendar February 2025
| | 4.4.6 | | |
+---------------------+------------+---------------------+---------+
| kind | [RFC8984], | CUTYPE | Section |
| | Section | | 2.3.4 |
| | 4.4.6 | | |
+---------------------+------------+---------------------+---------+
| memberOf | [RFC8984], | MEMBER | Section |
| | Section | | 2.3.4 |
| | 4.4.6 | | |
+---------------------+------------+---------------------+---------+
| name | [RFC8984], | CN | Section |
| | Section | | 2.3.4 |
| | 4.2.5 | | |
+---------------------+------------+---------------------+---------+
| participationStatus | [RFC8984], | PARTSTAT | Section |
| | Section | | 2.3.4 |
| | 4.4.6 | | |
+---------------------+------------+---------------------+---------+
| progress | [RFC8984], | PARTSTAT | Section |
| | Section | | 2.3.4, |
| | 5.2.5 | | and |
| | | | remarks |
| | | | below |
+---------------------+------------+---------------------+---------+
| roles | [RFC8984], | ROLE, or | Section |
| | Section | PARTICIPANT-TYPE | 2.3.4, |
| | 4.4.6 | property of the | Section |
| | | PARTICIPANT | 2.3.32, |
| | | component | and |
| | | | remarks |
| | | | below |
+---------------------+------------+---------------------+---------+
| scheduleAgent | [RFC8984], | SCHEDULE-AGENT | Section |
| | Section | | 2.3.4 |
| | 4.4.6 | | |
+---------------------+------------+---------------------+---------+
| scheduleForceSend | [RFC8984], | SCHEDULE-FORCE-SEND | Section |
| | Section | | 2.3.4 |
| | 4.4.6 | | |
+---------------------+------------+---------------------+---------+
| scheduleSequence | [RFC8984], | TBD | |
| | Section | | |
| | 4.4.6 | | |
+---------------------+------------+---------------------+---------+
| scheduleStatus | [RFC8984], | SCHEDULE-STATUS | Section |
| | Section | | 2.3.4 |
| | 4.4.6 | | |
+---------------------+------------+---------------------+---------+
Stepanek Expires 30 August 2025 [Page 94]
Internet-Draft JSCalendar February 2025
| scheduleUpdated | [RFC8984], | TBD | |
| | Section | | |
| | 4.4.6 | | |
+---------------------+------------+---------------------+---------+
| sendTo | [RFC8984], | TBD | |
| | Section | | |
| | 4.4.6 | | |
+---------------------+------------+---------------------+---------+
Table 36: Properties of the Participant object that convert to
the ATTENDEE property
Remarks:
* The "optional" role converts to the "OPT-PARTICIPANT" ROLE
parameter value, the "chair" role to "CHAIR", "informational" to
"NON-PARTICIPANT". The "attendee" role does not convert to the
ROLE parameter, it is implied by the ATTENDEE property. The
"owner" role does not convert to the ROLE parameter, if the
property value of the ATTENDEE is equal to the value of the
ORGANIZER property in the same component. All other roles require
a PARTICIPANT component and convert to the PARTICIPANT-TYPE
property in that component.
* The progress property converts to the PARTSTAT parameter as
outlined in Table 18.
The following Participant properties convert to the PARTICIPANT or
VRESOURCE component:
Stepanek Expires 30 August 2025 [Page 95]
Internet-Draft JSCalendar February 2025
+======================+============+==================+==========+
| Name | Reference | Property (or | See |
| | | other) | |
+======================+============+==================+==========+
| description | [RFC8984], | DESCRIPTION | Section |
| | Section | | 2.3.14 |
| | 4.2.2 | | |
+----------------------+------------+------------------+----------+
| language | [RFC8984], | TBD | |
| | Section | | |
| | 4.4.6 | | |
+----------------------+------------+------------------+----------+
| links | [RFC8984], | ATTACH, or other | Link |
| | Section | | object |
| | 4.2.7 | | (Section |
| | | | 3.4) |
+----------------------+------------+------------------+----------+
| locationId | [RFC8984], | TBD | |
| | Section | | |
| | 4.4.6 | | |
+----------------------+------------+------------------+----------+
| name | [RFC8984], | NAME | Section |
| | Section | | 2.3.30 |
| | 4.2.5 | | |
+----------------------+------------+------------------+----------+
| participationComment | [RFC8984], | COMMENT | Section |
| | Section | | 2.3.9 |
| | 4.4.6 | | |
+----------------------+------------+------------------+----------+
| percentComplete | [RFC8984], | PERCENT-COMPLETE | Section |
| | Section | | 2.3.33 |
| | 5.2.4 | | |
+----------------------+------------+------------------+----------+
| progressUpdated | [RFC8984], | TBD | |
| | Section | | |
| | 5.2.6 | | |
+----------------------+------------+------------------+----------+
| roles | [RFC8984], | PARTICIPANT-TYPE | Section |
| | Section | | 2.3.32 |
| | 4.4.6 | | |
+----------------------+------------+------------------+----------+
Table 37: Properties of the Participant object that convert to
the PARTICIPANT or VRESOURCE component
Stepanek Expires 30 August 2025 [Page 96]
Internet-Draft JSCalendar February 2025
3.7. TimeZone
The TimeZone object [RFC8984] (Section 4.7.2) converts to a VTIMEZONE
component (Section 2.2.6).
Its properties convert as follows:
+============+===============+=====================+==============+
| Name | Reference | Property (or other) | See |
+============+===============+=====================+==============+
| aliases | [RFC8984], | TZID-ALIAS-OF | Section |
| | Section 4.7.2 | | 2.3.50 |
+------------+---------------+---------------------+--------------+
| daylight | [RFC8984], | DAYLIGHT | TimeZoneRule |
| | Section 4.7.2 | (component) | below |
+------------+---------------+---------------------+--------------+
| standard | [RFC8984], | STANDARD | TimeZoneRule |
| | Section 4.7.2 | (component) | below |
+------------+---------------+---------------------+--------------+
| tzId | [RFC8984], | TZID | Section |
| | Section 4.7.2 | | 2.3.49 |
+------------+---------------+---------------------+--------------+
| url | [RFC8984], | TZURL | Section |
| | Section 4.7.2 | | 2.3.55 |
+------------+---------------+---------------------+--------------+
| validUntil | [RFC8984], | TZUNTIL | Section |
| | Section 4.7.2 | | 2.3.54 |
+------------+---------------+---------------------+--------------+
Table 38: Properties of the TimeZone object
The TimeZoneRule object [RFC8984] (Section 4.7.2) converts to a
DAYLIGHT or STANDARD component (Section 2.2.6).
Its properties convert as follows:
Stepanek Expires 30 August 2025 [Page 97]
Internet-Draft JSCalendar February 2025
+=====================+===============+==============+=========+
| Name | Reference | Property (or | See |
| | | other) | |
+=====================+===============+==============+=========+
| comments | [RFC8984], | COMMENT | Section |
| | Section 4.7.2 | | 2.3.9 |
+---------------------+---------------+--------------+---------+
| names | [RFC8984], | TZNAME | Section |
| | Section 4.7.2 | | 2.3.51 |
+---------------------+---------------+--------------+---------+
| offsetFrom | [RFC8984], | TZOFFSETFROM | Section |
| | Section 4.7.2 | | 2.3.52 |
+---------------------+---------------+--------------+---------+
| offsetTo | [RFC8984], | TZOFFSETTO | Section |
| | Section 4.7.2 | | 2.3.53 |
+---------------------+---------------+--------------+---------+
| recurrenceOverrides | [RFC8984], | RDATE | Section |
| | Section 4.3.5 | | 2.3.36 |
+---------------------+---------------+--------------+---------+
| recurrenceRules | [RFC8984], | RRULE | Section |
| | Section 4.3.3 | | 2.3.40 |
+---------------------+---------------+--------------+---------+
| start | [RFC8984], | DTSTART | Section |
| | Section 4.7.2 | | 2.3.17 |
+---------------------+---------------+--------------+---------+
Table 39: Properties of the TimeZoneRule object
3.8. VirtualLocation
The VirtualLocation object [RFC8984] (Section 4.2.6) converts to a
CONFERENCE property (Section 2.3.12).
The uri property converts to the CONFERENCE property value. Its
other properties convert as follows:
Stepanek Expires 30 August 2025 [Page 98]
Internet-Draft JSCalendar February 2025
+=============+===============+======================+=========+
| Name | Reference | Parameter (or other) | See |
+=============+===============+======================+=========+
| description | [RFC8984], | TBD | |
| | Section 4.2.2 | | |
+-------------+---------------+----------------------+---------+
| features | [RFC8984], | FEATURE | Section |
| | Section 4.2.6 | | 2.3.12 |
+-------------+---------------+----------------------+---------+
| name | [RFC8984], | LABEL | Section |
| | Section 4.2.5 | | 2.3.12 |
+-------------+---------------+----------------------+---------+
Table 40: Properties of the VirtualLocation object
4. Updates to iCalendar
4.1. New Parameters
4.1.1. JSCALID
TBD
4.2. New Properties
4.2.1. JSCALID
TBD
4.2.2. JSPROP
TBD
5. Updates to JSCalendar
5.1. New Properties
5.1.1. completed
Name:
completed
Context:
Task
Type:
UTCDateTime (optional)
Stepanek Expires 30 August 2025 [Page 99]
Internet-Draft JSCalendar February 2025
Description:
This is the date and time when the task was completed.
5.1.2. iCalComponent
Name:
iCalComponent
Context:
Any JSCalendar object
Type:
ICalComponent (optional)
Description
This contains information about an iCalendar component that got
converted to JSCalendar. It allows for preserving the name of the
iCalendar component and some or all of its properties and
subcomponents.
An ICalComponent object has the following properties:
@type: String (mandatory) This specifies the type of this object.
This MUST be ICalComponent.
name: String (mandatory) This is the name of the iCalendar
component in lowercase.
components: *[][] (optional) This contains subcomponents of the
iCalendar component which did not convert to standard
JSCalendar elements. The value MUST be a list of iCalendar
components formatted in jCal as defined in Section 3.3 of
[RFC7265].
convertedProperties: String[ICalProperty] (optional) This
contains conversion-related information about the component's
properties that got partially or fully converted to JSCalendar.
Each key defines the path to a property of the JSCalendar
object on which the "iCalComponent" property is set on. The
value for each key contains information about the "iCalendar"
property which converted to the "object" property located at
that key (see Section 5.1.3).
The key MUST be a valid key of a PatchObject as defined in
Section 1.4.9 of [RFC8984]. The key MUST NOT point into a
nested property, unless there is no way to otherwise preserve
the "iCalendar" property elements. For example, if a VEVENT
contains an ATTENDEE property, then any iCalendar information
Stepanek Expires 30 August 2025 [Page 100]
Internet-Draft JSCalendar February 2025
about the ATTENDEE property MUST be set in the "iCalProperty"
property of the converted Participant object (see
Section 2.3.4). In contrast, information about a RDATE
property contained in a VEVENT would be located by a key
pointing into the recurrenceOverrides property of the Event
object (see Section 2.3.36).
properties: *[][] (optional) This contains properties of the
iCalendar component which did not convert to standard
JSCalendar elements. The value MUST be a list of iCalendar
properties formatted in jCal as defined in Section 3.4 of
[RFC7265].
The example in Figure 89 describes how to convert unknown iCalendar
elements to the "iCalComponent" property. The "X-FOO" parameter set
on the SUMMARY property illustrates how to preserve an unknown
iCalendar parameter on a property that does convert to a standard
JSCalendar element. The "X-BAR" property and "X-BAZ" component
illustrate how to convert entirely unknown iCalendar elements.
BEGIN:VEVENT
SUMMARY;X-FOO=bar:test
...
X-BAR:bam
...
BEGIN:X-BAZ
UID:507A08F9-81D8-4D16-9480-D6D75E977943
END:X-BAZ
...
Stepanek Expires 30 August 2025 [Page 101]
Internet-Draft JSCalendar February 2025
{
"@type": "Event",
"title": "test",
"iCalComponent": {
"@type": "ICalComponent",
"name": "vevent",
"convertedProperties": {
"title": {
"@type": "ICalProperty",
"name": "summary",
"parameters": {
"x-foo": "bar"
}
}
},
"properties": [
[
"x-bar",
{},
"unknown",
"bam"
]
],
"components": [
[
"x-baz",
[
[
"uid",
{},
"text",
"507A08F9-81D8-4D16-9480-D6D75E977943"
]
],
[]
]
]
}
}
Figure 89: Converting unknown iCalendar elements to the
iCalComponent property
5.1.3. iCalProperty
Name:
iCalProperty
Stepanek Expires 30 August 2025 [Page 102]
Internet-Draft JSCalendar February 2025
Context:
Any JSCalendar object
Type:
ICalProperty (optional)
Description:
This contains conversion-related information about an iCalendar
property that got partially or fully converted to a JSCalendar
object. It allows for preserving the name of the "iCalendar"
property and some or all of its parameters.
An ICalProperty object has the following properties:
@type: String (mandatory) This specifies the type of this object.
This MUST be ICalProperty.
name: String (mandatory) This is the name of the "iCalendar"
property in lowercase.
valueType: String (optional) This is the name of the "iCalendar"
property value type in lowercase.
parameters: String[String] (optional) This contains parameters of
the "iCalendar" property. The value MUST comply with iCalendar
parameters formatted in jCal as defined in Section 3.5 of
[RFC7265].
The example in Figure 90 describes how to convert an unknown
parameter to the "iCalProperty" property. The ATTACH property
converts to a Link object. To preserve the unknown "X-FOO"
parameter, the "iCalProperty" property is set on the Link object.
ATTACH;X-FOO=bar:https://example.com/example.jpg
"links": {
"l1": {
"@type": "Link",
"href": "https://example.com/example.jpg",
"iCalProperty": {
"@type": "ICalProperty",
"name": "attach",
"parameters": {
"x-foo": "bar"
}
}
}
}
Stepanek Expires 30 August 2025 [Page 103]
Internet-Draft JSCalendar February 2025
Figure 90: Converting the STRUCTURED-DATA property
5.1.4. locations (Participant)
Name:
locations
Context:
Participant
Type:
Id[Location] (optional)
Description:
This represents locations associated with the participant. In
contrast to the single-valued "locationId" property, this allows
for associating multiple locations with the Participant object,
and to express that a location only is relevant for this
participant.
5.1.5. scheduleAgent (Event, Task)
Name:
scheduleAgent
Context:
Event, Task
Type:
String (optional, default "server")
Description:
This property represents the SCHEDULE-AGENT parameter [RFC6638]
(Section 7.1) specified on an ORGANIZER property. In the context
of scheduling as outlined in [RFC6638], a scheduling client can
set this property to indicate who is responsible for sending
scheduling messages to the organizer in the "replyTo" property.
The same values as for the "scheduleAgent" property of the
Participant object [RFC8984] (Section 4.4.6) are allowed, the
"none" value indicates that no scheduling message is to be sent to
the organizer. The property MUST NOT be preserved in the
JSCalendar object on the server or appear in a scheduling message.
If this property is set, then the "replyTo" property MUST be set.
5.1.6. scheduleForceSend (Event, Task)
Name:
scheduleForceSend
Stepanek Expires 30 August 2025 [Page 104]
Internet-Draft JSCalendar February 2025
Context:
Event, Task
Type:
Boolean (optional, default "false")
Description:
This property represents the SCHEDULE-FORCE-SEND parameter
[RFC6638] (Section 7.2) specified on an ORGANIZER property. In
the context of scheduling as outlined in [RFC6638], a scheduling
client can set this property to true to request that the server
send a scheduling message to the organizer defined in the
"replyTo" property, when it would not normally do so (e.g., if no
significant change is made to the object or the scheduleAgent is
set to "client"). The property MUST NOT be preserved in the
JSCalendar object on the server or appear in a scheduling message.
If this property is set, then the "replyTo" property MUST be set.
5.1.7. scheduleStatus (Event, Task)
Name:
scheduleStatus
Context:
Event, Task
Type:
String[] (optional)
Description:
This property represents the SCHEDULE-STATUS parameter [RFC6638]
(Section 7.3) specified on an ORGANIZER property. In the context
of scheduling as outlined in [RFC6638], the scheduling client or
server can set this property to a list of status codes, returned
from processing the most recent scheduling message sent to the
organizer defined in the "replyTo" property. The status codes
MUST be valid "statcode" values as defined in the ABNF in
Section 3.8.8.3 of [RFC5545]. Servers MUST only add or change
this property when they send a scheduling message to the
organizer. Clients SHOULD NOT change or remove this property if
it was provided by the server. Clients MAY add, change, or remove
the property for participants where the client is handling the
scheduling. This property MUST NOT be included in scheduling
messages.
Stepanek Expires 30 August 2025 [Page 105]
Internet-Draft JSCalendar February 2025
5.2. Updated Properties
5.2.1. rel (Link)
This document modifies the definition of the "rel" property of the
Link object. The original specification in Section 1.4.11 of
[RFC8984] restricts that its values MUST be a registered relation
type as defined in [RFC8288]. The new definition allows the value
also to be an extension relation type to improve interoperability
with the LINKREL [RFC9253] (Section 6.1) parameter in iCalendar. The
new definition of the Link "rel" property is:
rel: String (optional)
This identifies the relation of the linked resource to the object.
If set, the value MUST either be a registered relation type or an
extension relation type, as defined in Section 2.1 of [RFC8288].
6. IANA Considerations
7. References
7.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC2397] Masinter, L., "The "data" URL scheme", RFC 2397,
DOI 10.17487/RFC2397, August 1998,
<https://www.rfc-editor.org/info/rfc2397>.
[RFC2445] Dawson, F. and D. Stenerson, "Internet Calendaring and
Scheduling Core Object Specification (iCalendar)",
RFC 2445, DOI 10.17487/RFC2445, November 1998,
<https://www.rfc-editor.org/info/rfc2445>.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66,
RFC 3986, DOI 10.17487/RFC3986, January 2005,
<https://www.rfc-editor.org/info/rfc3986>.
[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", STD 68, RFC 5234,
DOI 10.17487/RFC5234, January 2008,
<https://www.rfc-editor.org/info/rfc5234>.
Stepanek Expires 30 August 2025 [Page 106]
Internet-Draft JSCalendar February 2025
[RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and
Scheduling Core Object Specification (iCalendar)",
RFC 5545, DOI 10.17487/RFC5545, September 2009,
<https://www.rfc-editor.org/info/rfc5545>.
[RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent
Interoperability Protocol (iTIP)", RFC 5546,
DOI 10.17487/RFC5546, December 2009,
<https://www.rfc-editor.org/info/rfc5546>.
[RFC5870] Mayrhofer, A. and C. Spanring, "A Uniform Resource
Identifier for Geographic Locations ('geo' URI)",
RFC 5870, DOI 10.17487/RFC5870, June 2010,
<https://www.rfc-editor.org/info/rfc5870>.
[RFC6638] Daboo, C. and B. Desruisseaux, "Scheduling Extensions to
CalDAV", RFC 6638, DOI 10.17487/RFC6638, June 2012,
<https://www.rfc-editor.org/info/rfc6638>.
[RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type
Specifications and Registration Procedures", BCP 13,
RFC 6838, DOI 10.17487/RFC6838, January 2013,
<https://www.rfc-editor.org/info/rfc6838>.
[RFC7265] Kewisch, P., Daboo, C., and M. Douglass, "jCal: The JSON
Format for iCalendar", RFC 7265, DOI 10.17487/RFC7265, May
2014, <https://www.rfc-editor.org/info/rfc7265>.
[RFC7529] Daboo, C. and G. Yakushev, "Non-Gregorian Recurrence Rules
in the Internet Calendaring and Scheduling Core Object
Specification (iCalendar)", RFC 7529,
DOI 10.17487/RFC7529, May 2015,
<https://www.rfc-editor.org/info/rfc7529>.
[RFC7808] Douglass, M. and C. Daboo, "Time Zone Data Distribution
Service", RFC 7808, DOI 10.17487/RFC7808, March 2016,
<https://www.rfc-editor.org/info/rfc7808>.
[RFC7953] Daboo, C. and M. Douglass, "Calendar Availability",
RFC 7953, DOI 10.17487/RFC7953, August 2016,
<https://www.rfc-editor.org/info/rfc7953>.
[RFC7986] Daboo, C., "New Properties for iCalendar", RFC 7986,
DOI 10.17487/RFC7986, October 2016,
<https://www.rfc-editor.org/info/rfc7986>.
Stepanek Expires 30 August 2025 [Page 107]
Internet-Draft JSCalendar February 2025
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8288] Nottingham, M., "Web Linking", RFC 8288,
DOI 10.17487/RFC8288, October 2017,
<https://www.rfc-editor.org/info/rfc8288>.
[RFC8607] Daboo, C., Quillaud, A., and K. Murchison, Ed.,
"Calendaring Extensions to WebDAV (CalDAV): Managed
Attachments", RFC 8607, DOI 10.17487/RFC8607, June 2019,
<https://www.rfc-editor.org/info/rfc8607>.
[RFC8984] Jenkins, N. and R. Stepanek, "JSCalendar: A JSON
Representation of Calendar Data", RFC 8984,
DOI 10.17487/RFC8984, July 2021,
<https://www.rfc-editor.org/info/rfc8984>.
[RFC9073] Douglass, M., "Event Publishing Extensions to iCalendar",
RFC 9073, DOI 10.17487/RFC9073, August 2021,
<https://www.rfc-editor.org/info/rfc9073>.
[RFC9074] Daboo, C. and K. Murchison, Ed., ""VALARM" Extensions for
iCalendar", RFC 9074, DOI 10.17487/RFC9074, August 2021,
<https://www.rfc-editor.org/info/rfc9074>.
[RFC9253] Douglass, M., "Support for iCalendar Relationships",
RFC 9253, DOI 10.17487/RFC9253, August 2022,
<https://www.rfc-editor.org/info/rfc9253>.
[TZDB] "IANA Time Zone Database",
<https://www.iana.org/time-zones>.
7.2. Informative References
[I-D.ietf-calext-ical-tasks]
Douglass, M. and A. Apthorp, "Task Extensions to
iCalendar", Work in Progress, Internet-Draft, draft-ietf-
calext-ical-tasks, 30 July 2024,
<https://datatracker.ietf.org/doc/draft-ietf-calext-ical-
tasks>.
[I-D.ietf-jmap-calendars]
Jenkins, N.M. and M. Douglass, "JMAP for Calendars", Work
in Progress, Internet-Draft, draft-ietf-jmap-calendars, 22
July 2024, <https://datatracker.ietf.org/doc/draft-ietf-
jmap-calendars/>.
Stepanek Expires 30 August 2025 [Page 108]
Internet-Draft JSCalendar February 2025
Appendix A. Discrepancies between iCalendar and JSCalendar
This section highlights iCalendar and JSCalendar elements for which
no conversion rule to a standard element is defined in this document.
This is informational; implementations MAY convert these elements,
for example by use of the special-purpose properties defined in this
document, or some vendor-specific extension properties.
Alternatively newer standards might define new standard elements and
register them at IANA.
A.1. Unsupported iCalendar Elements
A.1.1. Components
The following components do not convert to a standard element in
JSCalendar:
* AVAILABLE [RFC7953], Section 3.1
* VAVAILABILITY [RFC7953], Section 3.1
* VFREEBUSY [RFC5545], Section 3.6.4
* VJOURNAL [RFC5545], Section 3.6.3
* VSTATUS [I-D.ietf-calext-ical-tasks], Section 14.1
A.1.2. Properties by Component
The following components are defined to contain the listed
properties. But these properties do not convert to a standard
JSCalendar element.
A.1.2.1. PARTICIPANT
* CATEGORIES [RFC5545], Section 3.8.1.2
* CONTACT [RFC5545], Section 3.8.4.2
* CREATED [RFC5545], Section 3.8.7.1
* LAST-MODIFIED [RFC5545], Section 3.8.7.3
* PRIORITY [RFC5545], Section 3.8.1.9
* REASON [I-D.ietf-calext-ical-tasks], Section 12.2
* RELATED-TO [RFC5545], Section 3.8.4.5
Stepanek Expires 30 August 2025 [Page 109]
Internet-Draft JSCalendar February 2025
* REQUEST-STATUS [RFC5545], Section 3.8.8.3
* RESOURCES [RFC5545], Section 3.8.1.10
* STATUS [RFC5545], Section 3.8.1.11
* STYLED-DESCRIPTION [RFC9073], Section 6.5
* UID [RFC5545], Section 3.8.4.7
A.1.2.2. VALARM
* ATTACH [RFC5545], Section 3.8.1.1
* ATTENDEE [RFC5545], Section 3.8.4.1
* DESCRIPTION [RFC5545], Section 3.8.1.5
* DURATION [RFC5545], Section 3.8.2.5
* PROXIMITY [RFC9074], Section 8.1
* REPEAT [RFC5545], Section 3.8.6.2
* STYLED-DESCRIPTION [RFC9073], Section 6.5
* SUMMARY [RFC5545], Section 3.8.1.12
* UID [RFC5545], Section 3.8.4.7
A.1.2.3. VCALENDAR
* CALSCALE [RFC5545], Section 3.7.1
* REFRESH-INTERVAL [RFC7986], Section 5.7
* VERSION [RFC5545], Section 3.7.4
A.1.2.4. VEVENT
* CONTACT [RFC5545], Section 3.8.4.2
* REFID [RFC9253], Section 8.3
* RESOURCES [RFC5545], Section 3.8.1.10
A.1.2.5. VLOCATION
Stepanek Expires 30 August 2025 [Page 110]
Internet-Draft JSCalendar February 2025
* UID [RFC5545], Section 3.8.4.7
A.1.2.6. VRESOURCE
* RESOURCE-TYPE [RFC9073], Section 6.3
* UID [RFC5545], Section 3.8.4.7
A.1.2.7. VTODO
* CONTACT [RFC5545], Section 3.8.4.2
* REFID [RFC9253], Section 8.3
* RESOURCES [RFC5545], Section 3.8.1.10
* TASK-MODE [I-D.ietf-calext-ical-tasks], Section 12.4
A.1.3. Properties by Value Type
The following properties convert to a standard JSCalendar element for
some other value type, but they do not for the listed value types.
A.1.3.1. LINK
* XML-REFERENCE [RFC9253], Section 7
A.1.3.2. RDATE
* PERIOD [RFC5545], Section 3.3.9
A.1.3.3. STRUCTURED-DATA
* TEXT [RFC9073], Section 6.6
A.1.4. Parameters by Property
The following properties are defined to contain the listed
parameters. But these parameters do not convert to a standard
JSCalendar element.
A.1.4.1. ATTACH
* FILENAME [RFC8607], Section 4.2
* MANAGED-ID [RFC8607], Section 4.3
Stepanek Expires 30 August 2025 [Page 111]
Internet-Draft JSCalendar February 2025
A.1.4.2. ATTENDEE
* SENT-BY [RFC5545], Section 3.2.18
* LANGUAGE [RFC5545], Section 3.2.10
A.1.4.3. CATEGORIES
* LANGUAGE [RFC5545], Section 3.2.10
A.1.4.4. COMMENT
* ALTREP [RFC5545], Section 3.2.1
* LANGUAGE [RFC5545], Section 3.2.10
A.1.4.5. CONFERENCE
* LANGUAGE [RFC5545], Section 3.2.10
A.1.4.6. DESCRIPTION
* ALTREP [RFC5545], Section 3.2.1
* LANGUAGE [RFC5545], Section 3.2.10
A.1.4.7. IMAGE
* ALTREP [RFC5545], Section 3.2.1
A.1.4.8. LINK
* LANGUAGE [RFC5545], Section 3.2.10
A.1.4.9. LOCATION
* ALTREP [RFC5545], Section 3.2.1
* LANGUAGE [RFC5545], Section 3.2.10
A.1.4.10. NAME
* ALTREP [RFC5545], Section 3.2.1
* LANGUAGE [RFC5545], Section 3.2.10
A.1.4.11. ORGANIZER
Stepanek Expires 30 August 2025 [Page 112]
Internet-Draft JSCalendar February 2025
* SENT-BY [RFC5545], Section 3.2.18
* LANGUAGE [RFC5545], Section 3.2.10
A.1.4.12. PARTICIPANT-TYPE
* ORDER [RFC9073], Section 5.1
A.1.4.13. RECURRENCE-ID
* RANGE [RFC5545], Section 3.2.13
A.1.4.14. RELATED-TO
* GAP [RFC9253], Section 6.2
A.1.4.15. REQUEST-STATUS
* LANGUAGE [RFC5545], Section 3.2.10
A.1.4.16. RESOURCES
* ALTREP [RFC5545], Section 3.2.1
* LANGUAGE [RFC5545], Section 3.2.10
A.1.4.17. STRUCTURED-DATA
* SCHEMA [RFC9073], Section 5.2
A.1.4.18. STYLED-DESCRIPTION
* ALTREP [RFC5545], Section 3.2.1
* LANGUAGE [RFC5545], Section 3.2.10
* DERIVED [RFC9073], Section 5.3
A.1.4.19. SUMMARY
* ALTREP [RFC5545], Section 3.2.1
* LANGUAGE [RFC5545], Section 3.2.10
A.1.4.20. TZNAME
* LANGUAGE [RFC5545], Section 3.2.10
Stepanek Expires 30 August 2025 [Page 113]
Internet-Draft JSCalendar February 2025
A.2. Unsupported JSCalendar Elements
A.2.1. Common Properties
The following properties are defined in [RFC8984], Section 4 for the
Event, Task and (with restrictions) Group objects, but they do not
convert to a standard iCalendar element.
* locale [RFC8984], Section 4.2.8
* localizations [RFC8984], Section 4.6.1
* sentBy [RFC8984], Section 4.4.5
* showWithoutTime [RFC8984], Section 4.2.4
* useDefaultAlerts [RFC8984], Section 4.5.1
A.2.2. Participant Properties
The following properties are defined for the Participant object
[RFC8984] (Section 4.4.6) but do not convert to standard Calendar
elements.
* invitedBy [RFC8984], Section 4.4.6
* sentBy [RFC8984], Section 4.4.6
Author's Address
Robert Stepanek
Fastmail
PO Box 234
Collins St West
Melbourne VIC 8007
Australia
Email: rsto@fastmailteam.com
URI: https://www.fastmail.com
Stepanek Expires 30 August 2025 [Page 114]