Releases: max3925vats/zotero-docling
Release list
Release v0.3.3
🩹 Fixes
- prefs: Close malformed XML comments that blanked the preferences pane (f30a73e)
📖 Documentation
- Add context-menu and preferences screenshots to README (abb0aad)
- Move context-menu screenshot into Usage and shrink to ~1/3 width (8e8b9eb)
- Group screenshots side by side under a Screenshots subheading (1e91b27)
📦 Build
- deps: Override serialize-javascript to >=7.0.5 (50c8064)
🏡 Chore
- Gitignore local NOTES.md working notes (1a4a812)
🤖 CI
- Restrict GITHUB_TOKEN to least-privilege (contents: read) (e4512b1)
- Guard addon XHTML fragments for well-formedness (c634218)
❤️ Contributors
- Mayank Vats (@max3925vats)
Release v0.3.2
❤️ Contributors
- Brian C. Keegan, Ph.D. (@brianckeegan)
Release v0.3.1
Patch release with one quality-of-life fix for Apple Silicon users.
🐛 Quality-of-life
-
Surface a workaround hint for the Apple Silicon MPS + float64 error (#37). When docling-serve returns a conversion error containing both `MPS` and `float64`, the toast now appends a one-line hint pointing at the `PYTORCH_ENABLE_MPS_FALLBACK=1` workaround and the README Troubleshooting section. The original error message is preserved verbatim — the hint is suffixed, not replaced. Other errors pass through unchanged.
Pairs with the README Troubleshooting section added in #36.
The hint table (`KNOWN_SERVER_ISSUES` in `src/utils/serverErrorHints.ts`) is open for extension — future known docling-serve / upstream-library failure modes can be added as new entries without touching the call sites.
Thanks again to @brianckeegan for the implementation, and to the user whose bug report surfaced the MPS issue in the first place.
Release v0.3.0
Feature-heavy release. New auth surface, a markdown zip export, a guarded re-convert flow, smarter async polling, a reorganized preferences pane, plus an honest pile of internal hygiene work.
✨ New features
- Optional authentication for protected
docling-serveinstances (#27). Three schemes — Bearer token, HTTP Basic, custom header (e.g.X-API-Key). Default is no auth, so existing setups are unaffected. Credentials are stored in the Zotero profile as plain text — flagged in SECURITY.md. - Export markdown to .zip (#33). Bundle the converted markdown from a selection into a single flat
.zip, ready to drop into Obsidian, a RAG indexer, or any downstream pipeline. Available both as a right-click menu item and via Tools → Docling: Export markdown to .zip…. If any selected item has no.mdyet, a three-button dialog offers Skip / Convert first / Cancel. Files are named{citationKey}.md(Better BibTeX), falling back to{zoteroKey}.md. - Re-convert confirmation dialog (#26, #35). The destructive Re-convert (replace) action now shows a confirm dialog by default, with a Don't ask again checkbox that flips the new
confirmReconvertpref. The same pref is also exposed as a checkbox in the Behavior section so the opt-back-in path is symmetrical. - First-run onboarding nudge (#29). One-time toast on first startup pointing the user at the preferences pane. Self-clears after the first successful Test Connection so it doesn't keep firing.
- Persisted Test Connection result (#29). Reopening the prefs pane repaints the last known server status (with timestamp) instead of an empty line.
- Smarter async polling (#25). When the async transport polls a docling-serve task and the server starts failing, an escalating warning surfaces a one-time toast after ~10 consecutive failures so a dead server isn't silent. Separately, an optional client-side wait ceiling (
asyncMaxWaitMin) can now be configured — default is0 = unlimited, the honest default given docling-serve has no cancel API. - Processing-time in completion toast (#28). Batch toasts now show
— took 4m 12swhen at least one item completed successfully. Honestly labeled as server work-sum, not wall-clock.
🎨 UI
- Preferences pane reorganized into layered disclosure (#31). Essentials (Server, Behavior, Output) are always visible. Conversion options (Conversion + Enrichments + VLM) and Advanced (Async + Advanced JSON) are now collapsible sections, collapsed by default. Open-state persists across pane closes and restarts.
- Inline guidance added across the prefs pane (#31). VLM and picture-description preset menulists now have per-option tooltips and a live description line below the dropdown. Auto-convert, OCR languages, and Advanced JSON got clarifying help text.
🐛 Fixes
- Race condition in
runBatch(#23). Two rapid clicks of Convert with Docling could both pass the in-flight guard and spawn duplicate batch orchestrators that fought over the shared progress window. ThebatchInFlightflag is now set synchronously before the firstawait. updateManagedHeadlinebody semantics clarified (#24). Parameter renamed toappendBodyand documented to make it explicit that the body stacks rather than replaces. No behavioral change.- CRLF handling in
stripExistingFrontmatter(post-merge fix in 0.3.0). The function was dropping only a trailing LF after the closing---, leaving a stray CR on CRLF input. Now consumes either. - URL validation in Test Connection (#28). Missing scheme, non-http(s), and unexpected path components now produce concrete, actionable error messages instead of confusing low-level errors.
🧹 Internal
- Hygiene pass (#28). Dead code removed (
src/utils/window.ts, emptyonNotifystub in hooks).stripExistingFrontmatterwired in defensively so a server response that already begins with a YAML block doesn't end up stacking two---headers. Node 20+ engine pin +.nvmrc. - Test framework adopted (#32). Goldberg-style testing conventions (3-part test names, AAA structure,
chai.expect, factories, property-based tests viafast-check). Covering tests fortruncateMiddle,formatDuration,buildFrontmatter,stripExistingFrontmatter,buildConvertForm, and the markdown zip export helpers.
📚 Docs
- README install path now lists three options (uv / pipx / container) with explicit instructions for each (#29).
- README refreshed to match the new prefs layout, the opt-in async ceiling, and the renamed zip export feature.
- Community standards added in the run-up to this release: CONTRIBUTING.md, SECURITY.md, Code of Conduct, GitHub issue and PR templates.
- Contributors section in README auto-rendered from the GitHub contributors list (bots filtered out by the upstream service).
❌ Closed without landing
- First-class remote LLM API for picture descriptions (#30) — closed without merging because it conflicted significantly with the prefs reorg and the original PR didn't account for cost-burning when a user clicks a Test Remote API button against a paid provider. Detailed requirements + safety guardrails for any future re-implementation captured on issue #17.
Many of the PRs in this release were authored by @brianckeegan (against issues I had filed earlier this week). Thanks Brian.
Release v0.2.1
Polish + consistent naming. No functional changes.
Changes
- Consistent "zotero-docling" naming throughout the source, prefs UI, and documentation. Menu items ("Convert with Docling", "Re-convert with Docling (replace)") keep their human-readable form, but every plugin self-reference now uses the lowercase repo name.
- README facelift: status badges (release, license, downloads, CI, template), explicit Docling attribution badge, lowercase repo header, visual separator under the badge row.
Release v0.2.0
Phase 5a polish drop.
New features
- Re-convert (replace): right-click → Re-convert with Docling (replace) deletes the existing
.mdsibling and re-runs the conversion. Only shown when there's already an.mdto replace. - YAML frontmatter built from Zotero parent metadata (title, authors, year, doi, url, zotero_key, citation_key) prepended to every
.mdoutput. Toggleable. - Export-to-folder: optional secondary sink. Set an absolute directory in prefs and every converted
.mdis also written there as{citationKey || zoteroKey}.md. - Concurrency control (`maxConcurrency`, default 1): convert multiple PDFs in parallel within one batch. Pairs with the async endpoint + a docling-serve started with `--workers ≥ 2`.
- OS-level notifications when a batch finishes if Zotero isn't focused.
- Reset to Defaults button in the prefs pane to wipe all plugin prefs back to built-in defaults.
- Per-parent status tags (`docling/done`, `docling/incomplete`, `docling/error`) so you can filter your library by conversion status.
Fixes
- Fluent parser error on the Export-folder help string that previously caused the locale key to be silently dropped.
Internal
- `ConcurrencyLimiter` semaphore utility.
- DB-write lock to serialize attachment creation against the Zotero SQLite store.
- Blur-aware managed progress window that stops updating cleanly when Zotero is hidden.
Release v0.1.0
First public release.
Features
- PDF → Markdown conversion via Docling. Right-click any PDF attachment (or parent item containing PDFs) → Convert with Docling → the resulting
.mdis attached back to the same Zotero parent. - Sync and async transports. Default is the sync
/v1/convert/fileendpoint; long VLM jobs that would otherwise hit upstream proxy timeouts can be routed through/v1/convert/file/asyncwith client-side polling. - Full preference surface for docling-serve options. Pipeline (standard / VLM), OCR + language, table mode, formula / code / chart / picture enrichments, VLM presets, plus an Advanced JSON escape hatch for anything not exposed in the UI.
- Auto-convert on import (opt-in): newly imported PDFs are converted automatically with a 3-second debounce.
- Skip-if-exists to avoid duplicating work on re-runs.
Notes
- Tested against
docling-serve1.18.0 and Zotero 7.0 / 9.0.x. - Build:
npm run buildproduces an.xpiunder.scaffold/build/. - See README.md for install + setup.
Release Manifest
This release is used to host update.json, please do not delete or modify it!
Updated in UTC 2026-06-19T14:11:44.507Z for version 0.3.3