README file from
GithubObsidian Zotero Bridge Plugin
Obsidian-Zotero integration plugin that provides APIs for other plugins to connect to Zotero.
Prerequisites
Zotero >= 7
Enable Local API feature in settings: Settings > Advanced > Allow other applications on this computer to communicate with Zotero
Zotero <= 6
Install Zotero addon ZotServer
Configuration
The plugin settings screen provides the following options:
- Connection type –
Zotero 6 ZotServer PluginorZotero 7 Local API (v3) - User or group – which library to search: your personal library or one of your group libraries (Zotero 7 connection type only)
- Zotero server port – defaults to
23119; don't change unless you really know what you are doing
How to use
Zotero Bridge provides APIs for other plugins to connect to Zotero.
Example of such consumer plugin is Zotero Link.
APIs of this plugin are published with Obsidian plugin api library and can be used anywhere in Obsidian.
PluginApi.ZoteroBridge.v1().search() opens a search modal and returns a promise that resolves with the selected ZoteroItem. Its getValues() method returns an object with the following properties, ready for use in templates:
key– Zotero item keylibraryUri– library path forzotero://URIs:groups/<id>for group library items,libraryfor the personal librarytitle– item titleshortTitle– item short titledate– structured date object withyear,monthanddaypropertiesauthors– array of authors, each withfirstName,lastNameandfullNamefirstAuthor– first author of the itemcreatorSummary– creator summary as displayed by Zotero, e.g. "Smith and Jones"
Example use of Zotero Bridge APIs in Templater user scripts:
zotero.js user script:
module.exports = async function () {
const item = await PluginApi.ZoteroBridge.v1().search();
return (prop) => dotAccess(prop, item.getValues());
}
function dotAccess(str, obj) {
return str.split('.').reduce((previousValue, currentValue) => previousValue[currentValue], obj);
}
This function can now be used in templates:
(this example is taken from https://github.com/vanakat/zotero-bridge/pull/2)
<%* const zi = await tp.user.zotero() %>
<% zi('firstAuthor.lastName') %><%* if (zi('authors.length') == 2) { %> and <% zi('authors')[1].lastName %><%* } else if (zi('authors.length') > 2) { %> et al.<%* } %> <% zi('date.year') %> <% zi('title') %>
How to contribute
- Fork and clone this repository
- Link this directory to your plugins directory:
ln -sfn <this-directory> <your-test-vault>/.obsidian/plugins/zotero-bridge npm installto install all dependenciesnpm run devwill run development server- Reload your Obsidian with test vault open
npm testruns the Jest test suite
Please refer to following helpful resources:
- Unofficial Obsidian API docs
- Official Obsidian API definition file
- ZotServer repository for documentation on API
- Zotero search API code for the most up-to-date search API documentation
- Zotero 7 Local API announcement
Other Zotero integration plugins
While working on this plugin I found another Zotero integration one called Zotero Integration. If you are looking for a citation/bibliography integration with Zotero it might be a good option for you.
License
MIT