Browser extension for users of the bibliographic reference manager JabRef. It automatically identifies and extracts bibliographic information on websites and sends them to JabRef with one click.
When you find an interesting article through Google Scholar, the arXiv or journal websites, this browser extension allows you to add those references to JabRef. Even links to accompanying PDFs are sent to JabRef, where those documents can easily be downloaded, renamed and placed in the correct folder. A wide range of publisher sites, library catalogs and databases are supported.
Please post any issues or suggestions here on GitHub.
- Automatic detection and conversion: detects embedded BibTeX or RIS blocks, and can run local translators matched via
translators/manifest.json. - Legacy Zotero translators: many Zotero legacy translators run in an offscreen runner with small
ZU/Zoteroshims. - Auto-send: when a BibTeX entry is produced, the popup will forward it to JabRef if JabRef is reachable over HTTP.
- Persistent logs: popup console messages are persisted to
chrome.storage.localto aid debugging. - Direct HTTP POST to JabRef (no external bridge required).
-
Download JabRef from the official site: https://www.jabref.org/ and choose the installer or application bundle appropriate for your OS. Currently you need to use the latest 6.0 alpha release.
-
Install and start JabRef using the normal installer or by running the downloaded application bundle.
-
In JabRef open the application's Preferences
File -> Preferences. -
Enable the listener as shown in the screenshot. Leave the default port,
23119, or pick another port and remember it for the extension settings.
The extension a settings page where you can configure the port used to connect to JabRef. Make sure it matches the port configured in JabRef's preferences (default 23119).
It is possible to install the most recent developer version instead of the one from the store: You can load it as an unpacked/temporary extension.
- Open
chrome://extensions/in the browser. - Enable Developer mode (toggle top-right).
- Click Load unpacked and select this repository folder (the folder that contains
manifest.json).
- Open
about:debugging#/runtime/this-firefox. - Click Load Temporary Add-on... and select the
manifest.jsonfile from this repository.
- Run
make safarito build the Safari extension. - Open the generated Xcode project in
dist/safari/JabRef Browser Extension/. - Click the Play button (or press
Cmd+R) in Xcode to build and run the extension. - Safari will open. You may need to enable the extension in Safari Settings > Extensions.
- Ensure Allow Unsigned Extensions is enabled in the Develop menu (if you don't see the Develop menu, enable it in Safari Settings > Advanced).
Note: Loading the extension this way is temporary in Firefox and will be removed when the browser restarts. For permanent installation you can pack and sign the extension or install from a browser extension store.
- Start JabRef and ensure remote operation is enabled.
- Open the extension popup from the toolbar.
- The popup attempts automatic detection on the active tab; if it finds or converts a BibTeX entry it will populate the textbox and attempt to send it to JabRef. For example, the arXiv and click the JabRef symbol in the Firefox search bar (or press Alt+Shift+J). You can also select and run local translators from the manifest via the popup UI.
- Once the JabRef browser extension has extracted the references and downloaded the associated PDF's, the import window of JabRef opens.
Notes:
- If the popup cannot connect to JabRef, check the configured port in the extension settings and that JabRef is running and listening for HTTP requests.
- Open the popup DevTools (right-click → Inspect) to view logs when debugging translators or connection issues.
Internally, this browser extension uses the magic of Zotero's site translators. As a consequence, most of the credit has to go to the Zotero development team and to the many authors of the site translators collection. Note that this browser extension does not make any changes to the Zotero database and thus both plug-ins coexist happily with each other.
- Install Node.js (e.g.,
choco install nodejs) - Fork the repository.
- Clone the repository with submodules:
git clone --recursive git@github.com:{your-username}/JabRef-Browser-Extension.git - Install development dependencies via
npm install. - After cloning the repo execute the python script
scripts/import_and_patch_translators.py - JabRef running locally and reachable over HTTP on a configurable port.
- The popup assumes JabRef is reachable at
http://localhost:<port>(default port stored in extension settings, default23119). - Start browser with the add-on activated:
Firefox:
npm run dev:firefoxChrome:npm run dev:operaSafari:make safari(then run the generated Xcode project; macOS and Xcode required)
- Open your Chromium-based browser and go to
chrome://extensions/. - Enable Developer mode.
- Click Load unpacked and select this repository folder.
For Firefox development use about:debugging#/runtime/this-firefox and load a temporary add-on.
For Safari development, run make safari and open the resulting Xcode project in dist/safari/ (macOS and Xcode required).
JabRef Browser Extension/
├── popup.html
├── popup.js # UI, translator loading, HTTP send logic
├── popup.css
├── offscreen.html # Offscreen context used to run legacy translators
├── offscreen.js
├── sources/ # helpers (ris parser, translator runner, adapters)
├── translators/ # bundled translators + manifest.json
└── README.md
The extension includes a simple testing system, leveraging the test cases in the translators. To run tests:
npm install
node test.js <translator-file.js>While it is possible to run tests without a specific translator file, providing one will limit the tests to only those defined in that file. If a translator does not work as intended the tests can help identify issues (e.g., missing zotero shims).
- If connection fails, open popup DevTools and inspect the console. The popup provides extended HTTP error logging.
- Some legacy translators may need extra small shims; errors will be logged to the popup console and persisted to storage.
- If translators fail to run due to Manifest V3 CSP, the code attempts to run legacy translators in the offscreen runner to avoid unsafe-eval.
npm outdatedgives an overview of outdated packages (doc)npm-upgradeupdates all packagesnpm installinstall updated packages
- Increase version number in
manifest.json npm run build- Upload to:
- Remove the
keyfield inmanifest.jsonand build again. Then upload to:

