RFC 9982

JSContact Version 2.0: A JSON Representation of Contact Data

๐Ÿ“… published May 2026, from ietf

RFC 9982: JSContact Version 2.0 ๐Ÿ’–

  • RFC number: 9982
  • Title: JSContact Version 2.0: A JSON Representation of Contact Data
  • Author: Robert Stepanek, Fastmail
  • Category: Standards Track
  • Date: May 2026
  • Updates: RFC 9555 (no Obsoletes listed) ๐Ÿฆ‹
  • Stream: IETF (Internet Engineering Task Force)
  • ISSN: 2070-1721

Abstract โœจ

okay so this doc defines version "2.0" of JSContact ๐Ÿ’… The big change is that the uid property on a Card object becomes optional instead of mandatory like it was in version "1.0". Everything else in version "1.0" stays exactly the same as RFC 9553, so nothing else is shifting ๐Ÿซถ

It also updates RFC 9555 by redefining how the now-optional uid gets converted from and to vCard. And it registers the vCard JSCOMPS parameter at IANA, which RFC 9555 defined but never actually registered ๐Ÿ™ˆ

Status of This Memo ๐Ÿ“

This is an Internet Standards Track document ๐Ÿ”ฅ

It's a product of the Internet Engineering Task Force (IETF) and it represents the consensus of the IETF community. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). If you want more on Internet Standards, check out Section 2 of RFC 7841 ๐ŸŒธ

For the current status, any errata, and how to give feedback, go to https://www.rfc-editor.org/info/rfc9982 โœจ

Copyright (c) 2026 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) as in effect on the date of publication. Please read these carefully, because they spell out your rights and restrictions for this document. Any Code Components pulled out of this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Revised BSD License โš–๏ธ

Table of Contents ๐Ÿ—‚๏ธ

   1.  Introduction
   2.  Notational Conventions
   3.  JSContact Version 2.0
   4.  Redefined uid Property
   5.  Redefined Conversion Rule for the uid Property
   6.  Other Changes
   7.  IANA Considerations
     7.1.  Update to the JSContact Version Registry
     7.2.  Update to the JSContact Properties Registry
     7.3.  Update to the vCard Parameters Registry
   8.  Security Considerations
   9.  References
     9.1.  Normative References
     9.2.  Informative References
   Author's Address

1. Introduction ๐Ÿงš

okay so JSContact [RFC9553] defines the Card object's uid property. It's mandatory and holds a unique identifier for the entity that the contact card represents ๐Ÿชช The vCard [RFC6350] contact format has a similar thing called the UID property, but in vCard it's optional. From here on, uid (all lowercase) means the JSContact property and UID (all uppercase) means the vCard one ๐Ÿ’œ

Making uid mandatory in JSContact has worked great for some use cases, but it's been a real problem in other places ๐Ÿ˜ญ

  1. A stated goal of JSContact is to match the semantics of the vCard data format (Section 1 of [RFC9553]). But [RFC6350] makes the vCard UID property optional, so JSContact and vCard end up disagreeing about a really important shared element ๐Ÿ’€
  2. Address book sync protocols, like CardDAV [RFC6352] and JMAP for Contacts [RFC9610], need the uid property. But other protocols, like RDAP [RFC9083], have zero use for it. JSContact should not force protocols to make up unique identifiers when those identifiers are irrelevant or even harmful to the use case ๐Ÿ™…โ€โ™€๏ธ
  3. Converting vCards that have no UID property into JSContact is especially messy. Section 2.1.1 of [RFC9555] requires implementations to generate a unique identifier during conversion in this case, but it doesn't require that the identifier match across implementations, or even match when one implementation converts the same Card more than once. So a recipient who doesn't realise the uid value is ephemeral might reference it in the members property or relatedTo property of another Card object, and that creates invalid relations between contact cards ๐Ÿ˜ฑ

2. 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 interpreted as described in BCP 14 [RFC2119] [RFC8174], but only when they appear in all capitals, just like shown here โœจ

The ABNF definitions in this document use the notation from [RFC5234]. ABNF rules that aren't defined here come from either [RFC5234] (for things like CRLF, WSP, DQUOTE, VCHAR, ALPHA, and DIGIT) or [RFC6350] ๐Ÿซถ

3. JSContact Version 2.0 ๐Ÿ‘‘

This document makes the uid property of a Card object optional. Apart from that, the property definition stays the same. Since this changes the major version of JSContact, this document defines the JSContact version as "2.0". For more on versioning JSContact data, see Section 1.9 of [RFC9553] ๐Ÿ”ฅ

Implementations MUST create JSContact data that follows the version "2.0" definitions (or some later registered version), and they MUST set the version property of the JSContact Card object to that version. They MUST NOT reject a Card object without the uid property as invalid, unless another document specifies differently or the Card version property has the value "1.0". Since any valid version "1.0" JSContact Card is also valid under version "2.0", there's no need to migrate existing JSContact data ๐ŸŽ€

This document does not redefine the vCard UID property ๐Ÿฆ‹

4. Redefined uid Property ๐Ÿ’…

This document redefines the type signature of the uid property, which was originally defined in Section 2.1.9 of [RFC9553].

OLD:

|  *uid: String (mandatory).*

NEW:

|  *uid: String (optional).*

The rest of the property definition stays unchanged, plus this extra paragraph:

|  A Card without an uid property cannot be referred to as a group
|  member in the members property (Section 2.1.6 of [RFC9553]) or put
|  in relation to another Card object in the relatedTo property
|  (Section 2.1.8 of [RFC9553]).

5. Redefined Conversion Rule for the uid Property ๐Ÿ”

This document redefines how the Card uid property gets converted from vCard. The original rule was in Section 2.1.1 of [RFC9555]. The new conversion rule goes like this:

Implementations that convert a vCard without a UID property (Section 6.7.6 of [RFC6350]) to a Card of version "2.0" or higher MUST NOT generate a unique identifier as a value for the uid property (Section 2.1.9 of [RFC9553]) ๐Ÿ™…โ€โ™€๏ธ

When converting a vCard without a UID property to JSContact version "1.0", implementations MUST generate a value for the uid property. How they generate unique identifiers is implementation-specific. Implementations SHOULD generate the same value when converting the same Card multiple times, but as Section 1 explains, this still can't prevent interoperability issues. So, implementations SHOULD NOT convert to version "1.0" Card objects ๐Ÿ˜ญ

6. Other Changes ๐ŸŒˆ

This document also registers the JSCOMPS parameter in the IANA "vCard Parameters" registry. The parameter was defined in Section 3.3.1 of [RFC9555], but it was mistakenly never registered at IANA ๐Ÿ™ˆ

7. IANA Considerations ๐Ÿ›๏ธ

7.1. Update to the JSContact Version Registry

IANA updated the "JSContact Version" registry, which was originally created in Section 3.4 of [RFC9553], by adding this record:

        +===============+=======================+===========+
        | Major Version | Highest Minor Version | Reference |
        +===============+=======================+===========+
        | 2             | 0                     | RFC 9982  |
        +---------------+-----------------------+-----------+

                 Table 1: JSContact Version Registry

7.2. Update to the JSContact Properties Registry

IANA updated the "JSContact Properties" registry, which was originally created in Section 3.5 of [RFC9553]. In the "Reference/Description" column for the uid property, a reference to Section 4 of this document was added ๐Ÿงพ

7.3. Update to the vCard Parameters Registry

IANA updated the "vCard Parameters" registry inside the "vCard Elements" registry group by adding this entry:

       +===========+===========+============================+
       | Namespace | Parameter | Reference                  |
       +===========+===========+============================+
       |           | JSCOMPS   | Section 3.3.1 of [RFC9555] |
       +-----------+-----------+----------------------------+

                 Table 2: vCard Parameters Registry

8. Security Considerations ๐Ÿšจ

This document does not introduce any new security considerations. However, the security considerations in Section 4 of [RFC9553] still fully apply, so please don't skip them ๐Ÿ”’

9. References ๐Ÿ“–

9.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>.

[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>.

[RFC6350]  Perreault, S., "vCard Format Specification", RFC 6350,
           DOI 10.17487/RFC6350, August 2011,
           <https://www.rfc-editor.org/info/rfc6350>.

[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>.

[RFC9553]  Stepanek, R. and M. Loffredo, "JSContact: A JSON
           Representation of Contact Data", RFC 9553,
           DOI 10.17487/RFC9553, May 2024,
           <https://www.rfc-editor.org/info/rfc9553>.

[RFC9555]  Loffredo, M. and R. Stepanek, "JSContact: Converting from
           and to vCard", RFC 9555, DOI 10.17487/RFC9555, May 2024,
           <https://www.rfc-editor.org/info/rfc9555>.

9.2. Informative References

[RFC6352]  Daboo, C., "CardDAV: vCard Extensions to Web Distributed
           Authoring and Versioning (WebDAV)", RFC 6352,
           DOI 10.17487/RFC6352, August 2011,
           <https://www.rfc-editor.org/info/rfc6352>.

[RFC9083]  Hollenbeck, S. and A. Newton, "JSON Responses for the
           Registration Data Access Protocol (RDAP)", STD 95,
           RFC 9083, DOI 10.17487/RFC9083, June 2021,
           <https://www.rfc-editor.org/info/rfc9083>.

[RFC9610]  Jenkins, N., Ed., "JSON Meta Application Protocol (JMAP)
           for Contacts", RFC 9610, DOI 10.17487/RFC9610, December
           2024, <https://www.rfc-editor.org/info/rfc9610>.

Author's Address ๐Ÿ“ฎ

Robert Stepanek
Fastmail
PO Box 234
Collins St. West
Melbourne VIC 8007
Australia
Email: rsto@fastmailteam.com

That's the whole RFC, bestie ๐ŸŒˆ๐ŸŽ€โœจ

๐Ÿ“ฆ where this page comes from