<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [
<!ENTITY nbsp "&#160;">
<!ENTITY zwsp "&#8203;">
<!ENTITY nbhy "&#8209;">
<!ENTITY wj "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" category="std" consensus="true" docName="draft-ietf-calext-icalendar-jscalendar-extensions-05" obsoletes="" updates="5545,7986,9073" submissionType="IETF" xml:lang="en" tocInclude="true" symRefs="true" sortRefs="true" version="3">
  <front>
    <title abbrev="iCalendar JSCalendar Extensions">iCalendar Format Extensions for JSCalendar</title>
    <author initials="R." surname="Stepanek" fullname="Robert Stepanek">
      <organization>Fastmail</organization>
      <address>
        <postal>
          <extaddr>PO Box 234</extaddr>
          <street>Collins St. West</street>
          <city>Melbourne</city>
          <region>VIC</region>
          <code>8007</code>
          <country>Australia</country>
        </postal>
        <email>rsto@fastmailteam.com</email>
      </address>
    </author>
    <date year="2026" month="January" day="19"/>
    <area>art</area>
    <workgroup>calext</workgroup>
    <keyword>calendars</keyword>
    <keyword>iCalendar</keyword>
    <keyword>JSCalendar</keyword>
    <abstract>
      <t>This document defines a set of new elements for iCalendar and extends the use of existing ones. Their main purpose is to extend the semantics of iCalendar with elements defined in JSCalendar, but the new definitions also aim to be useful within just the iCalendar format.  This document updates RFC 5545 ("iCalendar") and its extension documents RFC 7986 and RFC 9073.</t>
    </abstract>
  </front>
  <middle>
    <section>
      <name>Introduction</name>
      <t>The JSCalendar <xref target="I-D.stepanek-jscalendarbis"/> format aims to be an alternative to the iCalendar <xref target="RFC5545"/> format for representation of calendaring data.  It introduces new semantics that are not covered in the current definition of iCalendar and its various extensions.  Converting calendaring data between the two formats is defined in <xref target="I-D.ietf-calext-jscalendar-icalendar"/> with the goal of not losing any semantics during conversion. To achieve this, this document defines new elements iCalendar and extends existing definitions. To do so, it follows the recommendations for introducing new iCalendar elements as specified in <xref target="RFC7986" section="3"/>. This document updates the definitions of the <xref target="RFC5545" section="3.8.1.6" sectionFormat="parens">GEO property</xref>, the <xref target="RFC7986" section="5.9" sectionFormat="parens">COLOR property</xref> and the <xref target="RFC9073" section="7.2" sectionFormat="parens">VLOCATION component</xref>.</t>
      <section anchor="notational-conventions" numbered="true" toc="default">
        <name>Notational Conventions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
      </section>
      <section anchor="abnf-notations">
        <name>ABNF Notations</name>
        <t>The ABNF definitions in this document use the notations of <xref target="RFC5234"/>. ABNF rules not defined in this document are defined in either <xref target="RFC5234"/> (such as the ABNF for CRLF, WSP, DQUOTE, VCHAR, ALPHA, and DIGIT) or <xref target="RFC5545"/>.
        </t>
      </section>
    </section>
    <section>
      <name>Updated Properties</name>
      <section anchor="prop-geo">
        <name>GEO Property</name>
        <t>This specification deprecates the "GEO" property and introduces the <xref target="prop-coordinates">"COORDINATES"</xref> property to replace it. Implementations <bcp14>SHOULD NOT</bcp14> use the "GEO" property to represent spatial coordinates. Instead, they <bcp14>SHOULD</bcp14> specify the "COORDINATES" property in a <xref target="RFC9073" section="7.2" sectionFormat="parens">"VLOCATION" component</xref>. They <bcp14>MAY</bcp14> additionally specify a "GEO" property in a "VEVENT" or "VTODO" component, in which case its <xref target="RFC9073" section="5.3" sectionFormat="parens">"DERIVED" parameter</xref> <bcp14>MUST</bcp14> have value "TRUE".</t>
        <t>The remainder of this section documents the rationale for deprecating the "GEO" property:</t>
        <t>
          The "GEO" property definition dates back to 1998, a time at which multiple internet protocols and data formats incorporated spatial coordinates in slightly different formats, making interoperability difficult. This got addressed in 2010 in <xref target="RFC5870"/>, which introduced a Uniform Resource Identifier (URI) for geographic locations. The 'geo' URI scheme not only improves interoperability but also allows for richer information than the "GEO" property value, e.g. it supports specifying the location altitude and the spatial uncertainty of the coordinates.</t>
        <t>Alternatively to deprecating, this specification could have updated the "GEO" property to allow its property value type to be URI. This turned out to not interoperate, as implementations tended to reject such iCalendar data as invalid. This was regardless if the "GEO" property was specified in a "VEVENT" component, or if it was specified in iCalendar components that were unsupported by the implementation (e.g. an implementation that was unaware of the "VLOCATION" component still rejected the "GEO" property with value type URI in that component as invalid). Introducing a new property turned out to better interoperate with such systems.</t>
      </section>
      <section anchor="prop-color">
        <name>COLOR Property</name>
        <t>This specification modifies the definition of the "COLOR" property, it allows its value to be a named color or a numeric color. The following definitions replace the definitions of the "COLOR" property, originally specified in <xref target="RFC7986" section="5.9"/> from which the definitions for "Description", "Format Definition" and "Example" differ.</t>
        <dl>
          <dt>Property Name:</dt>
          <dd>COLOR</dd>
          <dt>Purpose:</dt>
          <dd>This property specifies a color used for displaying the calendar, event, todo, or journal data.</dd>
          <dt>Value Type:</dt>
          <dd>TEXT</dd>
          <dt>Property Parameters:</dt>
          <dd>IANA and non-standard property parameters can be specified on this property.</dd>
          <dt>Conformance:</dt>
          <dd>This property can be specified once in an iCalendar object or in "VEVENT", "VTODO", or "VJOURNAL" calendar components.</dd>
          <dt>Description:</dt>
          <dd>
            <t>This property specifies a color that clients <bcp14>MAY</bcp14> use when presenting the relevant data to a user.  Typically, this would appear as the "background" color of events or tasks. The value is a color name taken from the set of names defined in <xref target="CSS3" section="4.3" relative="#svg-color"/> or an RGB value in six-digit hexadecimal notation, as defined in <xref target="CSS3" section="4.2.1" relative="#rgb-color"/>. Values are case-insensitive.</t>
          </dd>
          <dt>Format Definition:</dt>
          <dd>
            <t>This property is defined by the following notation:</t>
            <sourcecode name=""><![CDATA[
color       = "COLOR" colorparam ":" text CRLF
              ; Value is CSS3 color name or CSS3 six-digit RGB hex value.

colorparam     = *(";" other-param)
]]></sourcecode>
          </dd>
          <dt>Example:</dt>
          <dd>
            <t>The following are examples of this property:</t>
            <sourcecode name=""><![CDATA[
COLOR:turquoise
]]></sourcecode>
            <sourcecode name=""><![CDATA[
COLOR:#40E0D0
]]></sourcecode>
            <sourcecode name=""><![CDATA[
COLOR:#ffd755
]]></sourcecode>
          </dd>
        </dl>
      </section>
    </section>
    <section>
      <name>Updated Components</name>
      <section anchor="comp-vlocation">
        <name>VLOCATION component</name>
        <t>This document updates the definition of the "VLOCATION" component. It allows to specify the newly defined <xref target="prop-coordinates">"COORDINATES" property</xref> at most once in a "VLOCATION" component. It appends the following to the "Format Definition" of the "VLOCATION" component, defined in <xref target="RFC9073" section="7.2"/>:</t>
        <sourcecode name=""><![CDATA[
locprop /= *(
            ;
            ; The following is OPTIONAL
            ; but MUST NOT occur more than once.
            ;
            coord
            ;
            )
]]></sourcecode>
        <t>The "coord" ABNF is defined in <xref target="prop-coordinates"/>.</t>
      </section>
    </section>
    <section anchor="new-properties">
      <name>New Properties</name>
      <section anchor="prop-coordinates">
        <name>COORDINATES Property</name>
        <dl>
          <dt>Property Name:</dt>
          <dd>COORDINATES</dd>
          <dt>Purpose:</dt>
          <dd>To represent a geographic location using the protocol-independent, extensible "geo" URI scheme.</dd>
          <dt>Value Type:</dt>
          <dd>URI -- no default</dd>
          <dt>Property Parameters:</dt>
          <dd>IANA and non-standard parameters <bcp14>MAY</bcp14> be specified on this property.</dd>
          <dt>Conformance:</dt>
          <dd>This property can be specified in a "VLOCATION" calendar component.</dd>
          <dt>Description:</dt>
          <dd>
            <t>This property represents spatial (geographic) coordinates. In contrast to the the "GEO" property, this property allows to represent not only latitude and longitude but also altitude of a location. In addition, it supports to indicate the uncertainty of the coordinates, is interoperable with other internet standards making use of spatial information, and is extensible, such as for use with other coordinate reference systems. The property value <bcp14>MUST</bcp14> a URI in the "geo" URI scheme, as defined in <xref target="RFC5870"/> and updates.</t>
          </dd>
          <dt>Format Definition:</dt>
          <dd>
            <sourcecode name=""><![CDATA[
coord       = "COORDINATES" coordparam ":" uri CRLF

coordparam  = *(
               ;
               ; The following is REQUIRED,
               ; but MUST NOT occur more than once.
               ;
               (";" "VALUE" "=" "URI") /
               ;
               ; The following is OPTIONAL,
               ; and MAY occur more than once.
               ;
               (";" other-param)
               ;
               )
]]></sourcecode>
          </dd>
          <dt>Example:</dt>
          <dd>
            <t>The following is an example of this property:</t>
            <sourcecode name=""><![CDATA[
COORDINATES;VALUE=URI:geo:48.198634,16.371648;crs=wgs84;u=40
]]></sourcecode>
          </dd>
        </dl>
      </section>
      <section anchor="prop-show-without-time">
        <name>SHOW-WITHOUT-TIME Property</name>
        <dl>
          <dt>Property Name:</dt>
          <dd>SHOW-WITHOUT-TIME</dd>
          <dt>Purpose:</dt>
          <dd>To indicate that the exact time span is not important when displaying this calendar object.</dd>
          <dt>Value Type:</dt>
          <dd>BOOLEAN -- no default</dd>
          <dt>Property Parameters:</dt>
          <dd>IANA and non-standard parameters can be specified on this property.</dd>
          <dt>Conformance:</dt>
          <dd>This property can be specified in a "VEVENT" or "VTODO" calendar component.</dd>
          <dt>Description:</dt>
          <dd>
            <t>This indicates that the exact time span is not important to display when rendering this calendar object. An example of this is an event that occurs over a full or almost full day, but in contrast to a DATE value is limited to a specific time zone or business hours. While the time component is important for free-busy calculations and checking for scheduling clashes, calendars may choose to display it as an all-day event, or display the object separately to other objects to enhance the user's view of their schedule.</t>
            <t>This property only is for presentation purposes, it does not have any impact on the temporal span or value type of a calendar object.</t>
            <t>This property <bcp14>MAY</bcp14> be specified on VEVENT components where the DTSTART property is of type DATE-TIME, or in VTODO components where either the DTSTART or DUE property is specified and has type DATE-TIME. In all other cases it <bcp14>MUST NOT</bcp14> be set. If this property is set, its property value <bcp14>MUST</bcp14> be "TRUE", e.g. it <bcp14>MUST</bcp14> be omitted rather than having value "FALSE".</t>
            <t>Implementations that are unaware of the "SHOW-WITHOUT-TIME" property might inadvertently preserve this property when changing a calendar object's temporal type from DATE-TIME to DATE. Implementations <bcp14>SHOULD</bcp14> therefore ignore rather than reject the incorrectly specified SHOW-WITHOUT-TIME property. They <bcp14>MUST NOT</bcp14> preserve the ill-specified property in the calendaring data.</t>
          </dd>
          <dt>Format Definition:</dt>
          <dd>
            <sourcecode name=""><![CDATA[
showwt      = "SHOW-WITHOUT-TIME" showwtparam ":" "TRUE" CRLF

showwtparam = *(
               ;
               ; The following is REQUIRED,
               ; but MUST NOT occur more than once.
               ;
               (";" "VALUE" "=" "BOOLEAN") /
               ;
               ; The following is OPTIONAL,
               ; and MAY occur more than once.
               ;
               (";" other-param)
               ;
               )
]]></sourcecode>
          </dd>
          <dt>Example:</dt>
          <dd>
            <sourcecode name=""><![CDATA[
SHOW-WITHOUT-TIME;VALUE=BOOLEAN:TRUE
]]></sourcecode>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="new-enum-values">
      <name>New Values</name>
      <section anchor="param-role-owner">
        <name>OWNER Participation Role</name>
        <dl>
          <dt>Value:</dt>
          <dd>OWNER</dd>
          <dt>Purpose:</dt>
          <dd>This participation role indicates that the calendar user is an owner of the calendar object. This signifies they can make changes that affect all calendar users participating in this calendar object (for example, rescheduling the calendar object, adding and removing attendees and roles). The presence of this role only is indicative, its semantics are subject to the calendaring exchange protocol being used. See <xref target="jmap-calendars"/> for an example for making use of this role.</dd>
          <dt>Conformance:</dt>
          <dd>This value can be used with the "ROLE" parameter.</dd>
          <dt>Example(s):</dt>
          <dd>
            <sourcecode name=""><![CDATA[
ATTENDEE;ROLE=OWNER;RSVP=TRUE:mailto:jsmith@example.com
]]></sourcecode>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>This specification extends <xref target="RFC5545"/>.  The same security considerations as outlined in <xref target="RFC5545" sectionFormat="of" section="7"/> apply.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>IANA will update the "iCalendar Element Registries" as follows.</t>
      <section anchor="iana-components-registry">
        <name>Changes to the "Components" registry</name>
        <t>IANA will update the entry of the "VLOCATION" component: it will add <xref target="comp-vlocation"/> of this document to the References.</t>
      </section>
      <section anchor="iana-properties-registry">
        <name>Changes to the "Properties" registry</name>
        <t>IANA will change the entry for the "GEO" property: it will set the Status from "Current" to "Deprecated" and add <xref target="prop-geo"/> of this document to the References.</t>
        <t>IANA will change the entry for the "COLOR" property: tt will add <xref target="prop-color"/> of this document to the References.</t>
        <t>IANA will add the following entries:</t>
        <dl spacing="compact">
          <dt>Property</dt>
          <dd>COORDINATES</dd>
          <dt>Status</dt>
          <dd>Current</dd>
          <dt>Reference</dt>
          <dd>
            <xref target="prop-coordinates"/>
          </dd>
        </dl>
        <dl spacing="compact">
          <dt>Property</dt>
          <dd>SHOW-WITHOUT-TIME</dd>
          <dt>Status</dt>
          <dd>Current</dd>
          <dt>Reference</dt>
          <dd>
            <xref target="prop-show-without-time"/>
          </dd>
        </dl>
      </section>
      <section anchor="iana-participation-roles-registry">
        <name>Changes to the "Participation Roles" registry</name>
        <t>IANA will add the following entry:</t>
        <dl spacing="compact">
          <dt>Role Type</dt>
          <dd>OWNER</dd>
          <dt>Status</dt>
          <dd>Current</dd>
          <dt>Reference</dt>
          <dd>
            <xref target="param-role-owner"/>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="CSS3" target="https://www.w3.org/TR/css-color-3/" quoteTitle="true" derivedAnchor="CSS3">
          <front>
            <title>CSS Color Module Level 3</title>
            <author initials="T" surname="Çelik" fullname="Tantek Çelik">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C" surname="Lilley" fullname="Chris Lilley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L" surname="Baron" fullname="L. David Baron">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="January" year="2022"/>
          </front>
          <refcontent>W3C Recommendation</refcontent>
        </reference>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5234.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5545.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5870.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7986.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.9073.xml"/>
      </references>
    </references>
    <references>
      <name>Informative References</name>
      <reference anchor="I-D.ietf-calext-jscalendar-icalendar" target="https://datatracker.ietf.org/doc/draft-ietf-calext-jscalendar-icalendar/">
        <front>
          <title>JSCalendar: Converting from and to iCalendar</title>
          <author fullname="Robert Stepanek" initials="R." surname="Stepanek">
            <organization>Fastmail</organization>
          </author>
          <date day="16" month="October" year="2025"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-calext-jscalendar-icalendar"/>
      </reference>
      <reference anchor="I-D.stepanek-jscalendarbis" target="https://datatracker.ietf.org/doc/draft-stepanek-jscalendarbis/">
        <front>
          <title>JSCalendar: A JSON Representation of Calendar Data</title>
          <author fullname="Neil Jenkins" initials="N.M." surname="Jenkins">
            <organization>Fastmail</organization>
          </author>
          <author fullname="Robert Stepanek" initials="R." surname="Stepanek">
            <organization>Fastmail</organization>
          </author>
          <date day="16" month="October" year="2025"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-stepanek-jscalendarbis"/>
      </reference>
      <reference anchor="jmap-calendars" target="https://datatracker.ietf.org/doc/draft-ietf-jmap-calendars/">
        <front>
          <title>JMAP for Calendars</title>
          <author fullname="Neil Jenkins" initials="N.M." surname="Jenkins">
            <organization>Fastmail</organization>
          </author>
          <author fullname="Michael Douglass" initials="M." surname="Douglass">
            <organization>Spherical Cow Group</organization>
          </author>
          <date day="8" month="October" year="2025"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-jmap-calendars"/>
      </reference>
    </references>
  </back>
</rfc>
