Skip to content

mjthoraval/Weavero

Repository files navigation

Weavero

Zotero Tested on CI

Latest release Downloads License

A Zotero 7 to 10-beta plugin that layers convenience features on top of the standard library and reader: clickable links in annotation comments and notes, a fast filter pane, bookmarks, related-item tools, a structured tabs menu, tab and window management, and extra items-tree columns. Everything is individually toggleable in Preferences.

Note

Your documents are safe. Weavero never writes to or modifies your PDF files or attachments on disk — there's no risk of corrupting your documents. It only layers UI on top of Zotero's standard views and keeps its own data (bookmarks, preferences) in separate files. Any feature you turn off is inert.

Warning

Weavero is under active development — please report anything that misbehaves (open an issue). A few things to know:

  • Built on Zotero's internals, and on a beta. Weavero hooks deep into Zotero's reader, items tree, tabs menu, and preferences, and is developed and tested against Zotero 10.0-beta. A Zotero update (beta or stable) can temporarily break a feature until the plugin catches up.
  • Bookmarks are local-only. The Bookmarks feature stores its data in <Zotero data dir>/weavero/bookmarks.json. Bookmarks are not synced across computers and are not included in Zotero's cloud backup — they won't appear on your other devices, and they're lost if you start a fresh profile or lose that folder. Back up your Zotero data directory if your bookmarks matter to you. (The Zotero developers have said they intend to add plugin-managed synced storage; Weavero will adopt it once it's available.)
  • Some features need Zotero 10. A few rely on Zotero 10 APIs and may be unavailable or behave differently on Zotero 9.
  • Experimental, opt-in features. Some features are off by default and marked experimental in Preferences (e.g. PDF outline text highlight in the Extras tab) — they may be rough or change.

Features at a glance

Grouped the same way as the Preferences tabs. Expand a group below for the details and screenshots.

  • Enhanced links and relations — clickable links (URLs, zotero://, 17 optional app schemes) in comments and notes; inline or icon + popup, colour-coded, with markdown; copy zotero:// links for items / collections / searches / reader page / location / selection; Ctrl/Shift+click navigation through internal document links (into a split pane or a second window); related-item tools (Add Related…, chain badge, Open Related submenu, Related column, linked-library highlight).
  • Filters — items-tree filter popup (annotation colour/type/comment, attachment & item type, Has DOI/URL/Related/Links, multi-select tag/publication/author/added-by/collection/search) with a removable chip bar; reader annotation filter; Selection Target tri-state; structured tabs menu with per-library and file-type filters.
  • Bookmarks — library bookmarks (items / collections / searches / URLs) via a toolbar dropdown; document bookmarks (in-PDF positions, pages, selected text, annotations) in a reader-sidebar tab, foldered and draggable, with search + funnel filter and hover cards; auto-hide when empty.
  • Tabs and Windows — pinned tabs (Firefox-style, icon-only); named, colour-coded tab groups (collapse, drag-into, reopen); multi-select tabs; move or tear-off a reader tab to another window with no reload (scroll, zoom and selection preserved); reopen the last closed window/group; an item-details pane beside the reader in separate windows; optional multiple main windows (experimental).
  • Extras — items-tree columns (annotation, related, tag counts); Added By for annotations with per-user colours; group-library tab glyph; Hide title bar (Firefox-style); Open in External Viewer; PDF outline text highlight (experimental).

Features

Filters

Filter popup — a toolbar funnel next to the search box opens a compact filter panel; an accent dot marks the button while any filter is active. Click a facet to include, Alt+click to exclude.

  • Annotation colour, type, has-comment
  • Attachment file type — PDF / EPUB / Snapshot / Image / Video / Web Link / Linked File / Other File
  • Item Type (native menulist + icon-only chips for the types you use), plus a Standalone Note tile
  • Parent flags: Has DOI, Has URL, Has Abstract, Has Attachment File
  • Attachment / annotation flags: Has Bookmarks (Weavero document bookmarks), Has Annotations, Item Note
  • Cross-level: Has Tag, Has Related, Has Link (a URL in a comment or note) — each with an Apply to scope (parent / attachment / annotation)
  • Multi-select search: Tag, Publication / Journal (exact match — case matters), Author / Creator, Added By (group libraries), Collection, Saved Search; ranked matching (typing jfm finds Journal of Fluid Mechanics) with keyboard navigation (↑/↓ + Enter), and selections shown as include/exclude pills like Zotero's tag selector
  • Selection Target: Parent / Attachment / Annotation tri-state — controls Ctrl+A scope and dims out-of-scope rows
  • Strict per-row matching: OR across groups, AND within a group; filtering keeps only rows that match — ancestors are kept for tree shape, descendants are not auto-pulled.

Active filters show as a chip bar above the items tree — one removable chip each, plus + Filter, + OR Group, and Clear all. A chevron on a container's first visible child reveals rows the filter hid, and a scope button inside the search box can restrict quick-search to chosen row kinds.

See Filtering rules for the full logic.

Items-tree filter popup

Reader annotation filter. A funnel in the PDF / EPUB reader toolbar (next to Find) filters the open document's annotations by type, colour, has-comment, tags, and author — matched-out annotations disappear from both the sidebar list and the page, and it works even with the sidebar collapsed. Alt+click a chip to exclude; an accent dot marks the funnel while filtering, and a hide all annotations checkbox is included.

Tabs menu. The "List all tabs" dropdown gets a structured layout:

  • Library grouping — section headers (themed library icon + name + tab count); the Library tab stays above all sections.
  • Per-library tickbox filter — click to include, Alt+click to exclude. Hidden tabs disappear from the popup and from the main tab strip; the toolbar tabs-menu button picks up an accent tint while any filter is active.
  • File-type filter (funnel button) — same theme-aware attachment icons as the items-tree filter (PDF / EPUB / Snapshot / Image / Video / Web Link / Other File), plus a yellow Note tile.
  • Settings (gear button) — Sort by Library and Show Annotations Count toggles.
Tabs menu popup with library grouping   File-type filter popup
Bookmarks

Bookmarks across two scopes. Stored locally in <Zotero data dir>/weavero/bookmarks.json — see the syncing/backup warning near the top of this page.

  • Library bookmarks — a Bookmarks dropdown on the collections-pane toolbar for items, collections, saved searches, whole libraries, and plain URLs. Right-click a collection or library in the tree for Bookmark Collection / Bookmark Library. Quick access to the things you return to.
  • Document bookmarks — a Bookmarks tab in the reader sidebar for in-document locations: a precise position (drops a 📌 pin you can drag to re-place), a whole page (PDF), a selected-text passage, or an annotation in the current document — plus an "Elsewhere in Zotero" section for items / collections / URLs and cross-document selections. Add them from the + button or the reader's right-click menu.
  • Library-bookmarks tab in the reader (optional) — also browse your Library-scope bookmarks from the reader's Bookmarks panel; a scope toggle switches between this document and library (Ctrl-click to show both).
  • Folders & drag-and-drop — organise either list into folders and subfolders; reorder, nest (folders spring open on hover), and drag annotations, text selections, or items / collections / searches / libraries straight in.
  • Search & filter — each list has a search field and a funnel that filters by annotation type / colour / tags / author.
  • Rename, edit & reset — rename a bookmark (and edit its comment) without touching the source; Reset to Original Name restores the live label. Deleted targets show as dimmed, struck-through orphans with a ⚠ badge.
  • Hover card — hovering a row shows a rich card: kind, colour swatch, page label, text preview, comment, tags, source document, and created date.
  • Auto-hide when empty (optional, per scope) — hide the collections-pane button / reader tab until you add the first bookmark.
Tabs and Windows

Tab and window management on top of Zotero's tab bar. Each piece is individually toggleable.

  • Pinned tabs — drag a tab into the pinned region (or Pin Tab in the tab right-click menu) for a Firefox-style, icon-only tab. Pins persist across restarts and clear automatically if the item is deleted.
  • Tab groups — named, colour-coded groups on the tab bar: click to collapse/expand, hover to preview, right-click to rename, recolour, ungroup or close. Add tabs with the Add Tab to Group ▸ submenu or by dragging; saved groups can be reopened from the "List all tabs" dropdown.
  • Multi-select tabsCtrl/Cmd+click to toggle and Shift+click for a range, then move or close several tabs at once.
  • Move / tear-off reader tabs between windows — drag a reader tab into another window, or use Move to New Window. For PDFs this is a no-reload move that preserves scroll position, zoom and text selection (other attachment types fall back to a reload); the tab keeps its identity.
  • Reopen closed window / groupCtrl/Cmd+Shift+T, or the matching context-menu entry.
  • Item pane in separate reader windows — a standalone reader window can show the same item-details pane as the main window (metadata, attachments, related, notes, tags, collections). Resizable, with the width remembered.
  • Multiple main windows (experimental, opt-in) — adds a "New Main Window" entry to the tab right-click menu.
Two Zotero windows: the main window's tab strip shows pinned tabs, colour-coded tab groups, and window controls moved into the strip (compact title bar); a second reader window in front has its own tab group and an item-details pane on the right

The "List all tabs" dropdown's library grouping and file-type filter live under Filters — that's the tabs menu; this group is tab management.

Extras

Items-tree columns (icon-only, hidden by default; enable via the column-picker right-click on the items-tree header):

  • Annotations — count of annotations on attachments; sums across attachments on regular items.
  • Tags — count of tags per row: manual tags (blue) and automatic tags (default colour). Toggle off the automatic count to show only the manual count.
  • Related — count of related items per row.

Group-library visuals:

  • Added By for annotations — in group libraries, a badge showing who created each annotation (annotation rows aren't covered by Zotero's built-in Added By column), optionally tinted with a per-user colour so contributors are easy to scan.
  • Group-library tab glyph + tooltip — tabs whose item lives in a group library get a small "Group Libraries" cluster glyph on the file-type icon, plus a tooltip showing the tab title and a library icon + Library Name header.
Tab strip with group library badge on the third tab

Window and utility extras:

  • Hide title bar (Firefox-style) — replace the title bar with a browser-style bar (menus move out of the way, press Alt to summon them; window buttons move into the tab strip). Per-window-type sub-toggles (main window / separate reader window / separate note window). Windows / Linux only; off by default.
  • Open in External Viewer — a right-click item that launches an item's best attachment with the OS default application (below Show File in the items list and Show in Library in the tab menu). Works for any stored file; the entry's icon mirrors the attachment type. (Replaces the standalone "Open PDF for Zotero" plugin.)
  • PDF outline text highlight (experimental, off by default) — clicking a PDF outline (table-of-contents) entry flashes the actual heading text, not just the page. It recovers the heading position for embedded outlines (which only store a target point) and uses it directly for outlines Zotero generates itself, painting the highlight in place and keeping the timing consistent on rapid clicks (working around zotero/zotero forums #122030). The same consistent highlight applies to text-selection bookmarks.

Install

  1. Download the latest weavero.xpi from the Releases page.
  2. In Zotero: Tools → Plugins → ⚙ → Install Plugin From File… → pick the XPI.
  3. Restart Zotero if prompted.

Quick start

After installing, a few things to try:

  1. Clickable links — add a URL to an annotation comment (or note); it becomes clickable wherever the comment shows. Tune the surfaces and display mode in Preferences → Enhanced Links and Relations.
  2. Filter your library — click the next to the items-tree search box and pick an annotation colour, item type, tag, … (Alt+click a chip to exclude).
  3. Bookmark something — enable Preferences → Bookmarks, then use the Bookmarks dropdown on the collections-pane toolbar (items / collections / searches) or the Bookmarks tab in the reader sidebar (in-document locations).
  4. Tidy the tabs menu — open "List all tabs" to see library grouping and the per-library / file-type filters.

Every feature is opt-in/opt-out under Tools → Plugins → Weavero → Preferences.

Configure

Open Tools → Plugins → Weavero → Preferences. Features are grouped into tabs (Enhanced Links and Relations, Filters, Bookmarks, Extras) and individually toggleable; optional URL schemes and experimental features are off by default.

Build

Plugin source is TypeScript under src/. A Zotero plugin ships as a zip with a .xpi extension, but the source has to be bundled first:

npm install        # one-time
npm run build      # esbuild bundles src/ → .scaffold/build/weavero.xpi (+ update.json with the XPI's SHA512 hash)

(Through the pre-TypeScript releases there was also a no-Node manual-zip path — scripts/build.ps1 zipping src/* directly. That no longer applies now that src/ is TypeScript and needs bundling; use npm run build.)

Development

Developed with Claude and MCP Server Zotero Dev (hot-reload + privileged-context JS for fast iteration).

The Node toolchain (optional but recommended) provides:

npm install              # one-time setup
npm run typecheck        # tsc --noEmit, hard-gated to 0 errors
npm test                 # Mocha + Chai inside a temp-profile Zotero
npm run build            # build the XPI to .scaffold/build/
npm start                # hot-reload dev loop (auto-reload on src/ changes)
npm run release          # interactive: bump → tag → push (CI then publishes)

Tests run inside a separate Zotero instance against a temp profile — your primary library is unaffected. CI runs the same suite headlessly on every PR and on every push to main.

Build/test tooling is all devDependencies (nothing from npm ships in the XPI): typescript (the typecheck gate), zotero-plugin-scaffold (the esbuild-based bundler + XPI packer + temp-profile test runner behind npm run build / test / start / release), zotero-types (Zotero's TypeScript definitions), and mocha + chai (+ their @types).

Compatibility

  • Zotero 7.0+ (declared strict_min_version: 7.0, strict_max_version: 10.*).
  • Tested on Zotero 10.0-beta. Some features rely on Zotero 10 APIs and may be unavailable or behave differently on Zotero 9.

License

GNU Affero General Public License v3.0 — same license as Zotero itself.