[calsify] Re: Versioning JSCalendar?

Mauro De Gennaro <mauro@stalw.art> Tue, 20 January 2026 10:39 UTC

Return-Path: <mauro@stalw.art>
X-Original-To: calsify@mail2.ietf.org
Delivered-To: calsify@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id 5AE97AA50E21 for <calsify@mail2.ietf.org>; Tue, 20 Jan 2026 02:39:32 -0800 (PST)
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.098
X-Spam-Level:
X-Spam-Status: No, score=-2.098 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=stalw.art header.b="k8QNlEvF"; dkim=neutral reason="invalid (unsupported algorithm ed25519-sha256)" header.d=stalw.art header.b="vWSkscR7"
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5x1cmc_r5nfQ for <calsify@mail2.ietf.org>; Tue, 20 Jan 2026 02:39:31 -0800 (PST)
Received: from mail.stalw.art (mail.stalw.art [135.181.195.209]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 8A33DAA50E1A for <calsify@ietf.org>; Tue, 20 Jan 2026 02:39:31 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; s=202404r; d=stalw.art; c=relaxed/relaxed; h=Message-Id:To:Date:Subject:From; t=1768905564; bh=d21GPgru9Gy4naGg0oU1ljS B4vsncRAd/Vw3g3PA9Kc=; b=k8QNlEvF9jtA3DDokegBLbEdhWGhxmBPSoBAfNkhh0NxBTi4w+ 9hkbRMz5ADJR+pSC2mgMpiHIG7E/J2svePrxEX0Z7+p0IURUqcLNQ7ICMnZHPJv0mEv9Ms3f/TX 5gMOwxWxwbTOfjuaWyTozUwKXPrDLI1Rh7/oS/qnQ6IvPX+f1N/dHp/U17J2NjQq0SumV4t8qct Zh2WT1fvUl+MaasizWdvVbp3F5t8plpcZgl27tUJmg6TWcVX6WqT6ZFouCV+iswfe4sEni5xhJL B3JP0Hn39EBjsiWDW7N01ZqNYmPLgLv3eUe0mi7F8LFOYaumOJR51r8WnICHygHpUDA==;
DKIM-Signature: v=1; a=ed25519-sha256; s=202404e; d=stalw.art; c=relaxed/relaxed; h=Message-Id:To:Date:Subject:From; t=1768905564; bh=d21GPgru9Gy4naGg0oU1ljS B4vsncRAd/Vw3g3PA9Kc=; b=vWSkscR7kqmCpFBO6XbRCtYR2Qq0F8ZS+3HqdBNzNT/lYa+kH/ iVeF5Ps0DKJWlMERmlW42c6+yNrs1dmD0ZDw==;
From: Mauro De Gennaro <mauro@stalw.art>
Content-Type: multipart/alternative; boundary="Apple-Mail=_89BEC76D-5EE5-43FF-87A0-E88EE74785B3"
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.700.6.1.21\))
Date: Tue, 20 Jan 2026 07:39:10 -0300
References: <15fe3abc-b8f0-4434-bc80-e14bab82de0d@app.fastmail.com>
To: calsify@ietf.org
In-Reply-To: <15fe3abc-b8f0-4434-bc80-e14bab82de0d@app.fastmail.com>
Message-Id: <DD758C42-C651-4F84-93B7-4418D45EC384@stalw.art>
X-Mailer: Apple Mail (2.3731.700.6.1.21)
Message-ID-Hash: D4F6I3OUSEZDQ2ZYEB5BPKB7LVLWLGUJ
X-Message-ID-Hash: D4F6I3OUSEZDQ2ZYEB5BPKB7LVLWLGUJ
X-MailFrom: mauro@stalw.art
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-calsify.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [calsify] Re: Versioning JSCalendar?
List-Id: "Calendaring, Contacts and Scheduling Standards Maintenance" <calsify.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/calsify/nNwDIja_waVIBakerFew6NOr_Fg>
List-Archive: <https://mailarchive.ietf.org/arch/browse/calsify>
List-Help: <mailto:calsify-request@ietf.org?subject=help>
List-Owner: <mailto:calsify-owner@ietf.org>
List-Post: <mailto:calsify@ietf.org>
List-Subscribe: <mailto:calsify-join@ietf.org>
List-Unsubscribe: <mailto:calsify-leave@ietf.org>

Hi Robert,

I’m generally in favour of aligning JSCalendar with JSContact here: introducing an explicit version property and requiring implementations to ignore but preserve unknown elements both seem like sensible steps to me. 

Regarding the bad experience with iCalendar versioning: I don’t know all the historical details of why the iCalendar version was never updated and effectively stayed at “2.0” despite changes over time. As a comparison, in vCard we do have versions 2.1, 3.0, and 4.0. If a parser implements the latest version, explicit version numbers are often not strictly necessary for parsing older cards, as the version can usually be inferred from the properties and parameters in use. However, version numbers become important when a parser receives data from a version it does not support. In that case, the version property is important to detect incompatibility and avoid misinterpreting the data.

One open question I do have, and would like to discuss further, is how to handle changes in data types for properties that are already known to the parser. For example, imagine that in a hypothetical JSCalendar v3 the “colour” property changes from a String to an object like Colour { red: Int, green: Int, blue: Int }
This would clearly break older parsers that expect a String. My suggestion would be that unknown value types for known properties should be preserved in the same way as unknown properties are today, effectively treating them as opaque data rather than trying (and failing) to interpret them. 


Best,
Mauro

> On 20 Jan 2026, at 07:03, Robert Stepanek <rsto=40fastmailteam.com@dmarc.ietf.org> wrote:
> 
> Related to Daniel Migault's review feedack <https://mailarchive.ietf.org/arch/msg/calsify/hvuh57T5eGrsYPe3eOimDBtJhU0/>, I'm looking for the working group's opinion on if and how to version JSCalendar data. I want to decide before we publish JMAP for Calendars and the new JSCalendar specification.
> 
> Currently, JSCalendar (RFC 8984) does not define versioning. In contrast, JSContact (RFC 9553) does require each Card object to have a "version" property and that value consists of a major and minor version (see Section 1.9 in RFC 9553 <https://www.rfc-editor.org/rfc/rfc9553.html#name-versioning>).
> 
> Related, JSCalendar does not instruct implementations how to deal with unknown elements, except for a few specific cases such as the "Group.entries" or the "Participant.roles" properties. In contrast, JSContact explicitly requires implementations to ignore but preserve unknown elements. The idea is that implementations should be able to deal with JSContact data even if they do not support the minor version that is indicated in the payload (see Section 1.7.4 in RFC 9553 <https://datatracker.ietf.org/doc/html/rfc9553#name-unknown-properties>).
> 
> We originally hadn't defined versioning in JSCalendar because of bad experiences with iCalendar, which up to today sticks to version "2.0" despite significant changes since RFC 5545. For JSContact, we instead thought we can make versioning work. Time will tell if that will work out in practice, but at least the JSContact IANA registry policy clearly defines that every change requires at least to bump the minor version, if not the major version. We are right now doing this in draft-ietf-calext-jscontact-uid <https://datatracker.ietf.org/doc/draft-ietf-calext-jscontact-uid/>.
> 
> Orthogonal to versions, JMAP allows to negotiate which properties are supported using extensions, but that only is possible in context of that transport protocol.
> 
> I'm leaning towards aligning JSCalendar versioning with what we have in JSContact, that is: introducing a version property and requiring implementations to preserve unknown elements. But I also know this hasn't proven in practice and it might cause different trouble than not doing any versioning.
> 
> What's your take on this?
> 
> Thanks,
> Robert
> _______________________________________________
> calsify mailing list -- calsify@ietf.org
> To unsubscribe send an email to calsify-leave@ietf.org