A contact sync server for Thunderbird

Here’s a short overview of the Zindus addon for Thunderbird.

What is the Zindus addon?

The addon is a sync server specializing in contacts and address books.

It’s purpose is to bring free (open-source) and easy-to-use contact sync to Thunderbird.

A contact sync server

Much of the contact data that Thunderbird should sync with lives in applications that aren’t sync-aware. The Google Contacts and Zimbra APIs are two examples. Somewhere along the line, a sync server is required to orchestrate a sync.

Sync servers are usually heavyweight frameworks installed on server hardware and configured by people wearing white coats. The Zindus addon isn’t one of those. It’s lightweight and special-purpose: it only syncs contacts and address books. It doesn’t have a screenful of knobs and dials. The user-interface is simple and easy to use.

Server settings screenshot

Although the addon is lightweight, quality hasn’t been sacrificed. The addon supports conflict detection, fast and slow sync, and is tolerant of failures in the network. Status is surfaced via a simple statusbar indicator. The result is sync that runs in the background without care or feeding.

Statusbar screenshot

Decentralization

The appeal of a sync server as an addon is that it positions Thunderbird as a hub in the interconnected mesh of the Internet. Desktop software like Thunderbird needn’t always be a “spoke”, relying on third-party “master” sync servers to sync non-sync-aware applications.

Insipration for this decentralized mesh model of sync, together with a conviction that a tiny sync server could be written in Javascript, came from an article written in 2005 by Ray Ozzie1. Ray used the term “the RSS of synchronization” to envision synchronization that was simple and could catch on quickly. Ray’s team subsequently developed Microsoft’s Simple Sharing Extensions, later renamed FeedSync.

The key to implementing this vision in Thunderbird is reversing the traditional order of things: doing the “hard” parts of sync in an addon, and thinking of the server simply as a source of data.

The hard parts of sync

The Zindus addon does the “hard” parts of contact sync in Thunderbird.

What are the “hard” parts of sync? It isn’t moving contacts in and out of the data sources, though Thunderbird’s Mork-based address book is a kooky beast. Primarily it’s:

  • alignment – working out the correspondence between contacts on both sides of a sync; and
  • conflict detection and resolution.

Here’s where the parts of sync live in server-centric vs a client-centric approach.

Thunderbird Server
Server-centric local addressbook remote addressbook
link to other data sources
alignment
handle conflicts
Zindus
addon
local addressbook
link to other data sources
alignment
handle conflicts
remote addressbook
link to other datasources

What about SyncML or protocol X?

The SyncML Sync Protocol is mostly about … you guessed it: protocol. The “hard” parts of sync are left as an implementation detail.

Google 2 and Microsoft 3 expose contact data using REST APIs. Zimbra also has a REST API but the grunt work is done via a Document-style SOAP service4. Don’t blame them for not using SyncML. Their choice of protocols make sense given the problems they’re trying to solve. What’s missing here isn’t protocol, it’s the orchestration of sync.

So the Zindus addon focuses on doing sync well, and if each new source of contact data has its own protocol for authentication and data transfer, that’s ok - Mozilla has excellent support for networking and parsing.

It probably isn’t that interesting to describe exactly how the “hard” parts of sync get tackled in the addon. Suffice to say that it all happens in a pure Javascript addon that is < 130K.

Happy syncing!

Footnotes

1 Ray Ozzie’s inspiring 20 Nov 2005 article titled “Really Simple Sharing” used to live on Microsoft’s blogging platform but the url broke sometime after people started poking fun at the platform. The article is still available at the wayback archive.

2 Google Contacts Data API homepage.

3 Windows Live Contacts homepage.

4 Download the Zimbra source code to read the REST and SOAP API documention.

If you liked this Blog, share the love :                    

One Response to “A contact sync server for Thunderbird”

  1. Zindus » Blog Archive » Fault tolerance Says:

    […] Zindus addon is designed to work in a sync mesh and failures at every node in the mesh are inevitable. When a failure is detected, the sync engine […]

Leave a Reply