Plugins / Organising & tags

Linter for Zotero

by northword · github.com/northword/zotero-format-metadata

Lints item metadata: sentence-case titles with rich text (italics, sub/superscript), journal abbreviations, language detection, normalized dates, DOIs and pages, duplicate warnings on import, and one-click refresh from a DOI or arXiv ID.

View source
Downloads a .xpi file (0.9 MB). In Zotero, open Tools → Plugins and install it from the file.
StarsPeople who starred the repository on GitHub: a rough measure of interest.
1,060
DownloadsAll-time downloads of its release files from GitHub. Installs from elsewhere aren't counted.
2.96M
ContributorsPeople who have committed code to the repository.
11
LicenceThe licence the code is published under, as GitHub reports it.
AGPL-3.0
B
Atlas gradeUse with care
because a zotero:// link (a web page can open one) can make it install add-ons without asking you (from zotero-plugin-toolkit), and 1 more finding
Applies to v4.0.1, released 9 Sep 2026Code checked · tested installed in Zotero 10.0.3 on 27 Sep 2026
What we found in the codeSets the gradeThe worst finding in these three areas sets the grade.
Code transparencyReadable code, uploaded by the project's automated GitHub buildThe release file was uploaded by the project's automated GitHub build. We haven't yet rebuilt it from the source to compare.LowLow concern: normal for plugins that do this job. Listed so you know.
Updates
Updates come from this project's GitHub repositoryThe update address offers this version
Where your data goesOnly contacts services we could identify7 addresses in 2 groups.LowLow concern: normal for plugins that do this job. Listed so you know.
Scholarly services (6)
abbreviso.toolforge.orgapi.semanticscholar.orgdoi.orgexport.arxiv.orgshortdoi.orgwww.crossref.org
Zotero (1)
Zotero lookup services
Where we found it
abbreviso.toolforge.orgcontent/scripts/linter.js · line 9174
const url = `https://abbreviso.toolforge.org/abbreviso/a/${publicationTitle}`;
api.semanticscholar.orgcontent/scripts/linter.js · line 10758
const url = `https://api.semanticscholar.org/graph/v1/paper/${encodeURIComponent(paperID.trim())}?fields=${fields.join(",")}`;
doi.orgcontent/scripts/linter.js · line 6391
const url = `https://doi.org/api/handles/${encodeURIComponent(doi)}`;
Powerful capabilitiesA zotero:// link (a web page can open one) can make it install add-ons without asking you, and 3 moreMediumMedium concern: worth reading before you install. One medium finding makes the grade B.
A zotero:// link (a web page can open one) can make it install add-ons without asking you (from zotero-plugin-toolkit)mediumMedium concern: worth reading before you install.A zotero:// link can make it run code if you approve a prompt (from zotero-plugin-toolkit)mediumMedium concern: worth reading before you install.Stores API keys or passwordslowLow concern.Works with files on your computerlowLow concern.
Where we found it
A zotero:// link (a web page can open one) can make it install add-o…content/scripts/linter.js · line 3334

zotero://plugin

Services.io.getProtocolHandler("zotero").wrappedJSObject._extensions["zotero://plugin"] = pluginBridgeExtension;
A zotero:// link can make it run code if you approve a promptcontent/scripts/linter.js · line 3290

zotero://ztoolkit-debug

Services.io.getProtocolHandler("zotero").wrappedJSObject._extensions["zotero://ztoolkit-debug"] = debugBridgeExtension;
Before you installShown, not gradedFacts to help you decide. They don't change the grade.
Works withZotero 10 · not 9, 11 betaUpdates automatically
Zotero 9 ✗ doesn't workZotero 10 ✓ worksZotero 11 beta ✗ doesn't work
What you'll needAn API key for some featuresDetected automatically from its code
No further detail for this area yet.
MaintenanceActive · last release 9 Sep 202611 contributors
No further detail for this area yet.
LanguagesDocumentation in EnglishInterface: English and Chinese
No further detail for this area yet.
We report what we found in the code. Open any area for the evidence.How we gradeReport a problem

What it does

Written by AI from the README

Lints item metadata: sentence-case titles with rich text (italics, sub/superscript), journal abbreviations, language detection, normalized dates, DOIs and pages, duplicate warnings on import, and one-click refresh from a DOI or arXiv ID.

Imported metadata is inconsistent, and the errors surface later as messy bibliographies. Linter fixes them in bulk, at the source.

What you'll need

Detected automatically
  • An API key for some featuresWorks without one: All linting and metadata formatting; Semantic Scholar is used without a token at a slower rate. Needs a key (Semantic Scholar): Semantic Scholar token, only for faster lookups.

Where your data goes

We found: only contacts services we could identify. 7 addresses in 2 groups.

Scholarly services (6)
abbreviso.toolforge.orgapi.semanticscholar.orgdoi.orgexport.arxiv.orgshortdoi.orgwww.crossref.org
Zotero (1)
Zotero lookup services
Evidence · file and line
abbreviso.toolforge.orgcontent/scripts/linter.js · line 9174
const url = `https://abbreviso.toolforge.org/abbreviso/a/${publicationTitle}`;
api.semanticscholar.orgcontent/scripts/linter.js · line 10758
const url = `https://api.semanticscholar.org/graph/v1/paper/${encodeURIComponent(paperID.trim())}?fields=${fields.join(",")}`;
doi.orgcontent/scripts/linter.js · line 6391
const url = `https://doi.org/api/handles/${encodeURIComponent(doi)}`;

Forks and alternatives

1 listed fork.

Plugins for the same job

The developer's response

The developer hasn't responded. Developers can reply here, and their reply sits next to our findings.I'm the developer
Install Linter for Zotero
BUse with care
Before you install: A zotero:// link (a web page can open one) can make it install add-ons without asking you (from zotero-plugin-toolkit), and 1 more finding.Read the finding
Compare with similar plugins