Jack Barnes165 downloadsSearch Zotero annotations and PDFs and insert links to them in your notes.
Search Zotero PDF attachments and annotations from Obsidian and insert a Markdown link at the cursor.
zotero://open-pdf/library/items/... links, including annotation page numbers.The plugin is desktop-only because it communicates directly with Zotero Desktop on the local loopback interface.
Once the plugin is accepted into the Obsidian community directory:
For beta testing before directory approval, install BRAT from Community plugins and add:
https://github.com/yuukibarns/obsidian-zotero-completion
npm install
npm run build
npm test
Run Zotero Completion: Insert annotation or PDF link from the command palette. The first use fetches data from Zotero; later uses read the persisted cache immediately. Assign a hotkey from Settings → Hotkeys if desired.
Use Zotero Completion: Refresh annotation and PDF cache after changing your Zotero library, or Clear annotation and PDF cache to force a fetch on the next insertion.
The plugin sends HTTP requests only to a loopback address (localhost, 127.0.0.1, or ::1). The default endpoint is Zotero Desktop at http://127.0.0.1:23119/api. Non-loopback API URLs are rejected.
It retrieves library item metadata, PDF attachment metadata, and annotation text, then stores a normalized cache in the vault's Obsidian plugin data. It does not modify the Zotero library. It has no telemetry, advertisements, account requirement, or requests to third-party services.
If refresh cannot contact Zotero, confirm Zotero is running and test its local API:
curl -i -H 'Zotero-API-Version: 3' \
'http://127.0.0.1:23119/api/users/0/items?limit=1'
A working local API returns HTTP 200 and a JSON array.
Push the source to a public GitHub repository, then tag the commit with the exact version from manifest.json (without a v prefix):
git tag 1.0.0
git push origin main 1.0.0
The release workflow builds and tests the plugin, then publishes main.js, manifest.json, and styles.css as GitHub release assets. Submit the repository URL through the Obsidian community directory; only the initial release requires review.
MIT © 2026 Jack Barnes