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



Follow on twitter
RSS Feed
August 5th, 2008 at 12:00 pm
[…] 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 […]