Happy New Year Zoterons,
We're planning a major server and client change that I wanted to share
with the list.
We're in the process of adding to the server API the functionality
necessary to fully and efficiently support API-based syncing from the
Zotero client and other third-party clients. Once this is done, we'll be
rewriting the Zotero client to use the API exclusively and stop using
the private sync protocol we've used up until now.
This is a major undertaking, but it will have significant benefits,
including enabling equivalent sync functionality in all clients, the
ability for Zotero client users to sync much larger libraries and have
better failure scenarios (e.g., a problem with one item in one library
won't break syncing of all items in all of a user's libraries, at the
cost of atomicity), a huge simplification of server code with easier
maintenance and better testing coverage, and API access to all library
data. Having a single interface that we use in the client ourselves will
allow us to focus on improvements that benefit all API consumers, most
notably with regard to performance.
We're a ways off from launching this, but we've created a document that
outlines the sync process we plan to use in the Zotero client as well as
some possible variations for different use cases:
The document is incomplete and untested, and it may contain some logical
flaws, but it gives an idea of the new functionality that will be available.
I've been working on the new server code in a local branch, but within
the next few weeks I'm planning to push it to a branch on GitHub that
will be accessible to API clients via an HTTP header for testing. I'll
post here when that's available.
We think we can do this with minimal impact on existing clients, though
some clients may need a couple tweaks. We'll provide advance warning if
that's the case.
Let me know if you have any questions or feedback.