Zotero Integration Isn't "Privacy First" At All


Nothing wrong with Zotero, just their online system being required to cite in Logseq seems not in keeping with the principles of Logseq.

Zettlr is capable of offline Zotero citing using a plugin called BetterBibTex, for example

While the general integration with Zotero, especially the notes, (Support for Zotero 6 Notes import - #3 by gax) is more challenging, it would be great if Logseq had at least a basic local citation picker, like e.g. vscode:

The citation picker would then insert a link of the form [(Gax 2022)](zotero://select/library/items/...)

Getting citations is possible at the client level and does not require any online access or a synchronized Zotero database.

There are multiple options to get citations from Zotero, BetterBibtex is probably the best way currently.
Still it is not a great solution, there is substantial latency.

A longer list is here: plugins [Zotero Documentation]
Sadly, Zotero has only a very limited local API, this is where BetterBibtex comes in.
A description of the different Zotero client APIs: dev:client coding [Zotero Documentation]

CAYW is very easy to use, but it returns the id, and I am not sure how to create a zotero:// link back to this. The following command will open a citation picker and pull all available information (needs BetterBibtex installed).

curl -s ""


  • No need for Zotero subscriptions
  • No need to keep Zotero database online
  • Better privacy
  • Works even when offline
  • Less latency
1 Like

I agree that logseq should have local-first zotero integration, as has been implemented e.gg in zettlr. BetterBibtex seems the way to go. Maybe the zettlr impementation offers some helpful insights: Link to external pdfs in local Zotero folder and Better BibTex support @gax are you saying that the simple curl line you provide

curl -s ""

would enale CAYW in Logseq?

1 Like

Yes, it is very close. BetterBibtex in Zotero installs runs a local server.
When you run the curl script, Zotero opens the red citation picker shown in the picture, and then curl returns a JSON string with all the selected items. No need to install any extra software or to program the search window, but not as well integrated as /zotero either.

The only thing missing is how to translate the numeric id in the string to the alphanumeric item identifier to link back to the item, or maybe the zotero://select links also work with the numeric id. I did not find any documentation. This is all I found: Notes 2020-02-23 Zotero select - Google Docs

BetterBibtex could also easily return the identifier with the query, the website mentions that they can add more fields to the output if desired.

I just looked at the Zettlr solution, Citations - Zettlr Docs, this uses another feature of BetterBibtex, automatic export into a .csl.json file (Step 2). I don’t know if the export is still fast for very large libraries. I tried it on mine and it takes about a minute. The file does not contain the identifier string needed for the zotero://select link either.

What Zotero really needs is a local client API that mirrors all functionality of the web API and more.
Sadly, at the moment Zotero is moving towards a cloud-only tool.

I posted another comment on how Logseq could interface with the new Zotero 6 notes while maintaining privacy: Support for Zotero 6 Notes import - #3 by gax

1 Like