What works¶
This page is the feature-level status of altero's Zotero v3 compatibility.
Short version: ordinary Zotero Desktop synchronization is the target; the official mobile apps are not supported.
User-facing capabilities¶
| Capability | Status | Notes |
|---|---|---|
| Zotero Desktop synchronization | ✅ | Items, collections, tags, saved searches and deletions |
| Notes and annotations | ✅ | Included in normal item synchronization |
| Attachment file sync | ✅ | Files stored once per digest |
| Full-text upload and search | ✅ | Uses the database rather than Elasticsearch |
| Group libraries | ✅ | Includes group policy and membership |
| My Publications | ✅ | Includes browser publishing and profile pages |
| Citations and bibliographies | ✅ | CSL-based styles and Zotero-compatible formats |
| Zotero export formats | ✅ | API and browser export support |
| Browser interface | ✅ | Library browsing, account settings, groups and administration |
| OIDC and SAML browser sign-in | ✅ | Sign-in only; never a v3 API credential |
| OAuth 2.0 and OIDC provider | ✅ | Scoped tokens for third-party applications, confinable to chosen libraries and collections; requires a stable public URL |
| Passkeys and optional second factors | ✅ | Passkeys require a stable public URL |
| Import a personal library from zotero.org | ✅ | Preserves object keys and versions |
| Zotero iOS and Android apps | ❌ | No runtime alternate API host in the official apps |
Synchronization and API behavior implemented¶
altero implements the parts of the v3 API needed by the desktop client, including:
- API-key authentication and per-library permissions;
- OAuth 2.0 access tokens as a second credential for the same endpoints;
- personal and group library discovery;
- item, collection, saved-search and tag reads;
json,atom,keysandversionsresponse formats;- pagination, sorting,
sinceand version-aware conditional requests; - item, collection and saved-search writes with version preconditions;
- deleted-object synchronization;
- library settings;
- attachment full text;
- the three-step attachment file protocol;
- the streaming API at
/stream; - My Publications and publication visibility;
- citations, bibliographies, CSL JSON and Zotero export formats;
- group creation, membership and group policy;
- rate limiting when enabled; and
- API version negotiation.
The compatibility reference documents behavior that differs from the public API documentation or that had to be learned from the real client or server: Compatibility notes.
Additional altero features¶
These are not required for basic Zotero compatibility but are available on an altero instance:
- browser-based account and API-key management;
- instance administration without library-wide superuser access;
- OpenID Connect and SAML 2.0 browser sign-in;
- an OAuth 2.0 and OpenID Connect authorization server, so a third-party application can be given scoped, expiring access instead of an API key, confinable to chosen libraries and collections, with RP-initiated sign-out and a device grant for a machine that has no browser;
- passkeys, authenticator-app second factors and email codes;
- per-member group permissions such as read-only, add-without-remove and own-items-only;
- group activity and opt-in notifications;
- configurable retention;
- server-side tag rename;
- single-collection sharing links;
- storage reporting; and
- whole-library export/import and migration from zotero.org.
Not implemented¶
- Zotero's Note HTML and Note Markdown translators. These create a note rather than an ordinary bibliography/export response.
- The official Zotero iOS and Android clients, because they cannot be pointed at an alternate API host at runtime.
Client requests without a reference server implementation¶
Two client behaviors do not have a corresponding implementation in the public dataserver source:
GET /retractions/list; and- the streaming WebSocket service.
altero currently answers the retractions request with 404. Zotero logs the failure and continues syncing. The streaming API is implemented from the published protocol and observed client behavior.
Library versions and concurrent writes¶
Writes to a library are serialized so one request advances the library by one version, even when that request changes several objects. This is important because Zotero synchronization uses the library version as its consistency boundary.
See Database schema for the implementation details.