Origins
This fork
zotLook is a fork of Zotero7QuickLook by Guillaume Chapron, from whom the code and the MIT licence come. It is maintained and developed further by fre-ms.
A good deal of Chapron’s work is still in place. Measured against the last upstream commit, counting only lines that are neither blank, a comment nor a brace: 45 % of the JavaScript and 52 % of bootstrap.js survive verbatim, and 20 of the original 28 methods are still present under their own names. The plugin has grown around them — those surviving lines are about a fifteenth of what is here today. The figures come from tool/provenance.mjs, and the test suite fails when they drift from what this page says.
The architecture is his throughout:
- the bootstrap-plus-singleton shape
- the capture-phase key listener on the items tree that gets in front of Zotero’s own Space handler
- holding the preview subprocess open so a second press dismisses it
- the temp-directory strategy
- resolving a synced attachment before previewing it
- the ideas behind both the EPUB-to-HTML conversion and the contact sheet
The plugin ID is zotlook@fre.ms, distinct from Chapron’s, so the two install side by side rather than over one another.
Why a fork
Nearly half of Chapron’s lines are still here, and the architecture is his throughout. Why not contribute to his project rather than start a line of one’s own?
The size of it. What has been added cannot be offered as a pull request: two further platform routes, a page renderer, the annotation pipeline, the EPUB conversion with its contents list, a settings pane, a test suite. That is not an addition but a different order of magnitude, and nobody is served by dropping something like it on another project’s doorstep as a proposal.
The aim. Chapron describes his plugin as “A Zotero 7+ plugin for macOS” and builds it on qlmanage, the system’s Quick Look command. That is a clear and legitimate decision: a plugin that does exactly what it should on one system. zotLook aims elsewhere — at all three — and that is not a better aim, only a different one.
The contact sheet shows it most plainly. It was first drawn by a bundled Swift program through PDFKit: 0.12 s for 30 pages. What replaced it is the pdf.js build Zotero already ships, which runs everywhere — 0.42 s for the same pages, four times as long.
The Swift program only ever ran on macOS. Keeping it would have meant two renderers and two ways of drawing annotations that had to keep looking alike. The decision went against speed — under an aim of “macOS only” it would have gone the other way, and rightly.
The four reasons, in the order of their weight:
- Cross-platform. Previews on Linux and Windows, not only on macOS.
- Annotations in the preview. Zotero keeps them in its database, so without this a preview shows an unmarked document. It was the gap asked about most often in the Zotero forums.
- Links from the contact sheet into the reader. A click on a thumbnail opens that very page — which turns an overview into a tool.
- EPUB previews on every system. None of the three system previews renders an e-book, so zotLook converts it itself.
The fork carries a plugin ID of its own so that both can be installed side by side, and the MIT licence with Chapron’s copyright notice unchanged. What is built here is open to him — a good part of it is his code.
Further back
Behind that stands ZoteroQuickLook by Mikko Rönkkö, which brought Quick Look to Zotero 4–6 and gave this line of plugins its purpose and its name.
That plugin was a XUL overlay extension — install.rdf, overlay.xul, a Windows Bridge.exe, an AppleScript and a Perl script — an architecture Zotero 7 abolished outright, so Chapron wrote a new plugin rather than porting the old one.
Comparing the two directly bears that out: of 250 substantive lines in the original, 28 also occur here, and every one of them is a line any plugin writes — return;, } else {, let path = item.getFilePath();. Everything else the two share is Zotero and DOM API names.
Rönkkö is therefore credited as the originator of the idea, and is deliberately not listed as an author of this code — the repository carries no licence, and none was needed, because nothing was taken from it.