JSCalendar: Converting from and to iCalendar
draft-ietf-calext-jscalendar-icalendar-20
| Document | Type | Active Internet-Draft (calext WG) | |
|---|---|---|---|
| Author | Robert Stepanek | ||
| Last updated | 2025-11-05 | ||
| RFC stream | Internet Engineering Task Force (IETF) | ||
| Intended RFC status | Informational | ||
| Formats | |||
| Additional resources | Mailing list discussion | ||
| Stream | WG state | In WG Last Call | |
| 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-20
Calendaring extensions R. Stepanek
Internet-Draft Fastmail
Intended status: Standards Track 5 November 2025
Expires: 9 May 2026
JSCalendar: Converting from and to iCalendar
draft-ietf-calext-jscalendar-icalendar-20
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.
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 9 May 2026.
Copyright Notice
Copyright (c) 2025 IETF Trust and the persons identified as the
document authors. All rights reserved.
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.
Stepanek Expires 9 May 2026 [Page 1]
Internet-Draft JSCalendar November 2025
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1. Notational Conventions . . . . . . . . . . . . . . . . . 4
1.2. Scope and Goals . . . . . . . . . . . . . . . . . . . . . 4
1.3. How to Read the Examples . . . . . . . . . . . . . . . . 4
1.3.1. iCalendar Examples . . . . . . . . . . . . . . . . . 5
1.3.2. JSCalendar Examples . . . . . . . . . . . . . . . . . 6
1.4. Lossy versus Lossless Conversion . . . . . . . . . . . . 8
2. Converting iCalendar to JSCalendar . . . . . . . . . . . . . 8
2.1. General rules . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1. iCalendar Objects . . . . . . . . . . . . . . . . . . 9
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 . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.3. VEVENT . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.4. VLOCATION . . . . . . . . . . . . . . . . . . . . . . 23
2.2.5. VTODO . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3. Properties . . . . . . . . . . . . . . . . . . . . . . . 28
2.3.1. ACKNOWLEDGED . . . . . . . . . . . . . . . . . . . . 28
2.3.2. ACTION . . . . . . . . . . . . . . . . . . . . . . . 28
2.3.3. ATTACH . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.4. ATTENDEE . . . . . . . . . . . . . . . . . . . . . . 31
2.3.5. CALENDAR-ADDRESS . . . . . . . . . . . . . . . . . . 36
2.3.6. CATEGORIES . . . . . . . . . . . . . . . . . . . . . 37
2.3.7. CLASS . . . . . . . . . . . . . . . . . . . . . . . . 38
2.3.8. COLOR . . . . . . . . . . . . . . . . . . . . . . . . 39
2.3.9. CONCEPT . . . . . . . . . . . . . . . . . . . . . . . 39
2.3.10. CONFERENCE . . . . . . . . . . . . . . . . . . . . . 40
2.3.11. COORDINATES . . . . . . . . . . . . . . . . . . . . . 41
2.3.12. CREATED . . . . . . . . . . . . . . . . . . . . . . . 41
2.3.13. DESCRIPTION . . . . . . . . . . . . . . . . . . . . . 42
2.3.14. DTEND . . . . . . . . . . . . . . . . . . . . . . . . 42
2.3.15. DTSTAMP . . . . . . . . . . . . . . . . . . . . . . . 44
2.3.16. DTSTART . . . . . . . . . . . . . . . . . . . . . . . 44
2.3.17. DUE . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.3.18. DURATION . . . . . . . . . . . . . . . . . . . . . . 47
2.3.19. ESTIMATED-DURATION . . . . . . . . . . . . . . . . . 47
2.3.20. EXDATE . . . . . . . . . . . . . . . . . . . . . . . 48
2.3.21. GEO . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.3.22. IMAGE . . . . . . . . . . . . . . . . . . . . . . . . 51
2.3.23. LAST-MODIFIED . . . . . . . . . . . . . . . . . . . . 52
2.3.24. LINK . . . . . . . . . . . . . . . . . . . . . . . . 53
2.3.25. LOCATION . . . . . . . . . . . . . . . . . . . . . . 54
Stepanek Expires 9 May 2026 [Page 2]
Internet-Draft JSCalendar November 2025
2.3.26. LOCATION-TYPE . . . . . . . . . . . . . . . . . . . . 56
2.3.27. METHOD . . . . . . . . . . . . . . . . . . . . . . . 56
2.3.28. NAME . . . . . . . . . . . . . . . . . . . . . . . . 57
2.3.29. ORGANIZER . . . . . . . . . . . . . . . . . . . . . . 58
2.3.30. PERCENT-COMPLETE . . . . . . . . . . . . . . . . . . 61
2.3.31. PRIORITY . . . . . . . . . . . . . . . . . . . . . . 62
2.3.32. PRODID . . . . . . . . . . . . . . . . . . . . . . . 62
2.3.33. RDATE . . . . . . . . . . . . . . . . . . . . . . . . 63
2.3.34. RECURRENCE-ID . . . . . . . . . . . . . . . . . . . . 63
2.3.35. RELATED-TO . . . . . . . . . . . . . . . . . . . . . 64
2.3.36. RRULE . . . . . . . . . . . . . . . . . . . . . . . . 66
2.3.37. SEQUENCE . . . . . . . . . . . . . . . . . . . . . . 68
2.3.38. SHOW-WITHOUT-TIME . . . . . . . . . . . . . . . . . . 69
2.3.39. STATUS . . . . . . . . . . . . . . . . . . . . . . . 69
2.3.40. SOURCE . . . . . . . . . . . . . . . . . . . . . . . 70
2.3.41. STYLED-DESCRIPTION . . . . . . . . . . . . . . . . . 70
2.3.42. SUMMARY . . . . . . . . . . . . . . . . . . . . . . . 71
2.3.43. TRANSP . . . . . . . . . . . . . . . . . . . . . . . 72
2.3.44. TRIGGER . . . . . . . . . . . . . . . . . . . . . . . 72
2.3.45. UID . . . . . . . . . . . . . . . . . . . . . . . . . 74
3. Converting JSCalendar to iCalendar . . . . . . . . . . . . . 74
3.1. Alert . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.2. Event and Task . . . . . . . . . . . . . . . . . . . . . 75
3.3. Group . . . . . . . . . . . . . . . . . . . . . . . . . . 80
3.4. Link . . . . . . . . . . . . . . . . . . . . . . . . . . 82
3.5. Location . . . . . . . . . . . . . . . . . . . . . . . . 83
3.6. Participant . . . . . . . . . . . . . . . . . . . . . . . 84
3.7. VirtualLocation . . . . . . . . . . . . . . . . . . . . . 87
4. Updates to iCalendar . . . . . . . . . . . . . . . . . . . . 88
4.1. New Properties . . . . . . . . . . . . . . . . . . . . . 88
4.1.1. JSID . . . . . . . . . . . . . . . . . . . . . . . . 88
4.1.2. JSPROP . . . . . . . . . . . . . . . . . . . . . . . 89
4.2. New Parameters . . . . . . . . . . . . . . . . . . . . . 92
4.2.1. JSID . . . . . . . . . . . . . . . . . . . . . . . . 92
4.2.2. JSPTR . . . . . . . . . . . . . . . . . . . . . . . . 93
5. Updates to JSCalendar . . . . . . . . . . . . . . . . . . . . 93
5.1. New Properties . . . . . . . . . . . . . . . . . . . . . 93
5.1.1. iCalendar . . . . . . . . . . . . . . . . . . . . . . 93
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 96
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 97
7.1. Normative References . . . . . . . . . . . . . . . . . . 97
7.2. Informative References . . . . . . . . . . . . . . . . . 99
Appendix A. Discrepancies between iCalendar and JSCalendar . . . 99
A.1. Unsupported iCalendar Elements . . . . . . . . . . . . . 100
A.1.1. Components . . . . . . . . . . . . . . . . . . . . . 100
A.1.2. Properties by Component . . . . . . . . . . . . . . . 100
A.1.3. Subcomponents by Component . . . . . . . . . . . . . 103
A.1.4. Properties by Value Type . . . . . . . . . . . . . . 103
Stepanek Expires 9 May 2026 [Page 3]
Internet-Draft JSCalendar November 2025
A.1.5. Parameters by Property . . . . . . . . . . . . . . . 103
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 105
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].
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.1.2 for
iCalendar, and Section 5.1.1 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.
Stepanek Expires 9 May 2026 [Page 4]
Internet-Draft JSCalendar November 2025
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 having these properties set and that
is part of a VCALENDAR component.
* An example that only contains one or more VEVENT, VTODO, VJOURNAL,
FREEBUSY or VTIMEZONE components implicitly represents a VCALENDAR
component that contains them. An example that only contains one
or more other components implicitly represents a VEVENT component
having these components set and that is part of a VCALENDAR
components.
* An example that only contains VEVENT or VTODO 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.
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
Stepanek Expires 9 May 2026 [Page 5]
Internet-Draft JSCalendar November 2025
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.
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.
Stepanek Expires 9 May 2026 [Page 6]
Internet-Draft JSCalendar November 2025
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"
}
{
"@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
Stepanek Expires 9 May 2026 [Page 7]
Internet-Draft JSCalendar November 2025
A property with name "..." and value "" stands for additional
properties that might be present in a JSCalendar object but are
irrelevant for this example, including mandatory properties. The
"..." property requires the "@type" property to be set. 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 ...
1.4. Lossy versus Lossless Conversion
This document outlines how to convert iCalendar elements to
JSCalendar elements, and the other way round. Many of these can be
represented by standard elements in both formats, meaning that they
are registered in the iCalendar and JSCalendar IANA registries and
differ from the special-purpose elements introduced in Section 4 and
Section 5. Still, a number of elements in either format have no
standard counterpart in the other. When converting between between
iCalendar and JSCalendar, implementations MAY choose to only convert
elements that have standard element in the target format, or aim to
preserve as many elements as possible.
When to choose between lossy and lossless conversion is
implementation-specific. For example:
* For lossy conversion, an implementation that internally stores
calendar data in JSCalendar format might only want to convert to a
subset of iCalendar elements for iMIP scheduling [RFC6047]. In
this case, it might not make use any of the conversion-specific
iCalendar properties introduced in Section 4.
* For lossless conversion, an implementation that internally stores
calendar data in iCalendar format might want to convert without
loss to JSCalendar when updating calendar events with JMAP
[jmap-calendars]. For that, it can use the conversion-specific
properties defined in Section 5.
All the examples in this document illustrate lossless conversion, if
not explicitly stated otherwise in the example.
2. Converting iCalendar to JSCalendar
Stepanek Expires 9 May 2026 [Page 8]
Internet-Draft JSCalendar November 2025
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 [jscalendarbis] (Section 2.3). Its properties convert as
follows:
+===============+============+==================+=========+======+
| Name | Reference | Group property | See | Note |
+===============+============+==================+=========+======+
| ATTACH | [RFC5545], | links | Section | |
| | Section | | 2.3.3 | |
| | 3.8.1.1 | | | |
+---------------+------------+------------------+---------+------+
| 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.9 | |
| | 8.1 | | | |
+---------------+------------+------------------+---------+------+
| CREATED | [RFC5545], | created | Section | |
| | Section | | 2.3.12 | |
| | 3.8.7.1 | | | |
+---------------+------------+------------------+---------+------+
| DESCRIPTION | [RFC5545], | description | Section | |
| | Section | | 2.3.13 | |
| | 3.8.1.5 | | | |
+---------------+------------+------------------+---------+------+
| IMAGE | [RFC7986], | links | Section | |
| | Section | | 2.3.22 | |
| | 5.10 | | | |
+---------------+------------+------------------+---------+------+
| LAST-MODIFIED | [RFC5545], | updated | Section | |
Stepanek Expires 9 May 2026 [Page 9]
Internet-Draft JSCalendar November 2025
| | Section | | 2.3.23 | |
| | 3.8.7.3 | | | |
+---------------+------------+------------------+---------+------+
| LINK | [RFC9253], | links | Section | |
| | Section | | 2.3.24 | |
| | 8.2 | | | |
+---------------+------------+------------------+---------+------+
| METHOD | [RFC5545], | entries/*/method | Section | |
| | Section | | 2.3.27 | |
| | 3.7.2 | | | |
+---------------+------------+------------------+---------+------+
| NAME | [RFC7986], | title | Section | |
| | Section | | 2.3.28 | |
| | 5.1 | | | |
+---------------+------------+------------------+---------+------+
| PRODID | [RFC5545], | prodId, | Section | |
| | Section | entries/*/prodId | 2.3.32 | |
| | 3.7.3 | | | |
+---------------+------------+------------------+---------+------+
| SOURCE | [RFC7986], | source | Section | |
| | Section | | 2.3.40 | |
| | 5.8 | | | |
+---------------+------------+------------------+---------+------+
| UID | [RFC5545], | uid | Section | |
| | Section | | 2.3.45 | |
| | 3.8.4.7 | | | |
+---------------+------------+------------------+---------+------+
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 | |
+--------+---------------+----------------+---------+------+
| VTODO | [RFC5545], | entries | Section | |
| | Section 3.6.2 | | 2.2.5 | |
+--------+---------------+----------------+---------+------+
Table 2: Components of the VCALENDAR component
Other properties or components MAY be converted to the "iCalendar"
property (Section 5.1.1) of the Group object.
Stepanek Expires 9 May 2026 [Page 10]
Internet-Draft JSCalendar November 2025
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
...
{
"@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
Stepanek Expires 9 May 2026 [Page 11]
Internet-Draft JSCalendar November 2025
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:
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"
}
},
"recurrenceRule": {
"@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
Stepanek Expires 9 May 2026 [Page 12]
Internet-Draft JSCalendar November 2025
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".
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"
}
],
"...": ""
}
Stepanek Expires 9 May 2026 [Page 13]
Internet-Draft JSCalendar November 2025
Figure 8: Converting VEVENT recurrence instances
2.1.3. JSCalendar Ids
JSCalendar generally uses JSON objects to represent a collection of
same-typed values. The keys are of type Id [jscalendarbis]
(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.
If the JSID parameter (Section 4.2.1) or JSID property
(Section 4.1.1) is set on a property or component, then its value
MUST be used as key when converting that element from iCalendar to
JSCalendar. In absence of the JSID parameter or property key
generation is implementation-specific.
Some sections later in this document describe key generation schemes
for specific iCalendar elements by making use of UUID Version 5 with
SHA1 hash [RFC9562] (Section 5.5). The Namespace ID to generate such
keys is "7f1e1965-ae73-4454-b088-232c90730ce2". These key generation
schemes are not mandatory, nor is making use of that particular
Namespace ID when using UUID Version 5 (UUIDv5) as keys.
Irrespective of the key generation scheme, all keys MUST be valid
according to the definition of the Id type. For consistency, keys
SHOULD be stable such that converting the same iCalendar data to
JSCalendar multiple times produces the same keys.
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 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 type is DATE-TIME in FORM #2: DATE WITH UTC
TIME [RFC5545] (Section 3.3.5) then the timezone identifier is "Etc/
UTC" in JSCalendar.
If the property value 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 as
follows:
Stepanek Expires 9 May 2026 [Page 14]
Internet-Draft JSCalendar November 2025
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.
Otherwise, how to convert the TZID parameter value is implementation-
specific: software libraries such as the International Components for
Unicode (https://icu.unicode.org/) support converting Microsoft time
zone names to IANA time zone identifiers. Alternatively, an
implementation might determine the name of an IANA time zone which
has identical time zone rules over the time span of the calendar
object.
Implementations MAY preserve a TZID parameter set to a non-IANA
timezone identifier and its related VTIMEZONE by use of the
"convertedProperties" and "components" properties (see
Section 5.1.1), but MUST NOT expect other implementations to consider
them when processing the calendar object. See Figure 41 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.
When converting from iCalendar to JSCalendar, 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.
Section 3.2 defines which iCalendar value type to choose when
converting from JSCalendar to iCalendar.
2.2. Components
2.2.1. PARTICIPANT
The PARTICIPANT component [RFC9073] (Section 7.1) in a VEVENT or
VTODO component converts to a Participant object [jscalendarbis]
(Section 4.4.5). The converted object is set in the "participants"
property of the Event or Task object.
Stepanek Expires 9 May 2026 [Page 15]
Internet-Draft JSCalendar November 2025
The key of the Participant object MUST be the value of the JSID
property (Section 4.1.1), if set. If no JSID property but the
CALENDAR-ADDRESS property is set, then the key MAY be a UUIDv5
generated from the property value (see Section 2.1.3). Otherwise,
the key MAY be the UID property value. When converting to iCalendar,
implementations MAY omit setting the JSID property if key matches the
UUIDv5 of the CALENDAR-ADDRESS property value or the key matches the
UID property, and the key is not part of a JSON pointer in any JSPTR
parameter value.
Its properties convert as follows:
+====================+============+=================+=========+====+
| Name | Reference | Participant | See |Note|
| | | property | | |
+====================+============+=================+=========+====+
| ATTACH | [RFC5545], | links | Section | |
| | Section | | 2.3.3 | |
| | 3.8.1.1 | | | |
+--------------------+------------+-----------------+---------+----+
| CALENDAR-ADDRESS | [RFC9073], | calendarAddress | Section | |
| | Section | | 2.3.5 | |
| | 6.4 | | | |
+--------------------+------------+-----------------+---------+----+
| DESCRIPTION | [RFC5545], | description | Section | |
| | Section | | 2.3.13 | |
| | 3.8.1.5 | | | |
+--------------------+------------+-----------------+---------+----+
| LINK | [RFC9253], | links | Section | |
| | Section | | 2.3.24 | |
| | 8.2 | | | |
+--------------------+------------+-----------------+---------+----+
| STYLED-DESCRIPTION | [RFC9073], | description | Section | |
| | Section | | 2.3.41 | |
| | 6.5 | | | |
+--------------------+------------+-----------------+---------+----+
| SUMMARY | [RFC5545], | name | Section | |
| | Section | | 2.3.42 | |
| | 3.8.1.12 | | | |
+--------------------+------------+-----------------+---------+----+
Table 3: Properties of the PARTICIPANT component
Other properties or components MAY be converted to the "iCalendar"
property (Section 5.1.1) of the Participant object. This includes
mandatory properties such as UID [RFC5545] (Section 3.8.4.7).
Stepanek Expires 9 May 2026 [Page 16]
Internet-Draft JSCalendar November 2025
The following example illustrates how to convert the PARTICIPANT
component:
BEGIN:PARTICIPANT
UID:47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2
DESCRIPTION:A participant
...
END:PARTICIPANT
"participants": {
"47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2": {
"@type": "Participant",
"description": "A participant",
"iCalendar": {
"@type": "ICalComponent",
"name": "participant",
"properties": [
[
"uid",
{},
"text",
"47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2"
]
]
}
}
}
Figure 9: Converting the PARTICIPANT component
2.2.2. VALARM
The VALARM component [RFC5545] (Section 3.6.6) in a VEVENT or VTODO
component converts to an Alert object [jscalendarbis]
(Section 4.5.1). The converted object is set in the "alerts"
property of the Event or Task object.
The key of the Alert object MUST be the value of the JSID property
(Section 4.1.1), if set. Otherwise, the key MAY be the value of the
UID property. When converting to iCalendar, implementations MAY omit
setting the JSID property if the key matches the value of the UID
property, and the key is not part of a JSON pointer in any JSPTR
parameter value.
Its properties convert as follows:
Stepanek Expires 9 May 2026 [Page 17]
Internet-Draft JSCalendar November 2025
+==============+============+==============+=========+===========+
| 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.35 | |
| | 3.8.4.5 | | | |
+--------------+------------+--------------+---------+-----------+
| TRIGGER | [RFC5545], | trigger | Section | |
| | Section | | 2.3.44 | |
| | 3.8.6.3 | | | |
+--------------+------------+--------------+---------+-----------+
Table 4: Properties of the VALARM component
Other properties or components MAY be converted to the "iCalendar"
property (Section 5.1.1) 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:VALARM
UID:04DC2968-6468-4B92-BC09-5A17D7D3D4E
TRIGGER:-PT30M
ACTION:DISPLAY
DESCRIPTION:Breakfast meeting
END:VALARM
Stepanek Expires 9 May 2026 [Page 18]
Internet-Draft JSCalendar November 2025
"alerts": {
"04DC2968-6468-4B92-BC09-5A17D7D3D4E": {
"@type": "Alert",
"iCalendar": {
"@type": "ICalComponent",
"name": "valarm",
"properties": [
[
"description",
{},
"text",
"Breakfast meeting"
],
[
"uid",
{},
"text",
"04DC2968-6468-4B92-BC09-5A17D7D3D4E"
]
]
},
"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 [jscalendarbis] (Section 2.1). Its properties convert as
follows:
+============+================+========================+=======+====+
|Name |Reference |Event property |See |Note|
+============+================+========================+=======+====+
|ATTACH |[RFC5545], |links |Section| |
| |Section 3.8.1.1 | |2.3.3 | |
+------------+----------------+------------------------+-------+----+
|ATTENDEE |[RFC5545], |participants |Section| |
| |Section 3.8.4.1 | |2.3.4 | |
+------------+----------------+------------------------+-------+----+
|CATEGORIES |[RFC5545], |keywords |Section| |
| |Section 3.8.1.2 | |2.3.6 | |
Stepanek Expires 9 May 2026 [Page 19]
Internet-Draft JSCalendar November 2025
+------------+----------------+------------------------+-------+----+
|CLASS |[RFC5545], |privacy |Section| |
| |Section 3.8.1.3 | |2.3.7 | |
+------------+----------------+------------------------+-------+----+
|COLOR |[RFC7986], |color |Section| |
| |Section 5.9 | |2.3.8 | |
+------------+----------------+------------------------+-------+----+
|CONCEPT |[RFC9253], |categories |Section| |
| |Section 8.1 | |2.3.9 | |
+------------+----------------+------------------------+-------+----+
|CONFERENCE |[RFC7986], |virtualLocations |Section| |
| |Section 5.11 | |2.3.10 | |
+------------+----------------+------------------------+-------+----+
|CREATED |[RFC5545], |created |Section| |
| |Section 3.8.7.1 | |2.3.12 | |
+------------+----------------+------------------------+-------+----+
|DESCRIPTION |[RFC5545], |description |Section| |
| |Section 3.8.1.5 | |2.3.13 | |
+------------+----------------+------------------------+-------+----+
|DTEND |[RFC5545], |duration, endTimeZone |Section| |
| |Section 3.8.2.2 | |2.3.14 | |
+------------+----------------+------------------------+-------+----+
|DTSTAMP |[RFC5545], |updated |Section| |
| |Section 3.8.7.2 | |2.3.15 | |
+------------+----------------+------------------------+-------+----+
|DTSTART |[RFC5545], |start |Section| |
| |Section 3.8.2.4 | |2.3.16 | |
+------------+----------------+------------------------+-------+----+
|DURATION |[RFC5545], |duration |Section| |
| |Section 3.8.2.5 | |2.3.18 | |
+------------+----------------+------------------------+-------+----+
|EXDATE |[RFC5545], |recurrenceOverrides |Section| |
| |Section 3.8.5.1 | |2.3.20 | |
+------------+----------------+------------------------+-------+----+
|GEO |[RFC5545], |locations |Section| |
| |Section 3.8.1.6 | |2.3.21 | |
+------------+----------------+------------------------+-------+----+
|IMAGE |[RFC7986], |links |Section| |
| |Section 5.10 | |2.3.22 | |
+------------+----------------+------------------------+-------+----+
|LAST- |[RFC5545], |updated |Section| |
|MODIFIED |Section 3.8.7.3 | |2.3.23 | |
+------------+----------------+------------------------+-------+----+
|LINK |[RFC9253], |links |Section| |
| |Section 8.2 | |2.3.24 | |
+------------+----------------+------------------------+-------+----+
|LOCATION |[RFC5545], |locations |Section| |
| |Section 3.8.1.7 | |2.3.25 | |
Stepanek Expires 9 May 2026 [Page 20]
Internet-Draft JSCalendar November 2025
+------------+----------------+------------------------+-------+----+
|ORGANIZER |[RFC5545], |organizerCalendarAddress|Section| |
| |Section 3.8.4.3 | |2.3.29 | |
+------------+----------------+------------------------+-------+----+
|PRIORITY |[RFC5545], |priority |Section| |
| |Section 3.8.1.9 | |2.3.31 | |
+------------+----------------+------------------------+-------+----+
|RDATE |[RFC5545], |recurrenceOverrides |Section| |
| |Section 3.8.5.2 | |2.3.33 | |
+------------+----------------+------------------------+-------+----+
|RECURRENCE- |[RFC5545], |recurrenceId |Section| |
|ID |Section 3.8.4.4 | |2.3.34 | |
+------------+----------------+------------------------+-------+----+
|RELATED-TO |[RFC5545], |relatedTo |Section| |
| |Section 3.8.4.5 | |2.3.35 | |
+------------+----------------+------------------------+-------+----+
|RRULE |[RFC5545], |recurrenceRule |Section| |
| |Section 3.8.5.3 | |2.3.36 | |
+------------+----------------+------------------------+-------+----+
|SEQUENCE |[RFC5545], |sequence |Section| |
| |Section 3.8.7.4 | |2.3.37 | |
+------------+----------------+------------------------+-------+----+
|SHOW- |[icaljscalexts],|showWithoutTime |Section| |
|WITHOUT- |Section 4.2 | |2.3.38 | |
|TIME | | | | |
+------------+----------------+------------------------+-------+----+
|STATUS |[RFC5545], |status |Section| |
| |Section 3.8.1.11| |2.3.39 | |
+------------+----------------+------------------------+-------+----+
|STYLED- |[RFC9073], |description |Section| |
|DESCRIPTION |Section 6.5 | |2.3.41 | |
+------------+----------------+------------------------+-------+----+
|SUMMARY |[RFC5545], |title |Section| |
| |Section 3.8.1.12| |2.3.42 | |
+------------+----------------+------------------------+-------+----+
|TRANSP |[RFC5545], |freeBusyStatus |Section| |
| |Section 3.8.2.7 | |2.3.43 | |
+------------+----------------+------------------------+-------+----+
|UID |[RFC5545], |uid |Section| |
| |Section 3.8.4.7 | |2.3.45 | |
+------------+----------------+------------------------+-------+----+
Table 5: Properties of the VEVENT component
Its components convert as follows:
Stepanek Expires 9 May 2026 [Page 21]
Internet-Draft JSCalendar November 2025
+========+===============+================+=========+======+
| Name | Reference | Event property | See | Note |
+========+===============+================+=========+======+
| VALARM | [RFC5545], | alerts | Section | |
| | Section 3.6.6 | | 2.2.2 | |
+--------+---------------+----------------+---------+------+
Table 6: Components of the VEVENT component
Other properties or components MAY be converted to the "iCalendar"
property (Section 5.1.1) 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 9 May 2026 [Page 22]
Internet-Draft JSCalendar November 2025
Figure 11: Converting the VEVENT component
2.2.4. VLOCATION
The VLOCATION component [RFC9073] (Section 7.2) in a VEVENT or VTODO
component converts to a Location object [jscalendarbis]
(Section 4.2.5). The converted object is set in the "locations"
property of the Event or Task object.
The key of the Location object MUST be the value of the JSID property
(Section 4.1.1), if set. Otherwise, the key MAY be the value of the
UID property. When converting to iCalendar, implementations MAY omit
setting the JSID property if the key matches the value of the UID
property, and the key is not part of a JSON pointer in any JSPTR
parameter value.
Its properties convert as follows:
+===============+==================+===============+=========+====+
| Name | Reference | Location | See |Note|
| | | property | | |
+===============+==================+===============+=========+====+
| ATTACH | [RFC5545], | links | Section | |
| | Section 3.8.1.1 | | 2.3.3 | |
+---------------+------------------+---------------+---------+----+
| COORDINATES | [icaljscalexts], | coordinates | Section | |
| | Section 4.1 | | 2.3.11 | |
+---------------+------------------+---------------+---------+----+
| GEO | [RFC5545], | coordinates | Section | |
| | Section 3.8.1.6 | | 2.3.21 | |
+---------------+------------------+---------------+---------+----+
| IMAGE | [RFC7986], | links | Section | |
| | Section 5.10 | | 2.3.22 | |
+---------------+------------------+---------------+---------+----+
| LINK | [RFC9253], | links | Section | |
| | Section 8.2 | | 2.3.24 | |
+---------------+------------------+---------------+---------+----+
| LOCATION-TYPE | [RFC9073], | locationTypes | Section | |
| | Section 6.1 | | 2.3.26 | |
+---------------+------------------+---------------+---------+----+
| NAME | [RFC7986], | name | Section | |
| | Section 5.1 | | 2.3.28 | |
+---------------+------------------+---------------+---------+----+
Table 7: Properties of the VLOCATION component
Stepanek Expires 9 May 2026 [Page 23]
Internet-Draft JSCalendar November 2025
Other properties or components MAY be converted to the "iCalendar"
property (Section 5.1.1) 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": {
"4954DC22-5BD6-4E98-844D-0302982F54AC": {
"@type": "Location",
"name": "The venue",
"iCalendar": {
"@type": "ICalComponent",
"name": "vlocation",
"properties": [
[
"structured-data",
{},
"uri",
"http://dir.example.com/venues/big-hall.vcf"
],
[
"uid",
{},
"text",
"4954DC22-5BD6-4E98-844D-0302982F54AC"
]
]
}
}
}
Figure 12: Converting the VLOCATION component
2.2.5. VTODO
The VTODO component [RFC5545] (Section 3.6.2) converts to a Task
object [jscalendarbis] (Section 2.2). Its properties convert as
follows:
Stepanek Expires 9 May 2026 [Page 24]
Internet-Draft JSCalendar November 2025
+============+================+========================+=======+====+
|Name |Reference |Task property |See |Note|
+============+================+========================+=======+====+
|ATTACH |[RFC5545], |links |Section| |
| |Section 3.8.1.1 | |2.3.3 | |
+------------+----------------+------------------------+-------+----+
|ATTENDEE |[RFC5545], |participants |Section| |
| |Section 3.8.4.1 | |2.3.4 | |
+------------+----------------+------------------------+-------+----+
|CATEGORIES |[RFC5545], |keywords |Section| |
| |Section 3.8.1.2 | |2.3.6 | |
+------------+----------------+------------------------+-------+----+
|CLASS |[RFC5545], |privacy |Section| |
| |Section 3.8.1.3 | |2.3.7 | |
+------------+----------------+------------------------+-------+----+
|COLOR |[RFC7986], |color |Section| |
| |Section 5.9 | |2.3.8 | |
+------------+----------------+------------------------+-------+----+
|CONCEPT |[RFC9253], |categories |Section| |
| |Section 8.1 | |2.3.9 | |
+------------+----------------+------------------------+-------+----+
|CONFERENCE |[RFC7986], |virtualLocations |Section| |
| |Section 5.11 | |2.3.10 | |
+------------+----------------+------------------------+-------+----+
|CREATED |[RFC5545], |created |Section| |
| |Section 3.8.7.1 | |2.3.12 | |
+------------+----------------+------------------------+-------+----+
|DESCRIPTION |[RFC5545], |description |Section| |
| |Section 3.8.1.5 | |2.3.13 | |
+------------+----------------+------------------------+-------+----+
|DTSTAMP |[RFC5545], |updated |Section| |
| |Section 3.8.7.2 | |2.3.15 | |
+------------+----------------+------------------------+-------+----+
|DTSTART |[RFC5545], |start |Section| |
| |Section 3.8.2.4 | |2.3.16 | |
+------------+----------------+------------------------+-------+----+
|DUE |[RFC5545], |due |Section| |
| |Section 3.8.2.3 | |2.3.17 | |
+------------+----------------+------------------------+-------+----+
|DURATION |[RFC5545], |duration |Section| |
| |Section 3.8.2.5 | |2.3.18 | |
+------------+----------------+------------------------+-------+----+
|ESTIMATED- |[ical-tasks], |estimatedDuration |Section| |
|DURATION |Section 12.1 | |2.3.19 | |
+------------+----------------+------------------------+-------+----+
|EXDATE |[RFC5545], |recurrenceOverrides |Section| |
| |Section 3.8.5.1 | |2.3.20 | |
+------------+----------------+------------------------+-------+----+
Stepanek Expires 9 May 2026 [Page 25]
Internet-Draft JSCalendar November 2025
|GEO |[RFC5545], |locations |Section| |
| |Section 3.8.1.6 | |2.3.21 | |
+------------+----------------+------------------------+-------+----+
|IMAGE |[RFC7986], |links |Section| |
| |Section 5.10 | |2.3.22 | |
+------------+----------------+------------------------+-------+----+
|LAST- |[RFC5545], |updated |Section| |
|MODIFIED |Section 3.8.7.3 | |2.3.23 | |
+------------+----------------+------------------------+-------+----+
|LINK |[RFC9253], |links |Section| |
| |Section 8.2 | |2.3.24 | |
+------------+----------------+------------------------+-------+----+
|LOCATION |[RFC5545], |locations |Section| |
| |Section 3.8.1.7 | |2.3.25 | |
+------------+----------------+------------------------+-------+----+
|ORGANIZER |[RFC5545], |organizerCalendarAddress|Section| |
| |Section 3.8.4.3 | |2.3.29 | |
+------------+----------------+------------------------+-------+----+
|PERCENT- |[RFC5545], |percentComplete |Section| |
|COMPLETE |Section 3.8.1.8 | |2.3.30 | |
+------------+----------------+------------------------+-------+----+
|PRIORITY |[RFC5545], |priority |Section| |
| |Section 3.8.1.9 | |2.3.31 | |
+------------+----------------+------------------------+-------+----+
|RDATE |[RFC5545], |recurrenceOverrides |Section| |
| |Section 3.8.5.2 | |2.3.33 | |
+------------+----------------+------------------------+-------+----+
|RECURRENCE- |[RFC5545], |recurrenceId |Section| |
|ID |Section 3.8.4.4 | |2.3.34 | |
+------------+----------------+------------------------+-------+----+
|RELATED-TO |[RFC5545], |relatedTo |Section| |
| |Section 3.8.4.5 | |2.3.35 | |
+------------+----------------+------------------------+-------+----+
|RRULE |[RFC5545], |recurrenceRule |Section| |
| |Section 3.8.5.3 | |2.3.36 | |
+------------+----------------+------------------------+-------+----+
|SEQUENCE |[RFC5545], |sequence |Section| |
| |Section 3.8.7.4 | |2.3.37 | |
+------------+----------------+------------------------+-------+----+
|SHOW- |[icaljscalexts],|showWithoutTime |Section| |
|WITHOUT- |Section 4.2 | |2.3.38 | |
|TIME | | | | |
+------------+----------------+------------------------+-------+----+
|STYLED- |[RFC9073], |description |Section| |
|DESCRIPTION |Section 6.5 | |2.3.41 | |
+------------+----------------+------------------------+-------+----+
|SUMMARY |[RFC5545], |title |Section| |
| |Section 3.8.1.12| |2.3.42 | |
Stepanek Expires 9 May 2026 [Page 26]
Internet-Draft JSCalendar November 2025
+------------+----------------+------------------------+-------+----+
|TRANSP |[RFC5545], |freeBusyStatus |Section| |
| |Section 3.8.2.7 | |2.3.43 | |
+------------+----------------+------------------------+-------+----+
|UID |[RFC5545], |uid |Section| |
| |Section 3.8.4.7 | |2.3.45 | |
+------------+----------------+------------------------+-------+----+
Table 8: 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 9: Components of the VTODO component
Other properties or components MAY be converted to the "iCalendar"
property (Section 5.1.1) 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:
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"
}
]
}
Stepanek Expires 9 May 2026 [Page 27]
Internet-Draft JSCalendar November 2025
Figure 13: 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 [jscalendarbis]
(Section 4.5.1) of the Alert object.
The following example illustrates how to convert the ACKNOWLEDGED
property:
BEGIN:VEVENT
BEGIN:VALARM
ACKNOWLEDGED:20241002T114703Z
...
"alerts": {
"1204B2FA-E4A0-4335-B7CD-0DDC09C9B890": {
"@type": "Alert",
"acknowledged": "2024-10-02T11:47:03Z",
"...": ""
}
}
Figure 14: Converting the ACKNOWLEDGED property
2.3.2. ACTION
The ACTION property [RFC5545] (Section 3.8.6.1) in a VALARM component
converts to the "action" property [jscalendarbis] (Section 4.5.1) of
the Alert object.
Its values convert as follows:
+=================+==================+
| iCalendar value | JSCalendar value |
+=================+==================+
| DISPLAY | display |
+-----------------+------------------+
| EMAIL | email |
+-----------------+------------------+
Table 10: Values of the ACTION
property
Stepanek Expires 9 May 2026 [Page 28]
Internet-Draft JSCalendar November 2025
An ACTION property with value AUDIO or any other not listed in
Table 10 does not convert to the "action" property. Instead, the
property converts to the iCalendar/properties property
(Section 5.1.1) of the Alert.
The following examples illustrate how to convert the ACTION property:
BEGIN:VEVENT
BEGIN:VALARM
ACTION:DISPLAY
...
"alerts": {
"02E4CAD6-B7A7-4EE4-93A6-4AA5AFD080E2": {
"@type": "Alert",
"action": "display",
"...": ""
}
}
Figure 15: Converting the ACTION property for value DISPLAY
BEGIN:VEVENT
BEGIN:VALARM
ACTION:AUDIO
...
"alerts": {
"FC529A2B-D10F-461D-BDCF-55C77BB4B933": {
"@type": "Alert",
"iCalendar": {
"@type": "ICalComponent",
"name": "valarm",
"properties": [
[
"action",
{},
"text",
"AUDIO"
]
]
},
"...": ""
}
}
Figure 16: Converting the ACTION property for value AUDIO
Stepanek Expires 9 May 2026 [Page 29]
Internet-Draft JSCalendar November 2025
2.3.3. ATTACH
The ATTACH property [RFC5545] (Section 3.8.1.1) in a VEVENT, VTODO,
PARTICIPANT, VLOCATION, or VCALENDAR component converts to a Link
object [jscalendarbis] (Section 1.4.11). The converted object is set
in the "links" property of the Event, Task, Participant, Location, or
Group object.
The key of the Link object MUST be the value of the JSID parameter
(Section 4.2.1), if set. If no JSID parameter is set, then the key
MAY be the UUIDv5 generated from the property value (see
Section 2.1.3). When converting to iCalendar, implementations MAY
omit setting the JSID parameter if the key matches the UUIDv5 of the
ATTACH property value and the key is not part of a JSON pointer in
any JSPTR parameter value.
The ATTACH 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 MUST 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 | |
+---------+--------------------------+---------------+------+
| LABEL | [RFC7986], Section 6.4 | title | |
+---------+--------------------------+---------------+------+
| SIZE | [RFC8607], Section 4.1 | size | |
+---------+--------------------------+---------------+------+
Table 11: Parameters of the ATTACH property
Remarks:
The following examples illustrate how to convert the ATTACH property:
ATTACH:https://example.com/foo.pdf
"links": {
"245708bf-8e07-5d3b-a5da-2974a63c3b91": {
"@type": "Link",
"href": "https://example.com/foo.pdf"
}
}
Stepanek Expires 9 May 2026 [Page 30]
Internet-Draft JSCalendar November 2025
Figure 17: Converting the ATTACH property with URI value
ATTACH;ENCODING=BASE64;VALUE=BINARY;FMTTYPE=image/png:iVBORw
0KGgoAAAANSUhEUgAAAAEAAAABAQAAAAA3bvkkAAAAAmJLR0QAAd2KE6QAA
AAKSURBVAjXY2gAAACCAIHdQ2r0AAAAAElFTkSuQmCC
"links": {
"7beac36a-9287-57cb-96ab-dd2fc91163a2": {
"@type": "Link",
"href": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQAAAAA3bvkkAAAAAmJLR0QAAd2KE6QAAAAKSURBVAjXY2gAAACCAIHdQ2r0AAAAAElFTkSuQmCC",
"contentType": "image/png",
"...": ""
}
}
Figure 18: 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 [jscalendarbis]
(Section 4.4.5). The converted object is set in the "participants"
property of the Event or Task object. The property value converts to
the calendarAddress property of the Participant object.
The key of the Participant object MUST be the value of the JSID
parameter (Section 4.2.1), if set. If no JSID parameter is set, then
the key MAY be the UUIDv5 generated from the property value (see
Section 2.1.3). When converting to iCalendar, implementations MAY
omit setting the JSID parameter if the key matches the UUIDv5 of the
ATTENDEE property value and the key is not part of a JSON pointer in
any JSPTR parameter value.
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. How to deal
with conflicting values is implementation-specific.
The ATTENDEE property parameters convert as follows:
Stepanek Expires 9 May 2026 [Page 31]
Internet-Draft JSCalendar November 2025
+==============+==========+=====================+=================+
|Name |Reference | Participant | Note |
| | | Property | |
+==============+==========+=====================+=================+
|CN |[RFC5545],| name | |
| |Section | | |
| |3.2.2 | | |
+--------------+----------+---------------------+-----------------+
|CUTYPE |[RFC5545],| kind | ROOM converts |
| |Section | | to "location" |
| |3.2.3 | | |
+--------------+----------+---------------------+-----------------+
|DELEGATED-FROM|[RFC5545],| delegatedFrom | |
| |Section | | |
| |3.2.4 | | |
+--------------+----------+---------------------+-----------------+
|DELEGATED-TO |[RFC5545],| delegatedTo | |
| |Section | | |
| |3.2.5 | | |
+--------------+----------+---------------------+-----------------+
|EMAIL |[RFC7986],| email | |
| |Section | | |
| |6.2 | | |
+--------------+----------+---------------------+-----------------+
|MEMBER |[RFC5545],| memberOf | |
| |Section | | |
| |3.2.11 | | |
+--------------+----------+---------------------+-----------------+
|PARTSTAT |[RFC5545],| participationStatus | |
| |Section | | |
| |3.2.12 | | |
+--------------+----------+---------------------+-----------------+
|ROLE |[RFC5545],| roles | OWNER role |
| |Section | | defined in |
| |3.2.16 | | [icaljscalexts] |
+--------------+----------+---------------------+-----------------+
|RSVP |[RFC5545],| expectReply | |
| |Section | | |
| |3.2.17 | | |
+--------------+----------+---------------------+-----------------+
|SENT-BY |[RFC5545],| sentBy | |
| |Section | | |
| |3.2.18 | | |
+--------------+----------+---------------------+-----------------+
Table 12: Parameters of the ATTENDEE property
Stepanek Expires 9 May 2026 [Page 32]
Internet-Draft JSCalendar November 2025
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-ACTION | [RFC5545], | needs-action | |
| | Section 3.2.12 | | |
+--------------+----------------+---------------------+------------+
| ACCEPTED | [RFC5545], | accepted | |
| | Section 3.2.12 | | |
+--------------+----------------+---------------------+------------+
| DECLINED | [RFC5545], | declined | |
| | Section 3.2.12 | | |
+--------------+----------------+---------------------+------------+
| TENTATIVE | [RFC5545], | tentative | |
| | Section 3.2.12 | | |
+--------------+----------------+---------------------+------------+
| DELEGATED | [RFC5545], | delegated | |
| | Section 3.2.12 | | |
+--------------+----------------+---------------------+------------+
| COMPLETED | [RFC5545], | accepted | completed |
| | Section 3.2.12 | | |
+--------------+----------------+---------------------+------------+
| IN-PROCESS | [RFC5545], | accepted | in-process |
| | Section 3.2.12 | | |
+--------------+----------------+---------------------+------------+
| FAILED | [ical-tasks], | accepted | failed |
| | Section 11.1 | | |
+--------------+----------------+---------------------+------------+
Table 13: Converting the PARTSTAT parameter in a VTODO component
to Participant properties
The following examples illustrate how to convert the ATTENDEE
property:
ATTENDEE;RSVP=TRUE;PARTSTAT=TENTATIVE;CN=Henry Cabot:mailto:hcabot@example.com
ORGANIZER:mailto:organizer@example.com
Stepanek Expires 9 May 2026 [Page 33]
Internet-Draft JSCalendar November 2025
"participants": {
"0b235cc4-f04d-5fc4-98a3-c066650b3fbf": {
"@type": "Participant",
"calendarAddress": "mailto:hcabot@example.com",
"name": "Henry Cabot",
"participationStatus": "tentative",
"expectReply": true
},
"251d3e9f-d83f-534c-8c45-c2896c75670c": {
"@type": "Participant",
"calendarAddress": "mailto:organizer@example.com",
"roles": {
"owner": true
}
}
},
"organizerCalendarAddress": "mailto:organizer@example.com"
Figure 19: Converting the ATTENDEE property
BEGIN:PARTICIPANT
UID:6CF544E4-BBC7-45A2-97FF-DFD1908CCE40
CALENDAR-ADDRESS:mailto:foo@example.com
DESCRIPTION:some description
...
END:PARTICIPANT
ATTENDEE;RSVP=TRUE;PARTSTAT=TENTATIVE:mailto:foo@example.com
ORGANIZER:mailto:organizer@example.com
Stepanek Expires 9 May 2026 [Page 34]
Internet-Draft JSCalendar November 2025
"participants": {
"59eb121c-e8f2-558a-9049-ef750a5976bd": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"participationStatus": "tentative",
"expectReply": true,
"description": "some description",
"iCalendar": {
"@type": "ICalComponent",
"name": "participant",
"properties": [
[
"uid",
{},
"text",
"6CF544E4-BBC7-45A2-97FF-DFD1908CCE40"
]
]
},
"...": ""
},
"251d3e9f-d83f-534c-8c45-c2896c75670c": {
"@type": "Participant",
"calendarAddress": "mailto:organizer@example.com",
"...": ""
}
},
"organizerCalendarAddress": "mailto:organizer@example.com"
Figure 20: Converting the ATTENDEE property and PARTICIPANT component
BEGIN:VTODO
ATTENDEE;RSVP=TRUE;PARTSTAT=COMPLETED:mailto:foo@example.com
ORGANIZER:mailto:organizer@example.com
...
Stepanek Expires 9 May 2026 [Page 35]
Internet-Draft JSCalendar November 2025
"@type": "Task",
"participants": {
"59eb121c-e8f2-558a-9049-ef750a5976bd": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"participationStatus": "accepted",
"progress": "completed",
"expectReply": true,
"...": ""
},
"251d3e9f-d83f-534c-8c45-c2896c75670c": {
"@type": "Participant",
"calendarAddress": "mailto:organizer@example.com",
"...": ""
}
},
"organizerCalendarAddress": "mailto:organizer@example.com"
Figure 21: Converting the ATTENDEE property with a VTODO-specific
participation status
ATTENDEE;RSVP=TRUE:mailto:foo@example.com
ATTENDEE;ROLE=OWNER;RSVP=TRUE:mailto:bar@example.com
ORGANIZER:mailto:organizer@example.com
"participants": {
"59eb121c-e8f2-558a-9049-ef750a5976bd": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"expectReply": true
},
"5b6f4fa0-3695-53a7-904b-d0a6f8bc326f": {
"@type": "Participant",
"calendarAddress": "mailto:bar@example.com",
"expectReply": true,
"roles": {
"owner": true
}
}
},
"organizerCalendarAddress": "mailto:organizer@example.com"
Figure 22: Converting the ATTENDEE property with the OWNER role
2.3.5. CALENDAR-ADDRESS
The CALENDAR-ADDRESS property [RFC9073] (Section 6.4) in a
PARTICIPANT component converts to the "calendarAddress" property
[jmap-calendars] (Section 5.1.1) of the Participant object.
Stepanek Expires 9 May 2026 [Page 36]
Internet-Draft JSCalendar November 2025
Implementations MAY preserve the fact that a Participant object's
"calendarAddress" property converted from the CALENDAR-ADRESS
property of a PARTICIPANT component, rather than an ATTENDEE
property. In this case, they MUST add an entry for the
"calendarAddress" property in the "iCalendar/convertedProperties"
property of the Participant object.
The following example illustrates how to convert the CALENDAR-ADDRESS
property:
BEGIN:PARTICIPANT
CALENDAR-ADDRESS:mailto:foo@example.com
UID:47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2
...
END:PARTICIPANT
"participants": {
"59eb121c-e8f2-558a-9049-ef750a5976bd": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"iCalendar": {
"@type": "ICalComponent",
"name": "participant",
"convertedProperties": {
"calendarAddress": {
"@type": "ICalProperty",
"name": "calendar-address"
}
},
"properties": [
[
"uid",
{},
"text",
"47AD2E1C-49D4-45DF-BD83-8398ACC7D8E2"
]
]
}
}
}
Figure 23: Converting the CALENDAR-ADDRESS property
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
[jscalendarbis] (Section 4.2.10) of the Event, Task, or Group object.
Stepanek Expires 9 May 2026 [Page 37]
Internet-Draft JSCalendar November 2025
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:Favorites
CATEGORIES:Meeting
"keywords": {
"Favorites": true,
"Meeting": true
}
Figure 24: 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 [jscalendarbis]
(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 14: Values of the CLASS property
Any other value does not convert to the "class" property. Instead,
the property converts to the iCalendar/properties property
(Section 5.1.1) of the JSCalendar object.
The following example illustrates how to convert the CLASS property:
CLASS:PRIVATE
"privacy": "private"
Figure 25: Converting the CLASS property
Stepanek Expires 9 May 2026 [Page 38]
Internet-Draft JSCalendar November 2025
2.3.8. COLOR
The COLOR property [RFC7986] (Section 5.9) in a VEVENT, VTODO, or
VCALENDAR component converts to the "color" property [jscalendarbis]
(Section 4.2.12) 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 26: Converting the COLOR property with color name
COLOR:#ffa07a
"color": "#ffa07a"
Figure 27: Converting the COLOR property with numeric value
2.3.9. CONCEPT
The CONCEPT property [RFC9253] (Section 8.1) in a VEVENT, VTODO, or
VCALENDAR component converts to the "categories" property
[jscalendarbis] (Section 4.2.11) 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
"categories": {
"https://example.com/event-types/arts/music": true,
"https://example.com/event-types/arts/literature": true
}
Figure 28: Converting the CONCEPT property
Stepanek Expires 9 May 2026 [Page 39]
Internet-Draft JSCalendar November 2025
2.3.10. CONFERENCE
The CONFERENCE property [RFC7986] (Section 5.11) in a VEVENT or VTODO
component converts to a VirtualLocation object [jscalendarbis]
(Section 4.2.7). 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.
The key of the VirtualLocation object MUST be the value of the JSID
parameter (Section 4.2.1), if set. If no JSID parameter is set, then
the key MAY be the UUIDv5 generated from the property value (see
Section 2.1.3). When converting to iCalendar, implementations MAY
omit setting the JSID parameter if the key matches the UUIDv5 of the
CONFERENCE property value and the key is not part of a JSON pointer
in any JSPTR parameter value.
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 15: Parameters of the CONFERENCE property
The following example illustrates how to convert the CONFERENCE
property:
CONFERENCE;VALUE=URI;FEATURE=AUDIO,VIDEO;
LABEL="Web video chat, access code=76543"
:https://chat.example.com/audio?id=123456
Stepanek Expires 9 May 2026 [Page 40]
Internet-Draft JSCalendar November 2025
"virtualLocations": {
"67e4a1e9-cffc-5bd4-9602-1a5dfc8e1626": {
"@type": "VirtualLocation",
"name": "Web video chat, access code=76543",
"uri": "https://chat.example.com/audio?id=123456",
"features": {
"audio": true,
"video": true
}
}
}
Figure 29: Converting the CONFERENCE property
2.3.11. COORDINATES
The COORDINATES property [icaljscalexts] (Section 4.1) in a VLOCATION
component converts to the "coordinates" property [jscalendarbis]
(Section 4.2.5) of the Location object.
The following example illustrates how to convert the COORDINATES
property:
BEGIN:VEVENT
BEGIN:VLOCATION
COORDINATES;VALUE=URI:geo:48.198634,16.371648;crs=wgs84;u=40
...
"locations": {
"B995322D-2C00-4DE0-8958-DB6687CF3DB3": {
"@type": "Location",
"coordinates": "geo:48.198634,16.371648;crs=wgs84;u=40",
"...": ""
}
}
Figure 30: Converting the COORDINATES property
2.3.12. CREATED
The CREATED property [RFC5545] (Section 3.8.7.1) in a VEVENT, VTODO,
or VCALENDAR component converts to the "created" property
[jscalendarbis] (Section 4.1.4) 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"
Stepanek Expires 9 May 2026 [Page 41]
Internet-Draft JSCalendar November 2025
Figure 31: Converting the CREATED property
2.3.13. DESCRIPTION
The DESCRIPTION property [RFC5545] (Section 3.8.1.5) in a VEVENT,
VTODO, VCALENDAR, or PARTICIPANT component converts to the
"description" property [jscalendarbis] (Section 4.2.2) of the Event,
Task, Group, 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 "iCalendar" property
(Section 5.1.1).
The following example illustrates how to convert the DESCRIPTION
property:
DESCRIPTION:Their pancakes are delicious\; they are fluffy and sweet.
"description": "Their pancakes are delicious; they are fluffy and sweet."
Figure 32: Converting the DESCRIPTION property
2.3.14. DTEND
The DTEND property [RFC5545] (Section 3.8.2.2) in a VEVENT component
converts to the "duration" property [jscalendarbis] (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 it converts to the
"endTimeZone" property of the Event.
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 time
zone identifiers are not equal, then the presence of the
"endTimeZone" property implies that it converted from the DTEND
property. If the time zone identifiers are equal, then
implementations MAY set the "iCalendar" property (Section 5.1.1) in
the Event object and there add an entry for the path "duration" in
the "convertedProperties" property. The value MUST be an
ICalProperty object with the "name" property set to "dtend".
Stepanek Expires 9 May 2026 [Page 42]
Internet-Draft JSCalendar November 2025
The following examples illustrate how to convert the DTEND property:
DTSTART;TZID=Europe/Berlin:20241017T130000
DTEND;TZID=Asia/Bangkok:20241018T040000
"start": "2024-10-17T13:00:00",
"timeZone": "Europe/Berlin",
"duration": "PT10H",
"endTimeZone": "Asia/Bangkok"
Figure 33: Converting the DTEND property with different timezone
DTSTART;TZID=Australia/Melbourne:20241002T130000
DTEND;TZID=Australia/Melbourne:20241002T140000
"start": "2024-10-02T13:00:00",
"timeZone": "Australia/Melbourne",
"duration": "PT1H",
"iCalendar": {
"@type": "ICalComponent",
"name": "vevent",
"convertedProperties": {
"duration": {
"@type": "ICalProperty",
"name": "dtend"
}
}
}
Figure 34: Converting the DTEND property with same timezone
DTSTART;VALUE=DATE:20240102
DTEND;VALUE=DATE:20240107
"start": "2024-01-02T00:00:00",
"timeZone": null,
"duration": "P5D",
"showWithoutTime": true,
"iCalendar": {
"@type": "ICalComponent",
"name": "vevent",
"convertedProperties": {
"duration": {
"@type": "ICalProperty",
"name": "dtend"
}
}
}
Figure 35: Converting the DTEND property with DATE value type
Stepanek Expires 9 May 2026 [Page 43]
Internet-Draft JSCalendar November 2025
2.3.15. DTSTAMP
The DTSTAMP property [RFC5545] (Section 3.8.7.2) in a VEVENT or VTODO
component converts to the "updated" property [jscalendarbis]
(Section 4.1.5) of the Event or Task object.
The following examples illustrate how to convert the DTSTAMP
property:
BEGIN:VCALENDAR
METHOD:REPLY
BEGIN:VEVENT
DTSTAMP:20240304T132000Z
...
{
"@type": "Group",
"entries": [
{
"@type": "Event",
"method": "reply",
"updated": "2024-03-04T13:20:00Z",
"...": ""
}
],
"...": ""
}
Figure 36: Converting the DTSTAMP property in a VEVENT component
2.3.16. DTSTART
The DTSTART property [RFC5545] (Section 3.8.2.4) in a VEVENT or VTODO
component converts to the "start" property of the Event or Task
object (Sections 5.1.1 and 5.2.2 of [jscalendarbis]).
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 [jscalendarbis] (Section 4.2.4) is "true".
The following examples illustrate how to convert the DTSTART property
for the VEVENT and VTODO components.
DTSTART;TZID=Europe/Berlin:20240921T105302
Stepanek Expires 9 May 2026 [Page 44]
Internet-Draft JSCalendar November 2025
"start": "2024-09-21T10:53:02",
"timeZone": "Europe/Berlin",
"showWithoutTime": false
Figure 37: Converting the DTSTART property with TZID parameter
DTSTART:20240921T105302Z
"start": "2024-09-21T10:53:02",
"timeZone": "Etc/UTC",
"showWithoutTime": false
Figure 38: Converting the DTSTART property with UTC time
DTSTART:20240921T105302
"start": "2024-09-21T10:53:02",
"timeZone": null,
"showWithoutTime": false
Figure 39: Converting the DTSTART property with floating time
DTSTART;VALUE=DATE:20240921
"start": "2024-09-21T00:00:00",
"timeZone": null,
"showWithoutTime": true
Figure 40: Converting the DTSTART property with value type DATE
DTSTART;TZID="W. Europe Standard Time":20241121T105302
"start": "2024-11-21T10:53:02",
"timeZone": "Europe/Berlin",
"iCalendar": {
"@type": "ICalComponent",
"name": "vevent",
"convertedProperties": {
"start": {
"@type": "ICalProperty",
"name": "dtstart",
"parameters": {
"tzid": "W. Europe Standard Time"
}
}
}
}
Figure 41: Converting the DTSTART property with a non-IANA TZID
parameter
Stepanek Expires 9 May 2026 [Page 45]
Internet-Draft JSCalendar November 2025
2.3.17. DUE
The DUE property [RFC5545] (Section 3.8.2.3) in a VTODO component
converts to the "due" property [jscalendarbis] (Section 5.2.1) of the
Task object.
See Section 2.1.5 how to convert DATE and DATE-TIME values.
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 it contains both the
DUE and DTSTART properties and the timezone identifier of the DUE
property differs from that of the DTSTART property, then the "due"
date-time property value MUST be relative to the time zone of
DTSTART.
If the value type of the DUE property is DATE, then the value of the
"showWithoutTime" property [jscalendarbis] (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 42: 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 43: Converting the DUE property with UTC time
BEGIN:VTODO
DUE:20240921T105302
"@type": "Task",
"due": "2024-09-21T10:53:02",
"timeZone": null,
"showWithoutTime": false
Figure 44: Converting the DUE property with floating time
Stepanek Expires 9 May 2026 [Page 46]
Internet-Draft JSCalendar November 2025
BEGIN:VTODO
DUE;VALUE=DATE:20240921
"@type": "Task",
"due": "2024-09-21T00:00:00",
"timeZone": null,
"showWithoutTime": true
Figure 45: 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 46: Converting the DUE property with value type DATE in
combination with DTSTART
2.3.18. DURATION
The DURATION property [RFC5545] (Section 3.8.2.5) in a VEVENT or
VTODO component converts to the "duration" property [jscalendarbis]
(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 47: Converting the DURATION
2.3.19. ESTIMATED-DURATION
The ESTIMATED-DURATION property [ical-tasks] (Section 12.1) in a
VTODO component converts to the "estimatedDuration" property
[jscalendarbis] (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"
Stepanek Expires 9 May 2026 [Page 47]
Internet-Draft JSCalendar November 2025
Figure 48: Converting the ESTIMATED-DURATION
2.3.20. EXDATE
The EXDATE property [RFC5545] (Section 3.8.5.1) in a VEVENT or VTODO
component converts to a PatchObject value [jscalendarbis]
(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" member 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",
"recurrenceRule": {
"@type": "RecurrenceRule",
"frequency": "monthly"
},
"recurrenceOverrides": {
"2023-08-01T13:00:00": {
"excluded": true
}
}
Figure 49: Converting the EXDATE property
2.3.21. GEO
A GEO property with the DERIVED parameter value "TRUE" does not
convert to JSCalendar. For non-derived GEO properties, the following
rules apply:
The GEO property [RFC5545] (Section 3.8.1.6) in a VEVENT or VTODO
component converts to a Location object [jscalendarbis]
(Section 4.2.5). If the VEVENT or VTODO component also contains the
LOCATION property (Section 2.3.25), then the GEO and LOCATION
properties convert to the same Location object. The converted object
is set in the "locations" property of the Event or Task object.
Stepanek Expires 9 May 2026 [Page 48]
Internet-Draft JSCalendar November 2025
The key of the Location object MUST be the value of the JSID
parameter (Section 4.2.1), if set. If no JSID parameter is set, then
the key MAY be the UUIDv5 generated from the property value (see
Section 2.1.3). When converting to iCalendar, implementations MAY
omit setting the JSID parameter if the key matches the UUIDv5 of the
GEO property value and the key is not part of a JSON pointer in any
JSPTR parameter value.
The GEO property [RFC5545] (Section 3.8.1.6) in a VLOCATION component
converts to the "coordinates" property [jscalendarbis]
(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.
Implementations MAY preserve the fact that the coordinates converted
from a GEO property by setting the JSON pointer path to the
"coordinates" property in the "iCalendar/convertedProperties"
property. If the GEO property converted from a VEVENT or VTODO
component, then the "iCalendar" property MUST be that of the Event or
Task object, for the VLOCATION component it MUST be the "iCalendar"
property of the Location object.
The following examples illustrate how to convert the GEO property.
GEO;JSID=loc1:45.5;-93.3
"locations": {
"loc1": {
"@type": "Location",
"coordinates": "geo:45.5,-93.3"
}
},
"iCalendar": {
"@type": "ICalComponent",
"name": "vevent",
"convertedProperties": {
"locations/loc1/coordinates": {
"@type": "ICalProperty",
"name": "geo"
}
}
}
Stepanek Expires 9 May 2026 [Page 49]
Internet-Draft JSCalendar November 2025
Figure 50: Converting the GEO property in a VEVENT. The JSID
parameter is set to simplify testing.
LOCATION;JSID=loc1:Taj Mahal
GEO;JSID=loc1:27.175;78.041944
"locations": {
"loc1": {
"@type": "Location",
"name": "Taj Mahal",
"coordinates": "geo:27.175,78.041944",
"...": ""
}
},
"iCalendar": {
"@type": "ICalComponent",
"name": "vevent",
"convertedProperties": {
"locations/loc1/coordinates": {
"@type": "ICalProperty",
"name": "geo"
}
}
}
Figure 51: Converting the GEO and LOCATION properties in a
VEVENT. The JSID parameters are set to simplify testing.
BEGIN:VEVENT
BEGIN:VLOCATION
NAME:Eiffel Tower
GEO:48.858222;2.2945
...
Stepanek Expires 9 May 2026 [Page 50]
Internet-Draft JSCalendar November 2025
"locations": {
"8FC58765-4559-49BC-8718-A5E46FC433B9": {
"@type": "Location",
"name": "Eiffel Tower",
"coordinates": "geo:48.858222,2.2945",
"iCalendar": {
"@type": "ICalComponent",
"name": "vlocation",
"convertedProperties": {
"coordinates": {
"@type": "ICalProperty",
"name": "geo"
}
},
"...": ""
}
}
}
Figure 52: Converting the GEO property in a VLOCATION
2.3.22. IMAGE
The IMAGE property [RFC7986] (Section 5.10) in a VEVENT, VTODO,
VLOCATION, PARTICIPANT, or VCALENDAR component converts to a Link
object [jscalendarbis] (Section 1.4.11). The converted object is set
in the "links" property of the Event, Task, Location, Participant, or
Group object.
The key of the Link object MUST be the value of the JSID parameter
(Section 4.2.1), if set. If no JSID parameter is set, then the key
MAY be the UUIDv5 generated from the property value (see
Section 2.1.3). When converting to iCalendar, implementations MAY
omit setting the JSID parameter if the key matches the UUIDv5 of the
IMAGE property value and the key is not part of a JSON pointer in any
JSPTR parameter value.
The IMAGE 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:
Stepanek Expires 9 May 2026 [Page 51]
Internet-Draft JSCalendar November 2025
+=========+==========================+=============+======+
| Name | Reference | Property | Note |
+=========+==========================+=============+======+
| DISPLAY | [RFC7986], Section 6.1 | display | |
+---------+--------------------------+-------------+------+
| FMTTYPE | [RFC5545], Section 3.2.8 | contentType | |
+---------+--------------------------+-------------+------+
| LABEL | [RFC7986], Section 6.4 | title | |
+---------+--------------------------+-------------+------+
| SIZE | [RFC8607], Section 4.1 | size | |
+---------+--------------------------+-------------+------+
Table 16: Parameters of the IMAGE property
The following example illustrates how to convert the IMAGE property:
IMAGE;VALUE=URI;DISPLAY=BADGE,THUMBNAIL;LABEL=An image;FMTTYPE=image/png:
https://example.com/images/party.png
"links": {
"2c42ac17-1eaf-5a75-a216-aef848785d79": {
"@type": "Link",
"href": "https://example.com/images/party.png",
"display": {
"badge": true,
"thumbnail": true
},
"contentType": "image/png",
"title": "An image"
}
}
Figure 53: Converting the IMAGE property
2.3.23. LAST-MODIFIED
The LAST-MODIFIED property [RFC5545] (Section 3.8.7.3) in a VCALENDAR
component converts to the "updated" property [jscalendarbis]
(Section 4.1.5) of the Group object.
The LAST-MODIFIED property [RFC5545] (Section 3.8.7.3) in a VEVENT or
VTODO component does _not_ convert to the "updated" property
[jscalendarbis] (Section 4.1.5) of the Event or Task object.
Implementations MAY instead preserve the LAST-MODIFIED property in
the "iCalendar" property.
The following example illustrates how to convert the LAST-MODIFIED
property:
Stepanek Expires 9 May 2026 [Page 52]
Internet-Draft JSCalendar November 2025
BEGIN:VCALENDAR
LAST-MODIFIED:20240914T231257Z
...
"@type": "Group",
"updated": "2024-09-14T23:12:57Z"
Figure 54: Converting the IMAGE property
2.3.24. LINK
A LINK property [RFC9253] (Section 8.2) with value type URI in a
VEVENT, VTODO, PARTICIPANT, VLOCATION, or VCALENDAR component
converts to a Link object [jscalendarbis] (Section 1.4.11). The
converted object is set in the "links" property of the Event, Task,
Participant, Location, or Group object.
The key of the Link object MUST be the value of the JSID parameter
(Section 4.2.1), if set. If no JSID parameter is set, then the key
MAY be the UUIDv5 generated from the property value (see
Section 2.1.3). When converting to iCalendar, implementations MAY
omit setting the JSID parameter if the key matches the UUIDv5 of the
LINK property value and the key is not part of a JSON pointer in any
JSPTR parameter value.
The LINK property value converts to the "href" property of the Link
object.
The LINK property parameters convert as follows:
+=========+==========================+===============+======+
| Name | Reference | Link Property | Note |
+=========+==========================+===============+======+
| FMTTYPE | [RFC5545], Section 3.2.8 | contentType | |
+---------+--------------------------+---------------+------+
| LABEL | [RFC7986], Section 6.4 | title | |
+---------+--------------------------+---------------+------+
| LINKREL | [RFC9253], Section 6.1 | rel | |
+---------+--------------------------+---------------+------+
Table 17: Parameters of the LINK property
A LINK property with any other value type does not convert to a
standard JSCalendar element. Implementations MAY convert it to the
"iCalendar" property (Section 5.1.1).
The following example illustrates how to convert the LINK property:
Stepanek Expires 9 May 2026 [Page 53]
Internet-Draft JSCalendar November 2025
LINK;LINKREL="https://example.com/linkrel/source";LABEL=Venue;VALUE=URI:
https://example.com/events
"links": {
"63023b12-fcf4-53fa-841d-8c1684b9f80b": {
"@type": "Link",
"href": "https://example.com/events",
"title": "Venue",
"rel": "https://example.com/linkrel/source"
}
}
Figure 55: Converting the LINK property
2.3.25. LOCATION
The LOCATION property [RFC5545] (Section 3.8.1.7) in a VEVENT or
VTODO component converts to a Location object [jscalendarbis]
(Section 4.2.5), unless its DERIVED parameter value is TRUE. The
converted object is set in the "locations" property of the Event or
Task.
The key of the Location object MUST be the value of the JSID
parameter (Section 4.2.1), if set. If no JSID parameter is set, then
the key MAY be the UUIDv5 generated from the property value (see
Section 2.1.3). When converting to iCalendar, implementations MAY
omit setting the JSID parameter if the key matches the UUIDv5 of the
LOCATION property value and the key is not part of a JSON pointer in
any JSPTR parameter value.
The LOCATION property value converts to the "title" property of the
Location object.
If the calendar component contains multiple VLOCATION components,
then the LOCATION property also converts to the "mainLocationId"
property of the Event or Task object. If the LOCATION property does
not have the DERIVED parameter set to TRUE, then the "mainLocationId"
is set to the key of the Location object of the LOCATION property.
If instead the LOCATION property is derived and its property value
matches the NAME property value of a VLOCATION component, then the
"mainLocationId" is the identifier of the Location object of that
VLOCATION component.
The following example illustrates how to convert the LOCATION
property:
LOCATION:Conference Room - F123\, Bldg. 002
Stepanek Expires 9 May 2026 [Page 54]
Internet-Draft JSCalendar November 2025
"locations": {
"adde7a5b-2fb5-52aa-b760-595ea9edb80a": {
"@type": "Location",
"name": "Conference Room - F123, Bldg. 002",
"...": ""
}
}
Figure 56: Converting the LOCATION property
The following example illustrates how to convert the LOCATION
property and multiple VLOCATION components:
LOCATION;DERIVED=TRUE:Fred's Bar
BEGIN:VLOCATION
UID:12D2B3EC-AC84-4B70-9EB6-CFE6AD5830B0
NAME:Fred's Bar
LOCATION-TYPE:bar
...
END:VLOCATION
BEGIN:VLOCATION
UID:6B1C3968-38D2-46AF-B436-BF3F72D459D4
NAME:XYZ Parking
LOCATION-TYPE:parking
COORDINATES;VALUE=URI:geo:40.71427,-74.00597
...
END:VLOCATION
"locations": {
"12D2B3EC-AC84-4B70-9EB6-CFE6AD5830B0": {
"@type": "Location",
"name": "Fred's Bar",
"locationTypes": {
"bar": true
},
"...": ""
},
"6B1C3968-38D2-46AF-B436-BF3F72D459D4": {
"@type": "Location",
"name": "XYZ Parking",
"locationTypes": {
"parking": true
},
"coordinates": "geo:40.71427,-74.00597",
"...": ""
}
},
"mainLocationId": "12D2B3EC-AC84-4B70-9EB6-CFE6AD5830B0"
Stepanek Expires 9 May 2026 [Page 55]
Internet-Draft JSCalendar November 2025
Figure 57: Converting the LOCATION property and multiple
VLOCATION components
2.3.26. LOCATION-TYPE
The LOCATION-TYPE property [RFC9073] (Section 6.1) in a VLOCATION
component converts to the "locationTypes" property [jscalendarbis]
(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
...
"locations": {
"0EA3F99A-835E-49CC-970C-8A4707A4C076": {
"@type": "Location",
"locationTypes": {
"hotel": true,
"restaurant": true
},
"...": ""
}
}
Figure 58: Converting the LOCATION property
2.3.27. METHOD
The METHOD property [RFC5545] (Section 3.7.2) in a VCALENDAR
component converts to the "method" property [jscalendarbis]
(Section 4.1.7) 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:
Stepanek Expires 9 May 2026 [Page 56]
Internet-Draft JSCalendar November 2025
BEGIN:VCALENDAR
METHOD:REQUEST
BEGIN:VEVENT
...
{
"@type": "Group",
"entries": [
{
"@type": "Event",
"method": "request",
"...": ""
}
],
"...": ""
}
Figure 59: Converting the METHOD property
2.3.28. NAME
The NAME property [RFC7986] (Section 5.1) in a VLOCATION component
converts to the "name" property of the Location [jscalendarbis]
(Section 4.2.5) or Participant [jscalendarbis] (Section 4.4.5)
object.
The NAME property [RFC7986] (Section 5.1) in a VCALENDAR component
converts to the "title" property [jscalendarbis] (Section 4.2.1) of
the Group object. If the LANGUAGE parameter is set, then the
parameter value converts to the "locale" property [jscalendarbis]
(Section 4.2.9) of the same object.
The following examples illustrate how to convert the NAME property:
BEGIN:VCALENDAR
NAME;LANGUAGE=de:Feiertage Deutschland 2025
...
{
"@type": "Group",
"title": "Feiertage Deutschland 2025",
"locale": "de",
"...": ""
}
Figure 60: Converting the NAME property in a VCALENDAR component
Stepanek Expires 9 May 2026 [Page 57]
Internet-Draft JSCalendar November 2025
BEGIN:VEVENT
BEGIN:VLOCATION
NAME:Room B
...
END:VLOCATION
...
"locations": {
"8DE8404B-3BFA-443F-92B4-C678AD0F67DB": {
"@type": "Location",
"name": "Room B",
"iCalendar": {
"@type": "ICalComponent",
"name": "vlocation"
}
}
}
Figure 61: Converting the NAME property in the VLOCATION component
2.3.29. ORGANIZER
The ORGANIZER property [RFC5545] (Section 3.8.4.3) in a VEVENT or
VTODO component converts to the "organizerCalendarAddress" property
[jscalendarbis] (Section 4.4.4) of the Event or Task object.
It also converts to a Participant object in the "participants"
property [jscalendarbis] (Section 4.4.5), if any of its parameters
convert to a Participant object property (see Table 18), or if none
of the ATTENDEE properties in the iCalendar component have the ROLE
parameter set to "OWNER". The ORGANIZER property value converts to
the "calendarAddress" property of the Participant, the "owner" role
is set in Participant "roles" property.
The key of the Participant object MUST be the value of the JSID
parameter (Section 4.2.1), if set. If no JSID parameter is set, then
the key MAY be the UUIDv5 generated from the ORGANIZER property value
(see Section 2.1.3). When converting to iCalendar, implementations
MAY omit setting the JSID parameter if the key matches the UUIDv5 of
the ORGANIZER property value and the key is not part of a JSON
pointer in any JSPTR parameter value.
The ORGANIZER property parameters convert to the Participant object
as follows:
Stepanek Expires 9 May 2026 [Page 58]
Internet-Draft JSCalendar November 2025
+=========+===========================+==========+======+
| Name | Reference | Property | Note |
+=========+===========================+==========+======+
| CN | [RFC5545], Section 3.2.2 | name | |
+---------+---------------------------+----------+------+
| EMAIL | [RFC7986], Section 6.2 | email | |
+---------+---------------------------+----------+------+
| SENT-BY | [RFC5545], Section 3.2.18 | sentBy | |
+---------+---------------------------+----------+------+
Table 18: Parameters of the ORGANIZER property
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. How to deal with conflicting property values is
implementation-specific.
The following examples illustrate how to convert the ORGANIZER
property:
ORGANIZER:mailto:organizer@example.com
ATTENDEE;RSVP=TRUE:mailto:foo@example.com
"organizerCalendarAddress": "mailto:organizer@example.com",
"participants": {
"251d3e9f-d83f-534c-8c45-c2896c75670c": {
"@type": "Participant",
"calendarAddress": "mailto:organizer@example.com",
"roles": {
"owner": true
}
},
"59eb121c-e8f2-558a-9049-ef750a5976bd": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"expectReply": true,
"...": ""
}
}
Figure 62: Converting an ORGANIZER property
ORGANIZER;CN=Jane Doe:mailto:organizer@example.com
ATTENDEE;PARTSTAT=ACCEPTED;CN=Jane Doe:mailto:organizer@example.com
ATTENDEE;RSVP=TRUE;PARTSTAT=TENTATIVE:mailto:foo@example.com
Stepanek Expires 9 May 2026 [Page 59]
Internet-Draft JSCalendar November 2025
"organizerCalendarAddress": "mailto:organizer@example.com",
"participants": {
"251d3e9f-d83f-534c-8c45-c2896c75670c": {
"@type": "Participant",
"calendarAddress": "mailto:organizer@example.com",
"name": "Jane Doe",
"participationStatus": "accepted",
"roles": {
"owner": true
}
},
"59eb121c-e8f2-558a-9049-ef750a5976bd": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"expectReply": true,
"participationStatus": "tentative",
"...": ""
}
}
Figure 63: Converting an ORGANIZER and its related ATTENDEE property
ORGANIZER;CN=Jane Doe:mailto:organizer@example.com
ATTENDEE;ROLE=OWNER;RSVP=TRUE:mailto:foo@example.com
"organizerCalendarAddress": "mailto:organizer@example.com",
"participants": {
"251d3e9f-d83f-534c-8c45-c2896c75670c": {
"@type": "Participant",
"calendarAddress": "mailto:organizer@example.com",
"name": "Jane Doe",
"roles": {
"owner": true
}
},
"59eb121c-e8f2-558a-9049-ef750a5976bd": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"expectReply": true,
"roles": {
"owner": true
},
"...": ""
}
}
Figure 64: Converting an ORGANIZER property with CN parameter and
another participant having the 'owner' role set
Stepanek Expires 9 May 2026 [Page 60]
Internet-Draft JSCalendar November 2025
ORGANIZER:mailto:organizer@example.com
ATTENDEE;ROLE=OWNER;RSVP=TRUE:mailto:foo@example.com
"organizerCalendarAddress": "mailto:organizer@example.com",
"participants": {
"59eb121c-e8f2-558a-9049-ef750a5976bd": {
"@type": "Participant",
"calendarAddress": "mailto:foo@example.com",
"expectReply": true,
"roles": {
"owner": true
},
"...": ""
}
}
Figure 65: Converting an ORGANIZER property with another
participant having the 'owner' role set
2.3.30. PERCENT-COMPLETE
The PERCENT-COMPLETE property [RFC5545] (Section 3.8.1.8) in a VTODO
component converts to the "percentComplete" property [jscalendarbis]
(Section 5.2.4) of the Task object.
The following examples illustrate how to convert the PERCENT-COMPLETE
property:
BEGIN:VCALENDAR
BEGIN:VTODO
PERCENT-COMPLETE:53
...
{
"@type": "Group",
"entries": [
{
"@type": "Task",
"percentComplete": 53,
"...": ""
}
],
"...": ""
}
Figure 66: Converting the PERCENT-COMPLETE property in a VTODO
component
Stepanek Expires 9 May 2026 [Page 61]
Internet-Draft JSCalendar November 2025
2.3.31. PRIORITY
The PRIORITY property [RFC5545] (Section 3.8.1.9) in a VEVENT or
VTODO component converts to the "priority" property [jscalendarbis]
(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 67: Converting the PRIORITY property
2.3.32. PRODID
The PRODID property [RFC5545] (Section 3.7.3) in a VCALENDAR
component converts to the "prodId" property [jscalendarbis]
(Section 4.1.3) of the Group object. Implementations MAY
additionally convert it also 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 68: Converting the PRODID property
Stepanek Expires 9 May 2026 [Page 62]
Internet-Draft JSCalendar November 2025
2.3.33. RDATE
A RDATE property [RFC5545] (Section 3.8.5.2) with value type DATE or
DATE-TIME in a VEVENT or VTODO component converts to a PatchObject
value [jscalendarbis] (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 object. The PatchObject
value MUST be an empty JSON object.
A RDATE property with value type PERIOD does not convert to a
standard JSCalendar element. Implementations MAY convert it to the
"iCalendar" property (Section 5.1.1) of the Event or Task 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",
"recurrenceRule": {
"@type": "RecurrenceRule",
"frequency": "monthly"
},
"recurrenceOverrides": {
"2023-08-05T17:00:00": {}
}
Figure 69: Converting the RDATE property
2.3.34. RECURRENCE-ID
The RECURRENCE-ID property [RFC5545] (Section 3.8.4.4) in a VEVENT or
VTODO component converts to the "recurrenceId" property
[jscalendarbis] (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
iCalendar (Section 5.1.1) property.
Stepanek Expires 9 May 2026 [Page 63]
Internet-Draft JSCalendar November 2025
See Section 2.1.2 for further requirements and examples.
2.3.35. RELATED-TO
The RELATED-TO property [RFC5545] (Section 3.8.4.5) in a VEVENT,
VTODO, or VALARM component converts to a Relation object
[jscalendarbis] (Section 1.4.10). The converted object is set in the
"relatedTo" property of the Event or Task object [jscalendarbis]
(Section 4.1.2), or the Alert object [jscalendarbis] (Section 4.5.1).
The property value in a VEVENT or VTODO converts as-is to the id of
the Relation object in the "relatedTo" property. The property value
in a VALARM converts to the same value as the id of that Alert
object, which represents the VALARM component having that property
value set in the UID property. Any RELTYPE parameters convert to the
"relation" property in that Relation object. The parameter values
convert in lowercase.
The following examples illustrate how to convert the RELATED-TO
property:
BEGIN:VEVENT
RELATED-TO;RELTYPE=CHILD:4E05861C-A0C9-46AC-9A66-760FC1E0E167
RELATED-TO:4120A9B1-1133-4AC0-9185-C4C8396048ED
...
"relatedTo": {
"4E05861C-A0C9-46AC-9A66-760FC1E0E167": {
"@type": "Relation",
"relation": {
"child": true
}
},
"4120A9B1-1133-4AC0-9185-C4C8396048ED": {
"@type": "Relation"
}
}
Figure 70: Converting the RELATED-TO property in a VEVENT
Stepanek Expires 9 May 2026 [Page 64]
Internet-Draft JSCalendar November 2025
BEGIN:VEVENT
...
BEGIN:VALARM
UID:8297C37D-BA2D-4476-91AE-C1EAA364F8E1
JSID:alert1
TRIGGER:-PT15M
DESCRIPTION:Event reminder
ACTION:DISPLAY
ACKNOWLEDGED:20210302T151514Z
END:VALARM
...
BEGIN:VALARM
UID:DE7B5C34-83FF-47FE-BE9E-FF41AE6DD097
JSID:alert2
TRIGGER;VALUE=DATE-TIME:20210302T152000Z
RELATED-TO;RELTYPE=SNOOZE:8297C37D-BA2D-4476-91AE-C1EAA364F8E1
DESCRIPTION:Event reminder
ACTION:DISPLAY
END:VALARM
...
"alerts": {
"alert1": {
"@type": "Alert",
"trigger": {
"@type": "OffsetTrigger",
"offset": "-PT15M"
},
"acknowledged": "2021-03-02T15:15:14Z",
"iCalendar": {
"@type": "ICalComponent",
"name": "valarm",
"properties": [
[
"description",
{},
"text",
"Event reminder"
],
[
"uid",
{},
"text",
"8297C37D-BA2D-4476-91AE-C1EAA364F8E1"
]
]
},
"...": ""
},
Stepanek Expires 9 May 2026 [Page 65]
Internet-Draft JSCalendar November 2025
"alert2": {
"@type": "Alert",
"trigger": {
"@type": "AbsoluteTrigger",
"when": "2021-03-02T15:20:00Z"
},
"relatedTo": {
"alert1": {
"@type": "Relation",
"relation": {
"snooze": true
}
}
},
"iCalendar": {
"@type": "ICalComponent",
"name": "valarm",
"properties": [
[
"description",
{},
"text",
"Event reminder"
],
[
"uid",
{},
"text",
"DE7B5C34-83FF-47FE-BE9E-FF41AE6DD097"
]
]
},
"...": ""
}
}
Figure 71: Converting the RELATED-TO property in a VALARM
2.3.36. RRULE
The RRULE property [RFC5545] (Section 3.8.5.3) in a VEVENT or VTODO
component converts to a RecurrenceRule object [jscalendarbis]
(Section 4.3.3). The converted object is set in the "recurrenceRule"
property of the Event or Task object.
The RECUR value type converts to a RecurrenceRule object as follows:
Stepanek Expires 9 May 2026 [Page 66]
Internet-Draft JSCalendar November 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 19: 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 object.
The following example illustrates how to convert the RRULE property:
Stepanek Expires 9 May 2026 [Page 67]
Internet-Draft JSCalendar November 2025
DTSTART;TZID=Europe/Berlin:20240101T010000
RRULE:FREQ=YEARLY
;INTERVAL=2
;BYMONTH=1
;BYDAY=SU
;BYHOUR=8,9
;BYMINUTE=30
;UNTIL=20240930T120000Z
"recurrenceRule": {
"@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 72: Example for converting the RRULE property
2.3.37. SEQUENCE
The SEQUENCE property [RFC5545] (Section 3.8.7.4) in a VEVENT or
VTODO component converts to the "sequence" property [jscalendarbis]
(Section 4.1.6) of the Event or Task object.
The following example illustrates how to convert the SEQUENCE
property:
SEQUENCE:3
"sequence": 3
Figure 73: Example for converting the SEQUENCE property
Stepanek Expires 9 May 2026 [Page 68]
Internet-Draft JSCalendar November 2025
2.3.38. SHOW-WITHOUT-TIME
The SHOW-WITHOUT-TIME property [icaljscalexts] (Section 4.2) in a
VEVENT or VTODO component converts to the "showWithoutTime" property
[jscalendarbis] (Section 4.2.4) of the Event or Task object. As
outlined in the definition of the SHOW-WITHOUT-TIME property, the
property MUST be ignored if the temporal value type of the VEVENT or
VTODO component is DATE, or if the property value is "FALSE".
The following example illustrates how to convert the SHOW-WITHOUT-
TIME property:
DTSTART;TZID=America/Chicago:20250521T080000
DURATION:PT12H
SHOW-WITHOUT-TIME;VALUE=BOOLEAN:TRUE
"start": "2025-05-21T08:00:00",
"timeZone": "America/Chicago",
"duration": "PT12H",
"showWithoutTime": true
Figure 74: Example for converting the SHOW-WITHOUT-TIME property
2.3.39. STATUS
The STATUS property [RFC5545] (Section 3.8.1.11) in a VEVENT
component converts to the "status" property [jscalendarbis]
(Section 5.1.4) of the Event object. The STATUS property in a VTODO
component converts to the "progress" property [jscalendarbis]
(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 75: Example for converting the STATUS property in a VEVENT
component
BEGIN:VTODO
STATUS:IN-PROCESS
...
{
"@type": "Task",
"progress": "in-process",
"...": ""
}
Stepanek Expires 9 May 2026 [Page 69]
Internet-Draft JSCalendar November 2025
Figure 76: Example for converting the STATUS property in a VTODO
component
2.3.40. SOURCE
The SOURCE property [RFC7986] (Section 5.8) in a VCALENDAR component
converts to the "source" property [jscalendarbis] (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
...
{
"@type": "Group",
"source": "https://example.com/holidays.ics",
"...": ""
}
Figure 77: Example for converting the SOURCE property
2.3.41. STYLED-DESCRIPTION
The STYLED-DESCRIPTION property [RFC9073] (Section 6.5) in a
PARTICIPANT, VEVENT or VTODO component converts to the "description"
property [jscalendarbis] (Section 4.2.2) of the Participant, 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 the description.
If these conditions are not met, implementations MAY preserve the
property in the "iCalendar" property (Section 5.1.1).
Its parameters convert as follows:
Stepanek Expires 9 May 2026 [Page 70]
Internet-Draft JSCalendar November 2025
+=========+===============+========================+======+
| Name | Reference | Property | Note |
+=========+===============+========================+======+
| FMTTYPE | [RFC5545], | descriptionContentType | |
| | Section 3.2.8 | | |
+---------+---------------+------------------------+------+
Table 20: Parameters of the STYLED-DESCRIPTION property
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 78: Converting the STYLED-DESCRIPTION property
2.3.42. SUMMARY
The SUMMARY property [RFC5545] (Section 3.8.1.12) in a VEVENT or
VTODO component converts to the "title" property [jscalendarbis]
(Section 4.2.1) of the Event or Task object. If the LANGUAGE
parameter is set, then the parameter value converts to the "locale"
property [jscalendarbis] (Section 4.2.9) of the same object.
The SUMMARY property [RFC5545] (Section 3.8.1.12) in a PARTICIPANT
component converts to the "name" property [jscalendarbis]
(Section 4.2.5) of the Participant object.
The following examples illustrate how to convert the SUMMARY
property:
SUMMARY:Birthday Party
"title": "Birthday Party"
Figure 79: Converting the SUMMARY property in a VEVENT
SUMMARY;LANGUAGE=fr:Fête d'anniversaire
"title": "Fête d'anniversaire",
"locale": "fr"
Figure 80: Converting the SUMMARY property with LANGUAGE
parameter in a VEVENT
Stepanek Expires 9 May 2026 [Page 71]
Internet-Draft JSCalendar November 2025
BEGIN:VEVENT
BEGIN:PARTICIPANT
SUMMARY:John
...
"participants": {
"858DA9AE-695B-43CD-BA4E-294C945356BC": {
"@type": "Participant",
"name": "John",
"...": ""
}
}
Figure 81: Converting the SUMMARY property in a PARTICIPANT
2.3.43. TRANSP
The TRANSP property [RFC5545] (Section 3.8.2.7) in a VEVENT or VTODO
component converts to the "freeBusyStatus" property [jscalendarbis]
(Section 4.4.2) of the Event or Task object.
Its values convert as follows:
+=================+==================+
| iCalendar value | JSCalendar value |
+=================+==================+
| OPAQUE | busy |
+-----------------+------------------+
| TRANSPARENT | free |
+-----------------+------------------+
Table 21: Values of the TRANSP
property
The following example illustrates how to convert the TRANSP property:
TRANSP:TRANSPARENT
"freeBusyStatus": "free"
Figure 82: Converting the TRANSP property
2.3.44. 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
[jscalendarbis] (Section 4.5.1) of the Alert object.
Stepanek Expires 9 May 2026 [Page 72]
Internet-Draft JSCalendar November 2025
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 22: Parameters of the TRIGGER property
The following examples illustrate how to convert the TRIGGER
property:
BEGIN:VEVENT
...
BEGIN:VALARM
TRIGGER;RELATED=END:PT5M
...
"alerts": {
"2D3D674B-E3E4-4C63-BBF5-4582ED49BCB7": {
"@type": "Alert",
"trigger": {
"@type": "OffsetTrigger",
"offset": "PT5M",
"relativeTo": "end"
},
"...": ""
}
}
Figure 83: Converting the TRIGGER property to an OffsetTrigger
BEGIN:VEVENT
...
BEGIN:VALARM
TRIGGER;VALUE=DATE-TIME:20250302T010203Z
...
Stepanek Expires 9 May 2026 [Page 73]
Internet-Draft JSCalendar November 2025
"alerts": {
"6AB751CF-515B-4925-9B8D-5AA2185F3E64": {
"@type": "Alert",
"trigger": {
"@type": "AbsoluteTrigger",
"when": "2025-03-02T01:02:03Z"
},
"...": ""
}
}
Figure 84: Converting the TRIGGER property to an AbsoluteTrigger
2.3.45. UID
The UID property [RFC5545] (Section 3.8.4.7) in a VEVENT, VTODO, or
VCALENDAR component converts to the "uid" property [jscalendarbis]
(Section 4.1.1) 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 85: Converting the UID property
3. Converting JSCalendar to iCalendar
3.1. Alert
The Alert object [jscalendarbis] (Section 4.5.1) converts to a VALARM
component (Section 2.2.2). Its properties convert as follows:
Stepanek Expires 9 May 2026 [Page 74]
Internet-Draft JSCalendar November 2025
+==============+==================+==============+===============+
| Name | Reference | Property (or | See |
| | | other) | |
+==============+==================+==============+===============+
| acknowledged | [jscalendarbis], | ACKNOWLEDGED | Section 2.3.1 |
| | Section 4.5.1 | | |
+--------------+------------------+--------------+---------------+
| action | [jscalendarbis], | ACTION | Section 2.3.2 |
| | Section 4.5.1 | | |
+--------------+------------------+--------------+---------------+
| relatedTo | [jscalendarbis], | RELATED-TO | Section |
| | Section 4.5.1 | | 2.3.35, and |
| | | | remarks below |
+--------------+------------------+--------------+---------------+
| trigger | [jscalendarbis], | TRIGGER | Section |
| | Section 4.5.1 | | 2.3.44 |
+--------------+------------------+--------------+---------------+
Table 23: 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 MAY be set.
Other properties MAY be converted to JSPROP properties
(Section 4.1.2) in the VALARM component.
3.2. Event and Task
The Event object [jscalendarbis] (Section 2.1) converts to a VEVENT
component (Section 2.2.3), the Task object [jscalendarbis]
(Section 2.2) converts to a VTODO component (Section 2.2.5).
In the iCalendar component, the value data types of the DTSTART, DUE
and RECURRENCE-ID properties all MUST be of the same form, either
DATE, or DATE WITH LOCAL TIME, or DATE WITH UTC TIME (see
Section 3.3.5 of [RFC5545]). It MUST be DATE if the
"showWithoutTime" property value is "true", the "timeZone" property
value is null, and the time component is zero in the values of the
"start", due", "duration", "estimatedDuration", "recurrenceId"
properties, and the "until" property of the RecurrenceRule object,
and in any key of the "recurrenceOverrides" property value.
Otherwise, it MAY be DATE WITH UTC TIME if the "timeZone" property
value is "Etc/UTC" and the "endTimeZone" property value is null. It
MUST be DATE WITH LOCAL TIME in all other cases.
Stepanek Expires 9 May 2026 [Page 75]
Internet-Draft JSCalendar November 2025
The following table defines how to convert properties that are common
to both the Event and Task object types. Table 25 and Table 26 later
in this section define how to convert properties specific to either
Event or Task objects.
+========================+================+============+===========+
|Name |Reference |Property (or|See |
| | |other) | |
+========================+================+============+===========+
|alerts |[jscalendarbis],|VALARM |Alert |
| |Section 4.5.1 |(component) |object |
| | | |(Section |
| | | |3.1) |
+------------------------+----------------+------------+-----------+
|categories |[jscalendarbis],|CONCEPT |Section |
| |Section 4.2.11 | |2.3.9 |
+------------------------+----------------+------------+-----------+
|color |[jscalendarbis],|COLOR |Section |
| |Section 4.2.12 | |2.3.8 |
+------------------------+----------------+------------+-----------+
|created |[jscalendarbis],|CREATED |Section |
| |Section 4.1.4 | |2.3.12 |
+------------------------+----------------+------------+-----------+
|description |[jscalendarbis],|DESCRIPTION,|Section |
| |Section 4.2.2 |or STYLED- |2.3.13, |
| | |DESCRIPTION |Section |
| | | |2.3.41, and|
| | | |remarks |
| | | |below |
+------------------------+----------------+------------+-----------+
|descriptionContentType |[jscalendarbis],|FMTTYPE |Section |
| |Section 4.2.3 |(parameter) |2.3.41, and|
| | |of STYLED- |remarks |
| | |DESCRIPTION |below |
+------------------------+----------------+------------+-----------+
|freeBusyStatus |[jscalendarbis],|TRANSP |Section |
| |Section 4.4.2 | |2.3.43 |
+------------------------+----------------+------------+-----------+
|keywords |[jscalendarbis],|CATEGORIES |Section |
| |Section 4.2.10 | |2.3.6 |
+------------------------+----------------+------------+-----------+
|links |[jscalendarbis],|ATTACH, or |Link object|
| |Section 4.2.8 |other |(Section |
| | | |3.4) |
+------------------------+----------------+------------+-----------+
|locale |[jscalendarbis],|LANGUAGE |Section |
| |Section 4.2.9 |(parameter) |2.3.42, |
| | |of SUMMARY |Section |
Stepanek Expires 9 May 2026 [Page 76]
Internet-Draft JSCalendar November 2025
| | |property |2.3.13, |
| | | |Section |
| | | |2.3.41 |
+------------------------+----------------+------------+-----------+
|locations |[jscalendarbis],|LOCATION, |Location |
| |Section 4.2.5 |GEO, or |object |
| | |VLOCATION |(Section |
| | |(component) |3.5) |
+------------------------+----------------+------------+-----------+
|mainLocationId |[jscalendarbis],|LOCATION |Location |
| |Section 4.2.6 | |object |
| | | |(Section |
| | | |3.5) |
+------------------------+----------------+------------+-----------+
|method |[jscalendarbis],|METHOD of |Section |
| |Section 4.1.7 |iCalendar |2.3.27, and|
| | |object |Group |
| | | |object |
| | | |(Section |
| | | |3.3) |
+------------------------+----------------+------------+-----------+
|organizerCalendarAddress|[jscalendarbis],|ORGANIZER |Section |
| |Section 4.4.4 | |2.3.29 |
+------------------------+----------------+------------+-----------+
|participants |[jscalendarbis],|ATTENDEE, or|Participant|
| |Section 4.4.5 |PARTICIPANT |object |
| | |(component) |(Section |
| | | |3.6) |
+------------------------+----------------+------------+-----------+
|priority |[jscalendarbis],|PRIORITY |Section |
| |Section 4.4.1 | |2.3.31 |
+------------------------+----------------+------------+-----------+
|privacy |[jscalendarbis],|CLASS |Section |
| |Section 4.4.3 | |2.3.7 |
+------------------------+----------------+------------+-----------+
|prodId |[jscalendarbis],|PRODID of |Section |
| |Section 4.1.3 |iCalendar |2.3.32, and|
| | |object |Group |
| | | |object |
| | | |(Section |
| | | |3.3) |
+------------------------+----------------+------------+-----------+
|progress |[jscalendarbis],|STATUS |Section |
| |Section 5.2.5 | |2.3.39 |
+------------------------+----------------+------------+-----------+
|recurrenceId |[jscalendarbis],|RECURRENCE- |Section |
| |Section 4.3.1 |ID |2.3.34 |
+------------------------+----------------+------------+-----------+
Stepanek Expires 9 May 2026 [Page 77]
Internet-Draft JSCalendar November 2025
|recurrenceIdTimeZone |[jscalendarbis],|TZID |Section |
| |Section 4.3.2 |(parameter) |2.3.34 |
| | |of | |
| | |RECURRENCE- | |
| | |ID | |
+------------------------+----------------+------------+-----------+
|recurrenceOverrides |[jscalendarbis],|RDATE, |Section |
| |Section 4.3.4 |EXDATE or |2.1.2, and |
| | |recurrence |remarks |
| | |override |below |
| | |component | |
+------------------------+----------------+------------+-----------+
|recurrenceRule |[jscalendarbis],|RRULE |Section |
| |Section 4.3.3 | |2.3.36 |
+------------------------+----------------+------------+-----------+
|relatedTo |[jscalendarbis],|RELATED-TO |Section |
| |Section 4.1.2 | |2.3.35 |
+------------------------+----------------+------------+-----------+
|sequence |[jscalendarbis],|SEQUENCE |Section |
| |Section 4.1.6 | |2.3.37 |
+------------------------+----------------+------------+-----------+
|showWithoutTime |[jscalendarbis],|SHOW- |Section |
| |Section 4.2.4 |WITHOUT-TIME|2.3.38, and|
| | | |remarks |
| | | |below |
+------------------------+----------------+------------+-----------+
|timeZone |[jscalendarbis],|TZID |Section |
| |Section 4.6.1 |(parameter) |2.3.16, |
| | |of DTSTART |Section |
| | |and DUE |2.3.17 |
+------------------------+----------------+------------+-----------+
|title |[jscalendarbis],|SUMMARY |Section |
| |Section 4.2.1 | |2.3.42 |
+------------------------+----------------+------------+-----------+
|uid |[jscalendarbis],|UID |Section |
| |Section 4.1.1 | |2.3.45 |
+------------------------+----------------+------------+-----------+
|updated |[jscalendarbis],|DTSTAMP, and|Section |
| |Section 4.1.5 |LAST- |2.3.15, |
| | |MODIFIED |Section |
| | | |2.3.23 |
+------------------------+----------------+------------+-----------+
|virtualLocations |[jscalendarbis],|CONFERENCE |Section |
| |Section 4.2.7 | |2.3.10 |
+------------------------+----------------+------------+-----------+
Table 24: Properties of the Event and Task object
Stepanek Expires 9 May 2026 [Page 78]
Internet-Draft JSCalendar November 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 the STYLED-DESCRIPTION property, in which case a plain
text version of the rich-text description MAY be set additionally
in the DESCRIPTION property, having its DERIVED parameter 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" member 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 "showWithoutTime" property only converts to the SHOW-WITHOUT-
TIME property if the value data type of the DTSTART or DUE
properties is of form DATE WITH UTC TIME or DATE WITH LOCAL TIME.
Properties specific to the Event object type convert to iCalendar
properties as follows:
+=============+==================+================+=================+
| Name | Reference | Property | See |
| | | (or other) | |
+=============+==================+================+=================+
| duration | [jscalendarbis], | DURATION, | Section 2.3.18, |
| | Section 5.1.2 | or DTEND | Section 2.3.14 |
+-------------+------------------+----------------+-----------------+
| endTimeZone | [jscalendarbis], | TZID | Section 2.3.14, |
| | Section 5.1.3 | parameter | Section 2.3.17 |
| | | of DTEND | |
+-------------+------------------+----------------+-----------------+
| start | [jscalendarbis], | DTSTART | Section 2.3.16 |
| | Section 5.1.1, | | |
+-------------+------------------+----------------+-----------------+
| status | [jscalendarbis], | STATUS | Section 2.3.39 |
| | Section 5.1.4 | | |
+-------------+------------------+----------------+-----------------+
Table 25: Properties of the Event object
Stepanek Expires 9 May 2026 [Page 79]
Internet-Draft JSCalendar November 2025
Properties specific to the Task object type convert to iCalendar
properties as follows:
+===================+================+=====================+=======+
| Name |Reference | Property (or other) |See |
+===================+================+=====================+=======+
| due |[jscalendarbis],| DUE |Section|
| |Section 5.2.1 | |2.3.17 |
+-------------------+----------------+---------------------+-------+
| estimatedDuration |[jscalendarbis],| ESTIMATED-DURATION |Section|
| |Section 5.2.3 | |2.3.19 |
+-------------------+----------------+---------------------+-------+
| percentComplete |[jscalendarbis],| PERCENT-COMPLETE |Section|
| |Section 5.2.4 | |2.3.30 |
+-------------------+----------------+---------------------+-------+
| progress |[jscalendarbis],| STATUS |Section|
| |Section 5.2.5 | |2.3.39 |
+-------------------+----------------+---------------------+-------+
| start |[jscalendarbis],| DTSTART |Section|
| |Section 5.2.2, | |2.3.16 |
+-------------------+----------------+---------------------+-------+
Table 26: Properties of the Task object
Other properties MAY be converted to JSPROP properties
(Section 4.1.2) in the VEVENT or VTODO component.
3.3. Group
The Group object [jscalendarbis] (Section 2.3) converts to a
VCALENDAR component (Section 2.1.1). Its properties convert as
follows:
+=============+==================+====================+=============+
| Name | Reference | Property (or | See |
| | | other) | |
+=============+==================+====================+=============+
| categories | [jscalendarbis], | CONCEPT | Section |
| | Section 4.2.11 | | 2.3.9 |
+-------------+------------------+--------------------+-------------+
| color | [jscalendarbis], | COLOR | Section |
| | Section 4.2.12 | | 2.3.8 |
+-------------+------------------+--------------------+-------------+
| created | [jscalendarbis], | CREATED | Section |
| | Section 4.1.4 | | 2.3.12 |
+-------------+------------------+--------------------+-------------+
| description | [jscalendarbis], | DESCRIPTION, or | Section |
| | Section 4.2.2 | STYLED-DESCRIPTION | 2.3.13, |
Stepanek Expires 9 May 2026 [Page 80]
Internet-Draft JSCalendar November 2025
| | | | Section |
| | | | 2.3.41, |
| | | | and |
| | | | remarks |
| | | | below |
+-------------+------------------+--------------------+-------------+
| entries | [jscalendarbis], | VEVENT or VTODO | Event and |
| | Section 5.3.1 | (component) | Task |
| | | | object |
| | | | (Section |
| | | | 3.2), and |
| | | | remarks |
| | | | below |
+-------------+------------------+--------------------+-------------+
| keywords | [jscalendarbis], | CATEGORIES | Section |
| | Section 4.2.10 | | 2.3.6 |
+-------------+------------------+--------------------+-------------+
| links | [jscalendarbis], | ATTACH, or other | Link |
| | Section 4.2.8 | | object |
| | | | (Section |
| | | | 3.4) |
+-------------+------------------+--------------------+-------------+
| locale | [jscalendarbis], | LANGUAGE | Section |
| | Section 4.2.9 | (parameter) of | 2.3.28, |
| | | either NAME, or | Section |
| | | DESCRIPTION (in | 2.3.13 |
| | | order of | |
| | | preference) | |
+-------------+------------------+--------------------+-------------+
| prodId | [jscalendarbis], | PRODID | Section |
| | Section 4.1.3 | | 2.3.32, |
| | | | and |
| | | | remarks |
| | | | below |
+-------------+------------------+--------------------+-------------+
| source | [jscalendarbis], | SOURCE | Section |
| | Section 5.3.2 | | 2.3.40 |
+-------------+------------------+--------------------+-------------+
| title | [jscalendarbis], | NAME | Section |
| | Section 4.2.1 | | 2.3.28 |
+-------------+------------------+--------------------+-------------+
| uid | [jscalendarbis], | UID | Section |
| | Section 4.1.1 | | 2.3.45 |
+-------------+------------------+--------------------+-------------+
| updated | [jscalendarbis], | LAST-MODIFIED | Section |
| | Section 4.1.5 | | 2.3.23 |
+-------------+------------------+--------------------+-------------+
Stepanek Expires 9 May 2026 [Page 81]
Internet-Draft JSCalendar November 2025
Table 27: Properties of the Group object
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 the STYLED-DESCRIPTION property, in which case a plain
text version of the rich-text description MAY be set additionally
in the DESCRIPTION property, having its DERIVED parameter set to
"TRUE". How to derive plain text from rich-text is
implementation-specific.
* 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.
Other properties MAY be converted to JSPROP properties
(Section 4.1.2) in the VCALENDAR component.
3.4. Link
The Link object [jscalendarbis] (Section 1.4.11) converts either an
ATTACH property (Section 2.3.3) or an IMAGE property
(Section 2.3.22). Which iCalendar property to choose is
implementation-specific. As a guideline:
* Choose the iCalendar property name indicated in the iCalendar
(Section 5.1.1) of the JSCalendar object that contains this Link
object, if set.
* Choose IMAGE, if the "display" property is set.
* Choose LINK, if the "rel" property is set.
* Choose ATTACH otherwise.
The href property converts to the "iCalendar" property value. The
other Link properties convert as follows:
Stepanek Expires 9 May 2026 [Page 82]
Internet-Draft JSCalendar November 2025
+=============+==================+============+===================+
| Name | Reference | Parameter | See |
| | | (or other) | |
+=============+==================+============+===================+
| contentType | [jscalendarbis], | FMTTYPE | Section 2.3.3 |
| | Section 1.4.11 | | |
+-------------+------------------+------------+-------------------+
| display | [jscalendarbis], | DISPLAY | Section 2.3.22, |
| | Section 1.4.11 | | and remarks below |
+-------------+------------------+------------+-------------------+
| rel | [jscalendarbis], | LINKREL | Section 6.1 of |
| | Section 1.4.11 | | [RFC9253] |
+-------------+------------------+------------+-------------------+
| size | [jscalendarbis], | SIZE | Section 2.3.3 |
| | Section 1.4.11 | | |
+-------------+------------------+------------+-------------------+
| title | [RFC7986], | LABEL | Section 2.3.3 |
| | Section 6.4 | | |
+-------------+------------------+------------+-------------------+
Table 28: Properties of the Link object
Other properties MAY be converted to JSPROP properties
(Section 4.1.2) in the same component to which the Link object
converts to as a property.
3.5. Location
The Location object [jscalendarbis] (Section 4.2.5) converts to
either a LOCATION (Section 2.3.25) or GEO (Section 2.3.21) property,
or it converts to a VLOCATION component (Section 2.2.4). Which
iCalendar element to choose is implementation-specific. As a
guideline:
* If the "iCalendar" property on the Location object is set, or the
parent JSCalendar object contains an entry for that Location in
the "convertedProperties" property of its "iCalendar" property,
then convert the object back to the named iCalendar component or
property.
* Choose LOCATION if the key of the Location object in the
"locations" property matches the "mainLocationId" property, or if
the "name" property is set and the iCalendar component does not
already contain a LOCATION property. The "name" property converts
to the LOCATION property value.
* Choose the VLOCATION component otherwise.
Stepanek Expires 9 May 2026 [Page 83]
Internet-Draft JSCalendar November 2025
Implementations MAY convert one of the Location objects to both a
VLOCATION component and the LOCATION and GEO properties of the
component that contains the VLOCATION component. In this case, the
DERIVED parameter MUST be set on the LOCATION and GEO properties with
value "TRUE".
The properties convert to a VLOCATION component as follows:
+===============+==================+===============+================+
| Name | Reference | Property (or | See |
| | | other) | |
+===============+==================+===============+================+
| coordinates | [jscalendarbis], | COORDINATES | Section |
| | Section 4.2.5 | | 2.3.11, |
| | | | Section |
| | | | 2.3.21 |
+---------------+------------------+---------------+----------------+
| links | [jscalendarbis], | ATTACH, or | Link |
| | Section 4.2.8 | other | object |
| | | | (Section |
| | | | 3.4) |
+---------------+------------------+---------------+----------------+
| locationTypes | [jscalendarbis], | LOCATION-TYPE | Section |
| | Section 4.2.5 | | 2.3.26 |
+---------------+------------------+---------------+----------------+
| name | [jscalendarbis], | NAME | Section |
| | Section 4.2.5 | | 2.3.28 |
+---------------+------------------+---------------+----------------+
Table 29: Properties of the Location object
Other properties MAY be converted to JSPROP properties
(Section 4.1.2) in the VLOCATION component, or the component which
the Location converts to as a property.
3.6. Participant
The Participant object [jscalendarbis] (Section 4.4.5) converts to an
ATTENDEE property (Section 2.3.4) and PARTICIPANT component
(Section 2.2.1), unless it is fully represented by the ORGANIZER
property (Section 2.3.29):
* It if fully represented by the ORGANIZER property if its
"calendarAddress" property value matches the
"organizerCalendarAddress" property value, and it does not have
any role but the "owner" role set, and it only has properties set
that convert to ORGANIZER parameters (see Table 18).
Stepanek Expires 9 May 2026 [Page 84]
Internet-Draft JSCalendar November 2025
* Otherwise, it converts to an ATTENDEE property if the
"calendarAddress" property is set. The "calendarAddress" converts
to the ATTENDEE property value.
* It converts to a PARTICIPANT component if any of the Participant
properties in Table 31 are set. If the Participant object also
converts to an ATTENDEE property, then the CALENDAR-ADDRESS
property value of the PARTICIPANT component MUST match the
ATTENDEE property value.
The following Participant properties convert to parameters of the
ATTENDEE property. How to convert these if the Participant
"calendarAddress" property is not set is implementation-specific.
+=====================+==================+================+=======+
| Name | Reference | Parameter (or |See |
| | | other) | |
+=====================+==================+================+=======+
| delegatedFrom | [jscalendarbis], | DELEGATED-FROM |Section|
| | Section 4.4.5 | |2.3.4 |
+---------------------+------------------+----------------+-------+
| delegatedTo | [jscalendarbis], | DELEGATED-TO |Section|
| | Section 4.4.5 | |2.3.4 |
+---------------------+------------------+----------------+-------+
| email | [jscalendarbis], | EMAIL |Section|
| | Section 4.4.5 | |2.3.4, |
| | | |and |
| | | |remarks|
| | | |below |
+---------------------+------------------+----------------+-------+
| expectReply | [jscalendarbis], | RSVP |Section|
| | Section 4.4.5 | |2.3.4 |
+---------------------+------------------+----------------+-------+
| kind | [jscalendarbis], | CUTYPE |Section|
| | Section 4.4.5 | |2.3.4 |
+---------------------+------------------+----------------+-------+
| memberOf | [jscalendarbis], | MEMBER |Section|
| | Section 4.4.5 | |2.3.4 |
+---------------------+------------------+----------------+-------+
| name | [jscalendarbis], | CN |Section|
| | Section 4.4.5 | |2.3.4, |
| | | |and |
| | | |remarks|
| | | |below |
+---------------------+------------------+----------------+-------+
| participationStatus | [jscalendarbis], | PARTSTAT |Section|
| | Section 4.4.5 | |2.3.4 |
+---------------------+------------------+----------------+-------+
Stepanek Expires 9 May 2026 [Page 85]
Internet-Draft JSCalendar November 2025
| progress | [jscalendarbis], | PARTSTAT |Section|
| | Section 4.4.5 | |2.3.4, |
| | | |and |
| | | |remarks|
| | | |below |
+---------------------+------------------+----------------+-------+
| roles | [jscalendarbis], | ROLE |Section|
| | Section 4.4.5 | |2.3.4, |
| | | |and |
| | | |remarks|
| | | |below |
+---------------------+------------------+----------------+-------+
| sentBy | [jscalendarbis], | SENT-BY |Section|
| | Section 4.4.5 | |2.3.4, |
| | | |and |
| | | |remarks|
| | | |below |
+---------------------+------------------+----------------+-------+
Table 30: Properties of the Participant object that convert to
the ATTENDEE property
Remarks:
* The "owner" role needs not convert to the ROLE parameter of the
ATTENDEE property if the Participant object converts to both the
ATTENDEE and ORGANIZER property.
* The "name", "email" and "sentBy" properties also convert to
parameters of the ORGANIZER property, if the Participant converts
to the ORGANIZER property.
* The progress property converts to the PARTSTAT parameter as
outlined in Table 13.
The following Participant properties convert to the PARTICIPANT
component:
Stepanek Expires 9 May 2026 [Page 86]
Internet-Draft JSCalendar November 2025
+======================+================+==================+========+
|Name |Reference |Property (or |See |
| | |other) | |
+======================+================+==================+========+
|description |[jscalendarbis],|DESCRIPTION, or |Section |
| |Section 4.4.5 |STYLED-DESCRIPTION|2.3.13, |
| | | |Section |
| | | |2.3.41, |
| | | |and |
| | | |remarks |
| | | |below |
+----------------------+----------------+------------------+--------+
|descriptionContentType|[jscalendarbis],|FMTTYPE |Section |
| |Section 4.4.5 |(parameter) of |2.3.41 |
| | |STYLED-DESCRIPTION| |
+----------------------+----------------+------------------+--------+
|links |[jscalendarbis],|ATTACH, or other |Link |
| |Section 4.2.7 | |object |
| | | |(Section|
| | | |3.4) |
+----------------------+----------------+------------------+--------+
|name |[jscalendarbis],|SUMMARY |Section |
| |Section 4.4.5 | |2.3.42 |
+----------------------+----------------+------------------+--------+
|percentComplete |[jscalendarbis],|PERCENT-COMPLETE |Section |
| |Section 4.4.5 | |2.3.30 |
+----------------------+----------------+------------------+--------+
Table 31: Properties of the Participant object that convert to
the PARTICIPANT component
Other properties MAY be converted to JSPROP properties
(Section 4.1.2) in the PARTICIPANT component, or the component which
the Participant converts to as a property.
3.7. VirtualLocation
The VirtualLocation object [jscalendarbis] (Section 4.2.7) converts
to a CONFERENCE property (Section 2.3.10).
The "uri" property converts to the CONFERENCE property value.
The following properties convert to parameters of the CONFERENCE
property:
Stepanek Expires 9 May 2026 [Page 87]
Internet-Draft JSCalendar November 2025
+==========+==================+======================+=========+
| Name | Reference | Parameter (or other) | See |
+==========+==================+======================+=========+
| features | [jscalendarbis], | FEATURE | Section |
| | Section 4.2.7 | | 2.3.10 |
+----------+------------------+----------------------+---------+
| name | [jscalendarbis], | LABEL | Section |
| | Section 4.2.7 | | 2.3.10 |
+----------+------------------+----------------------+---------+
Table 32: Properties of the VirtualLocation object
4. Updates to iCalendar
4.1. New Properties
4.1.1. JSID
Property Name:
JSID
Purpose:
This property preserves the identifier of a JSCalendar object
value in iCalendar.
Value type:
TEXT; also see "Format Definition" below for value restrictions.
Property Parameters:
IANA and non-standard property parameters can be specified on this
property.
Conformance:
This property can be specified at most once in any calendar
component.
Description:
This property specifies the JSON object key of the JSCalendar
object to which an iCalendar component converts to. For example,
this property set in a VALARM component within a VEVENT component
defines the key of the Alert object value in the Event object's
"alerts" property (see Figure 86).
The value of the JSID property MUST be a valid object key
according to the definition of the JSCalendar property to which
the component converts to.
Format Definition:
Stepanek Expires 9 May 2026 [Page 88]
Internet-Draft JSCalendar November 2025
This property is defined by the following notation:
jsid-prop = "JSID" *(";" other-param) ":" TEXT CRLF
Example(s):
The following example illustrates how to convert the JSID property
set in a VALARM component.
BEGIN:VEVENT
...
BEGIN:VALARM
UID:52DFB000-3C49-4577-8003-3086001BD26A
JSID:myalert
...
END:VALARM
"@type": "Event",
"alerts": {
"myalert": {
"@type": "Alert",
"iCalendar": {
"@type": "ICalComponent",
"name": "valarm",
"properties": [
[
"uid",
{},
"text",
"52DFB000-3C49-4577-8003-3086001BD26A"
]
]
},
"...": ""
}
}
Figure 86: Converting the JSID property of a VALARM component
4.1.2. JSPROP
Property Name:
JSPROP
Purpose:
This property represents a JSCalendar property in iCalendar.
Value type:
TEXT; also see "Format Definition" below for value restrictions.
Stepanek Expires 9 May 2026 [Page 89]
Internet-Draft JSCalendar November 2025
Property Parameters:
The JSPTR parameter (Section 4.2.2) MUST be specified on this
property. Other IANA and non-standard property parameters can be
specified on this property.
Conformance:
This property can be specified multiple times in any calendar
component.
Description:
This property converts an arbitrary JSCalendar property from and
to iCalendar. The iCalendar property value is the JSON-encoded
value of the JSCalendar property, represented as a TEXT value.
The JSON value MUST NOT be the null value, and it SHOULD NOT
contain insignificant whitespace as defined in Section 2 of
[RFC8259]. The value of the JSPTR parameter points to the
JSCalendar property within the JSCalendar object and MUST NOT
start with the SOLIDUS (U+002F) character. The pointer MUST NOT
reference into an array.
All JSPROP properties in a calendar component together form a
PatchObject [jscalendarbis] (Section 1.4.9): the JSPTR parameter
of a JSPROP property corresponds to a key in the PatchObject, the
property value corresponds to the JSON value for that key. When
converting from iCalendar to JSCalendar, the PatchObject MUST only
be applied after all other iCalendar elements of the component
have been converted. Only new properties are allowed to be set, a
JSON pointer in the PatchObject that points to an existing
property MUST be ignored.
Format Definition:
This property is defined by the following notation:
jsprop = "JSPROP" jsprop-param ":" TEXT CRLF
jsprop-param = *(
; The following are MANDATORY and MUST NOT
; occur more than once
( ";" jsptr-param )
;
; The following is OPTIONAL
; and MAY occur more than once.
;
(";" other-param)
;
)
Example(s):
Stepanek Expires 9 May 2026 [Page 90]
Internet-Draft JSCalendar November 2025
The following example illustrates how to convert a JSPROP property
with a JSON boolean value
JSPROP;JSPTR="example.com:foo":true
"example.com:foo": true
Figure 87: Converting the JSPROP property with a JSON boolean
value
The following example illustrates how to convert a JSPROP property
with a JSON object value
JSPROP;JSPTR="example.com:foo":{"bar":1234\,"baz":"bam"}
"example.com:foo": {
"bar": 1234,
"baz": "bam"
}
Figure 88: Converting the JSPROP property with a JSON object value
The following example illustrates how to convert a JSPROP property
that points to a property within a JSCalendar Alert. The JSON
pointer in the JSPTR parameter is relative to the Alert object.
BEGIN:VEVENT
...
BEGIN:VALARM
JSPROP;JSPTR="example.com:foo":"bar"
...
END:VALARM
"@type": "Event",
"alerts": {
"DB7A8058-2212-46D9-87C2-867C7F65D625": {
"@type": "Alert",
"example.com:foo": "bar",
"...": ""
}
}
Figure 89: Converting the JSPROP property within a VALARM
component
The following example illustrates how to convert a JSPROP property
that points to a property within a JSCalendar Link. The JSON
pointer in the JSPTR parameter is relative to the Event object
because the Link object converts to an iCalendar property. The
JSID parameter (Section 4.2.1) on the ATTACH property ensures that
the JSON path remains valid during conversion.
Stepanek Expires 9 May 2026 [Page 91]
Internet-Draft JSCalendar November 2025
BEGIN:VEVENT
...
ATTACH;JSID=mylink1:https://www.rfc-editor.org/rfc/rfc8984.html
JSPROP;JSPTR="links/mylink1/example.com:foo":"bar"
...
"@type": "Event",
"links": {
"mylink1": {
"@type": "Link",
"href": "https://www.rfc-editor.org/rfc/rfc8984.html",
"example.com:foo": "bar",
"...": ""
}
}
Figure 90: Converting the JSPROP property within a Link object
4.2. New Parameters
4.2.1. JSID
Parameter Name:
JSID
Format Definition:
jsid-param = "JSID" "=" param-value
Description:
This parameter specifies the JSON object key of the JSCalendar
object to which an iCalendar property converts to. For example,
this parameter set on an ATTACH property within a VEVENT component
defines the key of the Link object value in the Event object's
"links" property (see below for an example).
The value of the JSID parameter MUST be a valid key according to
the definition of the JSCalendar property to which the property
that this parameter is set on converts to. Typically, this
requires the value to be a valid Id [jscalendarbis]
(Section 1.4.1).
Example(s):
ATTACH;JSID=mylink1:https://example.com
"links": {
"mylink1": {
"@type": "Link",
"href": "https://example.com"
}
}
Stepanek Expires 9 May 2026 [Page 92]
Internet-Draft JSCalendar November 2025
Figure 91: Converting the JSID parameter on an ATTACH property
4.2.2. JSPTR
Parameter Name:
JSPTR
Format Definition:
jsptr-param = "JSPTR" "=" quoted-string
Description:
This parameter is specified on a JSPROP (Section 4.1.2) property.
Its value is a JSON pointer [RFC6901] that points to a JSCalendar
property.
Description:
This parameter has a single value that MUST be a valid JSON
pointer as defined in [RFC6901]. The value MUST be quoted to
preserve its case-sensitivity and it MUST NOT contain the DQUOTE
character. See Section 3.2 of [RFC5545] for how to format
parameter values.
Example(s):
JSPROP;JSPTR="example.com:foo":"bar"
For further examples, see Section 4.1.2.
5. Updates to JSCalendar
5.1. New Properties
5.1.1. iCalendar
Name:
iCalendar
Context:
Any JSCalendar object
Type:
ICalComponent (optional)
Description
Stepanek Expires 9 May 2026 [Page 93]
Internet-Draft JSCalendar November 2025
This property contains information about iCalendar data that got
converted to this JSCalendar object. It allows for preserving the
name of iCalendar elements, such as a component's name, properties
and subcomponents. This specification defines the ICalComponent
object type for converting iCalendar components to a JSCalendar
object. Future specifications MAY define additional value types
for this property.
An ICalComponent object has the following properties:
@type: String This specifies the type of this object. This MUST
be ICalComponent, if set.
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 JSCalendar element. The value
for each key contains information about the iCalendar property
which converted to the JSCalendar element located at that key.
Unless otherwise defined for a specific iCalendar property, the
path points to that JSCalendar object property to which the
iCalendar property value converted to.
The key MUST be a valid key of a PatchObject as defined in
Section 1.4.9 of [jscalendarbis]. The key MAY point to the key
in a nested object if the element at that key was converted
from an iCalendar property of the component for which the
"iCalendar" property is set. It MUST NOT point into nested
objects otherwise.
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].
An ICalProperty object has the following properties:
@type: String This specifies the type of this object. This MUST
Stepanek Expires 9 May 2026 [Page 94]
Internet-Draft JSCalendar November 2025
be ICalProperty, if set.
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|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 92 describes how to convert unknown iCalendar
elements to the "iCalendar" 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 9 May 2026 [Page 95]
Internet-Draft JSCalendar November 2025
{
"@type": "Event",
"title": "test",
"iCalendar": {
"@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 92: Converting unknown iCalendar elements to the iCalendar
property
6. IANA Considerations
TBD
Stepanek Expires 9 May 2026 [Page 96]
Internet-Draft JSCalendar November 2025
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>.
[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>.
[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>.
[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>.
[RFC6047] Melnikov, A., Ed., "iCalendar Message-Based
Interoperability Protocol (iMIP)", RFC 6047,
DOI 10.17487/RFC6047, December 2010,
<https://www.rfc-editor.org/info/rfc6047>.
[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>.
[RFC6901] Bryan, P., Ed., Zyp, K., and M. Nottingham, Ed.,
"JavaScript Object Notation (JSON) Pointer", RFC 6901,
DOI 10.17487/RFC6901, April 2013,
<https://www.rfc-editor.org/info/rfc6901>.
Stepanek Expires 9 May 2026 [Page 97]
Internet-Draft JSCalendar November 2025
[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>.
[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>.
[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>.
[RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data
Interchange Format", STD 90, RFC 8259,
DOI 10.17487/RFC8259, December 2017,
<https://www.rfc-editor.org/info/rfc8259>.
[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>.
[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>.
[RFC9562] Davis, K., Peabody, B., and P. Leach, "Universally Unique
IDentifiers (UUIDs)", RFC 9562, DOI 10.17487/RFC9562, May
2024, <https://www.rfc-editor.org/info/rfc9562>.
Stepanek Expires 9 May 2026 [Page 98]
Internet-Draft JSCalendar November 2025
[TZDB] "IANA Time Zone Database",
<https://www.iana.org/time-zones>.
7.2. Informative References
[ical-tasks]
Douglass, M. and A. Apthorp, "Task Extensions to
iCalendar", Work in Progress, Internet-Draft, draft-ietf-
calext-ical-tasks, 7 July 2025,
<https://datatracker.ietf.org/doc/draft-ietf-calext-ical-
tasks>.
[icaljscalexts]
Stepanek, R., "iCalendar Format Extensions for
JSCalendar", Work in Progress, Internet-Draft, draft-
stepanek-icalendar-jscalendar-extensions, 16 October 2025,
<https://datatracker.ietf.org/doc/draft-stepanek-
icalendar-jscalendar-extensions/>.
[jmap-calendars]
Jenkins, N.M. and M. Douglass, "JMAP for Calendars", Work
in Progress, Internet-Draft, draft-ietf-jmap-calendars, 8
October 2025, <https://datatracker.ietf.org/doc/draft-
ietf-jmap-calendars/>.
[jscalendarbis]
Jenkins, N.M. and R. Stepanek, "JSCalendar: A JSON
Representation of Calendar Data", Work in Progress,
Internet-Draft, draft-ietf-calext-jscalendarbis, 16
October 2025, <https://datatracker.ietf.org/doc/draft-
ietf-calext-jscalendarbis/>.
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 and only complete at the time of publication of
this document.
Implementations MAY choose to convert the following elements, for
example using the properties defined in Section 4 and Section 5, or
they might convert them to some vendor-specific extension properties.
Later RFC documents might also define new standard elements and
register them at IANA, either extending this list of inconvertible
elements, or rather reduce it by introducing a standard element to
convert to.
Stepanek Expires 9 May 2026 [Page 99]
Internet-Draft JSCalendar November 2025
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
* VRESOURCE [RFC9073], Section 7.3
* VTIMEZONE [RFC5545], Section 3.6.5
* VSTATUS [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 [RFC9073], Section 7.1
* CATEGORIES [RFC5545], Section 3.8.1.2
* COMMENT [RFC5545], Section 3.8.1.4
* CONTACT [RFC5545], Section 3.8.4.2
* CREATED [RFC5545], Section 3.8.7.1
* LAST-MODIFIED [RFC5545], Section 3.8.7.3
* LINK [RFC9253], Section 8.2
* LOCATION [RFC5545], Section 3.8.1.7
* PARTICIPANT-TYPE [RFC9073], Section 6.2
* PRIORITY [RFC5545], Section 3.8.1.9
* REASON [ical-tasks], Section 12.2
Stepanek Expires 9 May 2026 [Page 100]
Internet-Draft JSCalendar November 2025
* RELATED-TO [RFC5545], Section 3.8.4.5
* REQUEST-STATUS [RFC5545], Section 3.8.8.3
* RESOURCES [RFC5545], Section 3.8.1.10
* STATUS [RFC5545], Section 3.8.1.11
* STRUCTURED-DATA [RFC9074], Section 6.6
* UID [RFC5545], Section 3.8.4.7
* URL [RFC5545], Section 3.8.4.6
A.1.2.2. VALARM [RFC5545], Section 3.6.6
* 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 [RFC5545], Section 3.4
* CALSCALE [RFC5545], Section 3.7.1
* LINK [RFC9253], Section 8.2
* REFRESH-INTERVAL [RFC7986], Section 5.7
* URL [RFC5545], Section 3.8.4.6
* VERSION [RFC5545], Section 3.7.4
A.1.2.4. VEVENT [RFC5545], Section 3.6.1
Stepanek Expires 9 May 2026 [Page 101]
Internet-Draft JSCalendar November 2025
* COMMENT [RFC5545], Section 3.8.1.4
* CONTACT [RFC5545], Section 3.8.4.2
* LINK [RFC9253], Section 8.2
* REFID [RFC9253], Section 8.3
* REQUEST-STATUS [RFC5545], Section 3.8.8.3
* RESOURCES [RFC5545], Section 3.8.1.10
* STRUCTURED-DATA [RFC9074], Section 6.6
* URL [RFC5545], Section 3.8.4.6
A.1.2.5. VLOCATION [RFC9073], Section 7.2
* DESCRIPTION [RFC5545], Section 3.8.1.5
* LINK [RFC9253], Section 8.2
* UID [RFC5545], Section 3.8.4.7
* STRUCTURED-DATA [RFC9074], Section 6.6
* STYLED-DESCRIPTION [RFC9073], Section 6.5
A.1.2.6. VTODO [RFC5545], Section 3.6.2
* COMMENT [RFC5545], Section 3.8.1.4
* COMPLETED [RFC5545], Section 3.8.2.1
* CONTACT [RFC5545], Section 3.8.4.2
* LINK [RFC9253], Section 8.2
* REFID [RFC9253], Section 8.3
* REQUEST-STATUS [RFC5545], Section 3.8.8.3
* RESOURCES [RFC5545], Section 3.8.1.10
* STRUCTURED-DATA [RFC9074], Section 6.6
* TASK-MODE [ical-tasks], Section 12.4
Stepanek Expires 9 May 2026 [Page 102]
Internet-Draft JSCalendar November 2025
* URL [RFC5545], Section 3.8.4.6
A.1.3. Subcomponents by Component
The following components are defined to contain the listed
subcomponents. But these subcomponents do not convert to a standard
JSCalendar element.
A.1.3.1. PARTICIPANT [RFC9073], Section 7.1
* VLOCATION [RFC9073], Section 7.2
A.1.4. 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.4.1. RDATE [RFC5545], Section 3.8.5.2
* PERIOD [RFC5545], Section 3.3.9
A.1.5. 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.5.1. ATTACH [RFC5545], Section 3.8.1.1
* FILENAME [RFC8607], Section 4.2
* MANAGED-ID [RFC8607], Section 4.3
A.1.5.2. ATTENDEE [RFC5545], Section 3.8.4.1
* DIR [RFC5545], Section 3.2.6
* SCHEDULE-AGENT [RFC6638], Section 7.1
* SCHEDULE-FORCE-SEND [RFC6638], Section 7.2
* SCHEDULE-STATUS [RFC6638], Section 7.3
* SENT-BY [RFC5545], Section 3.2.18
* LANGUAGE [RFC5545], Section 3.2.10
Stepanek Expires 9 May 2026 [Page 103]
Internet-Draft JSCalendar November 2025
A.1.5.3. CATEGORIES [RFC5545], Section 3.8.1.2
* LANGUAGE [RFC5545], Section 3.2.10
A.1.5.4. CONFERENCE [RFC7986], Section 5.11
* LANGUAGE [RFC5545], Section 3.2.10
A.1.5.5. DESCRIPTION [RFC5545], Section 3.8.1.5
* ALTREP [RFC5545], Section 3.2.1
* LANGUAGE [RFC5545], Section 3.2.10
A.1.5.6. IMAGE [RFC7986], Section 5.10
* ALTREP [RFC5545], Section 3.2.1
* DISPLAY [RFC7986], Section 6.1 (if the parameter value contains
more than one "displayval").
A.1.5.7. LINK [RFC9253], Section 8.2
* LANGUAGE [RFC5545], Section 3.2.10
A.1.5.8. LOCATION [RFC5545], Section 3.8.1.7
* ALTREP [RFC5545], Section 3.2.1
* LANGUAGE [RFC5545], Section 3.2.10
A.1.5.9. NAME [RFC7986], Section 5.1
* ALTREP [RFC5545], Section 3.2.1
A.1.5.10. ORGANIZER [RFC5545], Section 3.8.4.3
* DIR [RFC5545], Section 3.2.6
* SENT-BY [RFC5545], Section 3.2.18
* LANGUAGE [RFC5545], Section 3.2.10
* SCHEDULE-AGENT [RFC6638], Section 7.1
* SCHEDULE-FORCE-SEND [RFC6638], Section 7.2
* SCHEDULE-STATUS [RFC6638], Section 7.3
Stepanek Expires 9 May 2026 [Page 104]
Internet-Draft JSCalendar November 2025
A.1.5.11. RECURRENCE-ID [RFC5545], Section 3.8.4.4
* RANGE [RFC5545], Section 3.2.13
A.1.5.12. RELATED-TO [RFC5545], Section 3.8.4.5
* GAP [RFC9253], Section 6.2
A.1.5.13. REQUEST-STATUS [RFC5545], Section 3.8.8.3
* LANGUAGE [RFC5545], Section 3.2.10
A.1.5.14. RESOURCES [RFC5545], Section 3.8.1.10
* ALTREP [RFC5545], Section 3.2.1
* LANGUAGE [RFC5545], Section 3.2.10
A.1.5.15. STYLED-DESCRIPTION [RFC9073], Section 6.5
* ALTREP [RFC5545], Section 3.2.1
* DERIVED [RFC9073], Section 5.3
* LANGUAGE [RFC5545], Section 3.2.10
A.1.5.16. SUMMARY [RFC5545], Section 3.8.1.12
* ALTREP [RFC5545], Section 3.2.1
A.1.5.17. TZNAME [RFC5545], Section 3.8.3.2
* LANGUAGE [RFC5545], Section 3.2.10
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 9 May 2026 [Page 105]