Getting started
Requirements
zotgo drives the running Zotero 7+ desktop app over HTTP. It has no
offline/SQLite mode by design — reaching into an application's database is the
architecture it exists to avoid. Reads go through Zotero's Local API, which
is off by default; zot doctor checks for it and tells you how to turn it on.
Reads and connector ingestion work on Zotero 7.0 and up. The write
commands need Zotero 10.0 or newer: the local write API arrived in 10.0, and
7, 8 and 9 do not have it in any form. On an older build zot doctor shows
write as unsupported and zot grant refuses with that reason, so the
limitation surfaces before you rely on it rather than partway through a write.
| Zotero | reads, export, connector ingestion | writes |
|---|---|---|
| 7.0 – 9.x | yes | no |
| 10.0+ | yes | yes |
Install
go install github.com/CameronBrooks11/zotgo/cmd/zot@latest
Or download a prebuilt binary for your platform from the Releases page — no runtime, no dependencies, just an executable.
Check your setup
zot doctor
zot doctor — checking the local endpoint at http://localhost:23119
✓ Zotero running (v9.0.4)
✓ Local API enabled (schema 42, API v3)
Capabilities:
✓ read
✗ write this Zotero build has no local write API (added upstream in zotero/zotero#5015; update Zotero once a release ships it)
✓ connector-ingest
✓ local-file-access
Libraries:
My Library files ✓
Biological Reactor files ✗ attachments not accepted
Ready. zotgo can read your library.
doctor reports what the endpoint can do, not merely whether it answers. Every
unsupported capability carries its reason, so there is always something to act on.
zot --json doctor reports the same under data.capabilities, and exits non-zero
when Zotero is unreachable — so a script can branch on the exit status without
parsing the payload.
The Libraries section (local endpoint only) reports, per library you can file
into, whether it accepts attachment files. This is independent of the
endpoint-level local-file-access capability: a group library can be writable yet
have file storage disabled, so local-file-access ✓ while a specific library is
files ✗. That is why a library can silently never gain attachments. It appears
under data.libraries in --json.
If the Local API is off, doctor prints the exact steps to enable it:
Zotero → Settings → Advanced → General → "Allow other applications on this
computer to communicate with Zotero".
Next steps
- Read your library — the everyday commands.
- Write to it — if your Zotero build has the write API.
- Point at a remote library with
--web.