<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>You may already be aware that bits and pieces of CardDAV support
      have landed in various versions of Thunderbird. This is an
      appropriate point for me to update you on what Thunderbird can and
      can't do with regards to CardDAV.<b><br>
      </b></p>
    <p><i>Please note that CardDAV support is <b>NOT</b> considered
        ready for general use.</i><br>
      <b></b></p>
    <p><b>Status of ESR, Thunderbird 78:</b></p>
    <p>ESR shipped with the bulk of the pieces in place. Unfortunately
      there wasn't time to complete the work, and so we're not
      publicising CardDAV as a feature of 78.</p>
    <p>Currently on ESR, CardDAV can connect to a server and download
      your contacts, and updates you make to contacts will be sent to
      the server, but there are no synchronisation abilities. The UI to
      create a CardDAV address book (File – New – CardDAV Address Book
      in the Address Book window) is hidden behind the preference <font
        face="monospace"> mail.addr_book.carddav.enabled</font>.</p>
    <p><b>Status of Beta, Thunderbird 81:</b></p>
    <p>CardDAV has the ability to do periodic and on-demand
      synchronisation with the server. You can right click on an address
      book in the UI and choose synchronise. Automatic synchronisation
      happens shortly after Thunderbird starts, and every 30 minutes
      after that, but there's no control it. The preference still
      exists.</p>
    <p>If you've been trying out earlier versions of the Thunderbird
      CardDAV implementation, you should remove any directories you
      created and recreate them. The set-up process now does some things
      it didn't previously do.<br>
    </p>
    <p><b>Plan for Daily, Thunderbird 82:</b></p>
    <p>The final pieces of the initial implementation of CardDAV are in
      review and are going to land any day now. When they do I'll
      consider this phase complete and remove the preference.</p>
    <p><b>What's been done so far:</b></p>
    <p>The origins of Thunderbird's address book system date back to the
      1990s and they're deeply entwined with the rest of the program.
      They are also not very compatible with many of the features of the
      vCard format, which is used for the exchange of information
      between client and server.</p>
    <p>A lot of work has gone into modernising Thunderbird's support for
      vCard. What existed before was the absolute minimum of read/write
      capabilities for vCard 2.1. vCard 2.1 has since been superseded by
      vCard 3.0 and 4.0. I have completely replaced Thunderbird's vCard
      implementation with that of <a
        href="https://github.com/mozilla-comm/ical.js/">ical.js</a>,
      which we ship as part of the Thunderbird calendar. Thunderbird can
      now read and write vCards in versions 3.0 and 4.0, and still
      (through a variety of hacks) read vCard 2.1.</p>
    <p>To translate vCards into objects the rest of Thunderbird
      understands (<font face="monospace">nsIAbCard</font>), without
      completely rewriting everything, I've created utility functions
      that translate between the two formats. Not all vCard data can be
      represented in the nsIAbCard format, so I've tried hard to ensure
      that Thunderbird can use the most relevant information, and that
      information doesn't get lost when converting back to vCard. (And
      yes, for those of you who have read the CardDAV documentation, we
      do store the original vCard and only modify it as necessary.)</p>
    <p>Finally we took our base address book storage, added the CardDAV
      protocol to it, and this is where we are today.</p>
    <p><i>At this point I'd like to thank the various people who have
        provided access to different types of servers for testing.
        That's been very helpful. Thank you.</i></p>
    <p><b>Can I do all of the things CardDAV is capable of, like mark an
        email address as "home" or "work"?</b></p>
    <p>No. Not only is our current format incapable of handling this
      information, but there is no user interface to do it with. For all
      intents and purposes, at this stage, a CardDAV address book
      behaves just like a normal Thunderbird address book, except that
      changes are relayed to a remote server and updates are retrieved
      from the server.</p>
    <p><b>Will I be able to do these things in the future?</b></p>
    <p>Yes. That's the intention anyway, but I haven't got a crystal
      ball so can't see what the future holds.</p>
    <p>By next year's ESR release, we should have a new user interface
      for the address book. This should be able to do many of the useful
      things you can do in other address book software, but it will
      require a lot more work in the background.</p>
    <p><b>Can I use this to connect to my Google contacts?</b></p>
    <p>Not at this stage. As per usual, Google have to be different, and
      they use OAuth instead of standard HTTP authorisation. The code is
      written, but we're waiting on Google to allow us to ask you for
      permission to access your contacts.</p>
    <p><b>How does this affect WebExtensions?</b></p>
    <p>To WebExtensions, a CardDAV address book appears the same as a
      regular address book, and no modifications are necessary at this
      point. In the future there may be some additional API functions
      available, and we'll try to do this in a backwards-compatible way.</p>
    <b>Where do I report bugs?</b><br>
    <p> Please use the <a
href="https://bugzilla.mozilla.org/enter_bug.cgi?product=MailNews+Core&component=Address+Book">Mailnews
        Core – Address Book</a> component to report bugs, unless the bug
      is in the UI, in which case use <a
href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Thunderbird&component=Address+Book">Thunderbird
        – Address Book</a>. Please provide as much information as you
      can, including the version of Thunderbird you see the problem in,
      any applicable error messages, and if it's relevant, the server
      software you're connecting to.</p>
    <p>The Network Inspector tool (Tools – Developer Tools – Developer
      Toolbox, then choose Network) is very useful for debugging
      problems. If the server reports an error message and Thunderbird
      fails to handle it appropriately, please file a bug.</p>
  </body>
</html>