Major feature release. Calibre users can finally automate the last mile — finished Bindery imports land in Calibre with no manual "Add books" step. Library curation gets a sharper tool: the author list stops fragmenting into "RR Haywood" / "R.R. Haywood" / "R R Haywood" duplicates, and the new Merge authors flow reunites them under one canonical row. Backend test coverage continues its climb, with internal/api and internal/importer both breaking 60%.
Added
- Calibre library integration via
calibredb(#32) — after a successful import, Bindery mirrors the book into a configured Calibre library by shelling out tocalibredb add --with-library <path>and stores the returned Calibre book id on the Bindery book row for future OPDS and cross-library lookups. Opt-in under Settings → General → Calibre with three fields (enabled / library path / binary path) and a Test connection button that probescalibredb --version. Failures during the Calibre call are logged and swallowed so a missing binary or unreachable library never rolls back an otherwise-good Bindery import. Matches the Path A approach on the roadmap — the looser-coupled drop-folder / OPDS paths remain planned. - Author aliases — merge duplicate authors (#45) — new
author_aliasestable plus a Merge authors modal on the Authors page (and a Merge button on each author's detail page). Picking a source and target reparents the source's books onto the target, deletes the source row, and preserves the source's name + OpenLibrary id as aliases pointing at the target. The add-author flow now consults the alias table: if the requested name already resolves to an existing author, the POST returns409 ConflictwithcanonicalAuthorIdso the UI can prompt for merge instead of silently ingesting a duplicate. Two new endpoints:GET /api/v1/author/{id}/aliasesandPOST /api/v1/author/{id}/merge. The merge is transactional — if any child update fails, nothing changes.
Changed
- Backend test coverage raised to 60%+ on the two laggards —
internal/apinow 62.7% (was 40.5%),internal/importer62.2% (was 40.7%). New_test.gofiles cover the settings / custom-formats / delay-profiles / files / import-lists / migrate / notifications / quality-profiles / search / series handlers and the importer'stitleMatch/ tokenize / path-remap helpers.
Upgrade notes
- Schema: two additive migrations land (
008_calibre.sqladds acalibre_id INTEGERcolumn onbooksplus threecalibre.*settings rows;009_author_aliases.sqladds theauthor_aliasestable). Drop-in binary or image replacement is safe. - Calibre is off by default. Existing installs are unaffected until you flip the toggle in Settings → General → Calibre. The
calibredbbinary must be reachable from the Bindery process — in Docker this means either bind-mounting a calibre install or picking an image that shipscalibredbon the PATH. A future release may publish abindery-calibreimage variant; track progress on #32. - No duplicate-author migration is run automatically. Existing fragmented author rows stay as-is until you merge them manually via the new modal — this is intentional, since "are these two rows the same person?" needs a human in the loop.