Sync one personal Zotero library and its PDF annotations to Obsidian-ready Markdown.
- One note per Better BibTeX citation key
- Incremental metadata, attachment, annotation, rename, and removal updates
- User-written Notes preserved across rerenders
- Read-only Zotero Web API access
- Mutation-free dry runs
- Separate Python API for tagged papers and already-local PDFs
- Personal libraries only
- One-way synchronization from Zotero to Markdown
- macOS primary; other platforms best effort
- PDFs linked from generated notes, not copied
Requirements: Python 3.13 or newer, uv, Better BibTeX, and a read-only Zotero API key.
uv tool install zotmd
zotmd config
zotmd sync --full --dry-run
zotmd sync --fullLater updates:
zotmd sync- Synchronize notes: setup, preview, and first sync
- Configure synchronization: paths, removals, and templates
- Discover local papers: typed Python records and validated PDF fingerprints
- Troubleshoot ZotMD: common failures and safe recovery