diff --git a/README.md b/README.md
index ca10e106e..310af7692 100644
--- a/README.md
+++ b/README.md
@@ -94,7 +94,7 @@ Clean-room Go rewrite, modern React UI, MIT-licensed, actively developed.
| | **Bindery** | LazyLibrarian | Livrarr | Readarr |
|---|---|---|---|---|
-| **Status** | Active (v1.22.x) | Active (community fork) | Alpha (0.1.x) | Archived (June 2025) |
+| **Status** | Active (v1.37.x) | Active (community fork) | Alpha (0.1.x) | Archived (June 2025) |
| **Stack** | Go, single binary | Python | Rust | C# / .NET |
| **Book metadata** | 6 independent sources, no scraping | Goodreads + fallbacks | 4 sources, no scraping | Dead backend |
| **Readarr `.db` import** | **Yes** | No | No | — |
@@ -108,7 +108,7 @@ Clean-room Go rewrite, modern React UI, MIT-licensed, actively developed.
**Pick Livrarr** if you want the same single-binary spirit and don't need the maturity, the Readarr import, Pi-class ARM, or a Helm chart yet.
**Calibre-Web / Audiobookshelf** solve a different problem — *serving* an already-curated library, not automating acquisition — and pair well downstream of Bindery.
-Competitor details verified June 2026 (Readarr archived 2025-06-27; LazyLibrarian active community fork; [Livrarr](https://github.com/kkodecs/livrarr) v0.1.0-alpha5). Spotted something out of date? Open an issue.
+Competitor details verified June 2026 (Readarr archived 2025-06-27; LazyLibrarian active community fork; [Livrarr](https://github.com/kkodecs/livrarr) v0.1.0-alpha5). Livrarr rechecked September 2026: v0.1.0-alpha6. Spotted something out of date? Open an issue.
## Features
@@ -121,6 +121,7 @@ Clean-room Go rewrite, modern React UI, MIT-licensed, actively developed.
- **Library adoption**: whatever the scan could not match waits on the Import page as one row per book (an audiobook folder or disc set is one row), with suggested matches (one click Confirm only for a strong match), one "Add author" decision per missing author, and Undo. Files are registered where they are, never moved.
- Author aliases (`RR Haywood` / `R.R. Haywood` / `R R Haywood` merge into one canonical row), and metadata re-bind to correct a wrong match without delete-and-re-add. On a book’s **File → Re-bind** dialog, search configured metadata providers and select an OpenLibrary work or Hardcover book, or enter an exact provider ID and press Enter. Results already in the library are marked and link to the existing book; records belonging to another library book cannot be selected. Each result’s **Links** menu opens its upstream page when available; OpenLibrary editions can be viewed but require a work ID for re-binding. Re-binding updates metadata and series without moving files; author mismatches require confirmation.
- Explicit author-catalogue reconciliation with a selectable preview: remove chosen stale metadata-only Wanted rows after changing provider or metadata profile while always protecting imported books and every row with a tracked file.
+- Manual metadata editing with field locks: edit a book's title, description, genres, language or release date and the edit survives every refresh. **Fix match** reassigns a file that was attached to the wrong book. See [docs/Metadata-Editing-Wiki.md](docs/Metadata-Editing-Wiki.md).
**Search & downloads**
- Newznab + Torznab indexers queried in parallel, deduplicated, then composite-ranked by format quality, edition tags (RETAIL / UNABRIDGED / ABRIDGED), year match, grab count, size, and ISBN exact-match bonus.
@@ -129,11 +130,13 @@ Clean-room Go rewrite, modern React UI, MIT-licensed, actively developed.
- **Diagnose** on each saved download client: one click checks the connection, the category, where ebook and audiobook grabs actually land, the path remap, whether Bindery can read that folder, and whether imports can hardlink into each library folder, then names the first thing to fix. No shell needed, which matters in the distroless image.
- Auto-grab sweep every 12h, immediate search on add or `wanted` flip, plus interactive per-book search and "Search all wanted" per author. Global kill-switch pauses auto-grab without losing your monitored list.
- Quality profiles covering every format release parsing recognises (EPUB, MOBI, AZW3, PDF, plus AZW, DJVU, CBR, CBZ, FB2, LIT, RTF, TXT and the audio containers M4B, M4A, FLAC, MP3, OGG), language filter, regex-based custom formats, delay profiles, blocklist (consulted on every search; one-click add from History), and failure visibility in Queue and History.
+- Indexer-friendly by default: an optional per-indexer **Daily query limit** with usage shown on the Indexers tab, a rate-limited indexer is left alone for longer each time it refuses (one hour, then three, six, twelve and a day) and its row says when searches resume, an indexer that has stopped working is flagged in Settings, and a per-indexer *freeleech only* policy holds ratio-costing releases for manual approval.
**Import & organize**
- Completed downloads matched by NZO ID and placed in the library with configurable naming. Modes: **Auto** (default — hardlink when possible, else copy; seeding-safe), **Move**, **Copy** (keep source for seeding), **Hardlink** (zero extra disk; same filesystem required), **External** (hand off to a sibling tool).
- Naming tokens — `{Author}`, `{SortAuthor}`, `{Title}`, `{Year}`, `{Series}`, `{SeriesNumber}`, `{Genre}`, `{Lang}`, `{ext}` — collapse cleanly for non-series books, with conditional literals (`{Title}{ - Series}` emits the dash only when a series exists) and zero-pad widths (`{SeriesNumber:2}` → `02`).
- Cross-filesystem-safe moves: atomic rename when possible, copy + verify + delete for NFS / separate volumes. Full grab / import / failure history per book.
+- The **Import** page is where files you already have come in, two ways: **In your library** is the adoption list described above, and **From a folder** points at a folder anywhere Bindery can read, matches what it finds and imports it into the library, creating a book from a metadata search when nothing in the catalogue fits.
- Calibre integration in three modes: `calibredb` CLI hook on import, [Bindery Bridge plugin](https://github.com/vavallee/bindery-plugins) (cross-container), or direct read of an existing Calibre library's `metadata.db` as Bindery's catalogue.
- **Audiobookshelf import** — pull an existing ABS server's book libraries in as Bindery's catalogue (metadata-first, dry-run, review queue for ambiguous matches, rollback), with an ABS library-scan trigger after every audiobook import. See [docs/ABS-Import-Wiki.md](docs/ABS-Import-Wiki.md).
- **Grimmory push** (preview) — imported ebooks are sent to a self-hosted [Grimmory](https://grimmory.org) library via its BookDrop inbox, with a bulk **Push all** for existing files.
@@ -162,10 +165,13 @@ Cover images are fetched and cached server-side under `/image-cache/` (
- **Multi-user mode** — per-user libraries, monitored authors, profiles, and downloads. Admin role manages indexers / download clients / users; standard users see only their own catalogue. Local, OIDC-provisioned, or forward-auth-mapped.
- **Requests** (requester role). Give family and friends an account that can browse the library read only and ask for a book or an author, but cannot grab, download, delete or configure anything. Admins approve from a Requests queue with the usual add choices, and the added books belong to the person who asked. Requesters can follow each request to "available", and a webhook can announce new ones. See [docs/multi-user.md](docs/multi-user.md#requester).
- **Webhook notifications** for grab / import / failure / new books found (pipe to Apprise, ntfy, Home Assistant, Discord, Slack via proxies). **On-demand SQLite backups.** **Persistent log viewer** in Settings → Logs with runtime DEBUG toggle.
+- **Download logs** from Settings → Logs as a text file for bug reports. **In-app update badge** when a newer release exists. `bindery db-check` and `bindery db-repair` report and repair orphaned database rows offline, for an instance that will not start ([details](docs/DEPLOYMENT.md)).
- **Arr-compatible queue** at `GET /api/queue` for [Harpoon](https://github.com/harpoon-io/harpoon) and other *arr-aware tools — pagination, sort, live size, status, client, remote ID, protocol.
**UI**
- Modern React 19 + TypeScript + Tailwind CSS SPA with search-first author acquisition and deep-linkable routed `/book/:id` and `/author/:id` pages.
+- Five entries in the top bar: **Library** (Authors, Books, Series), **Activity** (Wanted, Queue, History, and Requests for an admin), **Import**, **Calendar** and **Discover**. A group opens on its first page and repeats the rest as tabs above the content, and every page keeps the address it always had.
+- Library search in the header over your authors, books and series, with a last row that hands a miss to a single **Add to library** dialog for authors and books (title, author, ISBN or ASIN).
- Light / dark themes (respecting `prefers-color-scheme` first paint), grid / table view toggles, mobile-friendly responsive layout, hamburger nav, agenda-style mobile Calendar.
- Full pagination, search, filter, and sort on every list page; preferences persist to `localStorage`.
- Previous/Next navigation between authors on the author detail page, stepping through the list page you came from.
@@ -239,6 +245,9 @@ The full reference (path remapping, API-key seeding, telemetry, trusted-proxy, r
| **Usenet clients** | SABnzbd, NZBGet |
| **Torrent clients** | qBittorrent, Transmission, Deluge, rTorrent / ruTorrent (XML-RPC over HTTP or SCGI) |
| **Indexers** | Newznab (NZBGeek, NZBFinder, NZBPlanet, DrunkenSlug, …), Torznab (Prowlarr, Jackett, direct endpoints), with per-indexer category overrides |
+| **Metadata sources** | OpenLibrary, Google Books, Hardcover, DNB, Audnex, Audible |
+| **Import lists** | Hardcover lists, synced on a configurable interval |
+| **Library tools** | Calibre (`calibredb`, Bindery Bridge plugin, `metadata.db` import), Audiobookshelf (import and scan trigger), Grimmory (preview), post-import drop folder for Calibre-Web-Automated and similar |
| **Notifications** | Generic webhooks — pipe to Apprise / ntfy / Home Assistant / Slack / Discord |
| **Authentication** | Local (argon2id), API key, OIDC (Google, GitHub via Dex, Authelia, Keycloak, …), forward-auth proxy |
| **Reading apps** | OPDS 1.2 catalogue at `/opds/` (KOReader, Moon+ Reader, Aldiko, …) |
@@ -293,6 +302,7 @@ The full endpoint catalogue, authentication rules (API key, session cookie, loca
| **Deployment** — Docker, Compose, k8s/Helm, binary, UID/GID, env vars, upgrades | [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md) |
| **Architecture** — components, data flow, dependencies | [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) |
| **API** — REST endpoints, auth, integration patterns | [docs/API.md](docs/API.md) |
+| **Search and matching design** (contributors): how titles and author names are normalised and compared | [docs/search-design.md](docs/search-design.md) |
| **Roadmap** — planned work and explicitly-out-of-scope items | [docs/ROADMAP.md](docs/ROADMAP.md) |
| **Multi-user** — roles, user management, CSRF tokens | [docs/multi-user.md](docs/multi-user.md) |
| **Upgrading to v1.0** — multi-user migration: backup, dry-run, rollback | [docs/upgrade-v1.md](docs/upgrade-v1.md) |
@@ -313,7 +323,7 @@ The full endpoint catalogue, authentication rules (API key, session cookie, loca
## Community
-- **Discord** — real-time help, setup questions, release chat: [discord.gg/RpuYYRM9cZ](https://discord.gg/RpuYYRM9cZ). The `#support` channel is the best place to ask; `#changelog` is updated on every release. The three read-only voice channels at the top of the server show live active-install count, latest release, and GitHub star count, refreshed from the telemetry API every 10 minutes.
+- **Discord** — real-time help, setup questions, release chat: [discord.gg/RpuYYRM9cZ](https://discord.gg/RpuYYRM9cZ). The `#support` channel is the best place to ask; `#releases` is updated on every release. The three read-only voice channels at the top of the server show live active-install count, latest release, and GitHub star count, refreshed from the telemetry API every 10 minutes.
- **GitHub Issues** — bug reports and feature requests: [issues](https://github.com/vavallee/bindery/issues).
- **GitHub Discussions** — open-ended design questions, show-and-tell, integration recipes: [discussions](https://github.com/vavallee/bindery/discussions).
diff --git a/docs/API.md b/docs/API.md
index 2b9ef703e..86a2c1561 100644
--- a/docs/API.md
+++ b/docs/API.md
@@ -111,6 +111,11 @@ polls it after **Refresh metadata** to show the result once the sync is done,
and `POST /api/v1/author/{id}/refresh` answers **409 Conflict** while it is set
instead of starting a second sync (#2601).
+`POST /api/v1/author` accepts an optional `monitorNewItems` (#2541), the same
+field `PUT /api/v1/author/{id}` takes: `all` (the default) lets a refresh add
+newly discovered books, `none` keeps the catalogue as it was added. Any other
+value is rejected with 400.
+
`POST /api/v1/author` responses include a `providerMismatch` object when the
linked record routes its catalogue syncs to a provider other than the
configured `metadata.primary_provider` (#2237), so a fallback pick is visible
@@ -184,6 +189,20 @@ POST /api/v1/book/{id}/search manual indexer search
GET /api/v1/book/{id}/file download the imported file (auth required; `?path=…` serves one specific tracked file, for a book holding several of a format; `?format=ebook|audiobook` picks the format on dual-format books; `?path=` wins when both are sent)
```
+### Series
+
+```
+GET /api/v1/series list series with their linked books
+GET /api/v1/series/{id} one series
+POST /api/v1/series/{id}/fill add the series' missing books as wanted (admin)
+PATCH /api/v1/series/{id} monitor / unmonitor (admin)
+```
+
+`GET /series` returns the bare array it always has. Pagination is opt-in
+(#2345): pass `limit` and/or `offset` and you get an `{items, total, limit,
+offset}` envelope instead, which is what a large catalogue wants, since the
+unpaged response carries every series with every linked book.
+
### Search & discovery
```
@@ -240,6 +259,14 @@ value is rejected with 400. `GET /indexer` and `GET /indexer/{id}` also return
`dailyQueriesUsed` on capped indexers, which is a display figure summed from the
stored hourly buckets and lags the live tally by up to one flush interval.
+#### Rate limit holds
+
+When Bindery is holding off on an indexer after a rate limit (#2640),
+`GET /indexer` and `GET /indexer/{id}` carry `cooldownUntil` (a timestamp) and
+`cooldownReason`. Both are response-only, are omitted when nothing is held, and
+are ignored if a client sends them. The hold lives in memory, so it is gone
+after a restart.
+
#### Indexer and Prowlarr API keys are write-only
Indexer and Prowlarr responses never carry the stored credential. Every
diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md
index 628ce7dea..6c661c58a 100644
--- a/docs/DEPLOYMENT.md
+++ b/docs/DEPLOYMENT.md
@@ -287,7 +287,7 @@ Set a download-client path remap in **Settings → Download clients** or set the
Per-client remaps are stored on each download client, so separate qBittorrent / SABnzbd / NZBGet instances can map different mount points. Existing download clients keep an empty remap after upgrade, which preserves the previous global-only behavior until you add a client-specific value.
-For a per-client remap, open **Settings → Download clients**, edit the client, and set **Download client path remap**. The left side is the path the client reports; the right side is the path Bindery can read. For qBittorrent this normally means mapping the qBittorrent category save path or torrent content path to Bindery's download mount. Example: if qBittorrent reports `/downloads/books/My.Book` and Bindery sees that same folder as `/media/books/My.Book`, set `/downloads:/media/books`.
+For a per-client remap, open **Settings → Download clients**, edit the client, and set **Download client path remap**. To see what a remap actually resolves to, press **Diagnose** on the client: it reports where that client says ebook and audiobook grabs land, which remap applies, and whether Bindery can read the result. The left side is the path the client reports; the right side is the path Bindery can read. For qBittorrent this normally means mapping the qBittorrent category save path or torrent content path to Bindery's download mount. Example: if qBittorrent reports `/downloads/books/My.Book` and Bindery sees that same folder as `/media/books/My.Book`, set `/downloads:/media/books`.
**Common scenario — SABnzbd or qBittorrent and Bindery on the same NAS storage, different mount points:**
diff --git a/docs/Hardcover-Series-Wiki.md b/docs/Hardcover-Series-Wiki.md
index eda6a0cd2..bf135e804 100644
--- a/docs/Hardcover-Series-Wiki.md
+++ b/docs/Hardcover-Series-Wiki.md
@@ -32,7 +32,7 @@ If either requirement is missing, Bindery hides the enhanced controls and the en
Use **Search series...** at the top of the Series page to filter your local series by title instead of using browser Find in a large collection. Matching ignores case and accents; clear the field to show all series again. This local search is available without enhanced Hardcover data.
-1. Open **Series**.
+1. Open **Library → Series**.
2. Create a series manually, or open an existing series populated from your library metadata.
3. Use **Add Book** to attach existing Bindery books and set their series positions.
4. Use **Search** to find a matching Hardcover series.
diff --git a/docs/Migrating-From-Readarr-Wiki.md b/docs/Migrating-From-Readarr-Wiki.md
index b19e89f6c..e552c7ef2 100644
--- a/docs/Migrating-From-Readarr-Wiki.md
+++ b/docs/Migrating-From-Readarr-Wiki.md
@@ -27,7 +27,7 @@ Bindery is a single instance. One author record covers ebook, audiobook, or both
## Bringing in books already on disk
-For files already on disk, use **Library Scan**. It takes the author and title from your folder layout: a file under `{Author}/{Book}/` — Readarr's and Calibre's default structure — is matched on the folder names, so the filename convention (`Author - Title` vs `Title - Author`) does not matter. Loose files with no author/book folders fall back to filename parsing, which can still be ambiguous, so keep an organised folder structure for the most reliable scan. **Bulk folder import** reads the same author folders when you point it at the folder that holds them.
+For files already on disk, use **Library Scan**. It takes the author from your folder layout: a file under `{Author}/{Book}/` — Readarr's and Calibre's default structure — is matched on the author folder, so the filename convention (`Author - Title` vs `Title - Author`) does not matter for the author. An ebook's title is read from the file's own name first and from the book folder only when the filename matches nothing, so a `Series/01 - Title.epub` layout matches the book the file names. An audiobook's title comes from its folder, where the files are its tracks. Loose files with no author/book folders fall back to filename parsing, which can still be ambiguous, so keep an organised folder structure for the most reliable scan. **Bulk folder import** reads the same author folders when you point it at the folder that holds them.
One difference to know about before you start correcting matches: Readarr's fix-match only changes which record a file is linked to, while Bindery's **Fix match** re-runs the import, so it moves the file into the target book's folder and renames it from your naming template. The confirmation step names the destination path before anything happens, so you can back out if you would rather keep your existing layout. Reassigning without relocating is not available yet (#2055).
diff --git a/docs/QUICKSTART.md b/docs/QUICKSTART.md
index e96630059..9acb88c88 100644
--- a/docs/QUICKSTART.md
+++ b/docs/QUICKSTART.md
@@ -196,7 +196,7 @@ Use **Test** to confirm the connection.
## 5. Add an author and grab a book
-Go to **Authors → Add Author**. Type a name and press Enter (results come from
+Go to **Library → Authors** and press **Add Author**. Type a name and press Enter (results come from
OpenLibrary / Hardcover / DNB); the list shows the author followed by their
books. Select the author row, choose a **Monitor mode** (default monitors all
books), and add them. Adding an author **populates their catalogue** —
diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md
index f9f444b67..27cd0cfbd 100644
--- a/docs/ROADMAP.md
+++ b/docs/ROADMAP.md
@@ -8,17 +8,7 @@ Most of what ships is driven by issues and Discord reports rather than by this d
Work in flight for the next point release.
-- **Library scan matching for dual-format books** ([#1956](https://github.com/vavallee/bindery/issues/1956), [#1957](https://github.com/vavallee/bindery/issues/1957), [#1958](https://github.com/vavallee/bindery/issues/1958)) — an audiobook whose Artist tag carries a contributor list (`Author, Translator - translator, Narrator`, the standard Audible shape) can never match its catalogue author, so it sits in Unmatched forever. Alongside it: a scan claims only one file per book per pass, so a folder holding both an epub and an m4b needs two full scans; and the unmatched-files hint blames the author catalogue even when the catalogue is fine.
-
-- **Format-scoped already-in-library check** ([#1885](https://github.com/vavallee/bindery/issues/1885)) — when the audiobook of a title imports first, the still-pending ebook download of the same title is marked imported and abandoned. Each title's ebook and audiobook slots are independent pipelines and an import of one must never satisfy the other.
-
-- **Hardcover list sync off the request lifetime** ([#1854](https://github.com/vavallee/bindery/issues/1854), [#1848](https://github.com/vavallee/bindery/issues/1848)) — manual "Sync now" runs inside the HTTP request, so it's capped by the 60s request timeout; on a large shelf most of the list never imports. Moving it to a background job removes the ceiling. The fixed 24h sync interval becomes configurable at the same time.
-
-- **Stop unwanted back-catalogue imports** ([#1816](https://github.com/vavallee/bindery/issues/1816), [#1815](https://github.com/vavallee/bindery/issues/1815)) — adding or searching for a single book can pull in the author's entire catalogue, and refreshing an author does it even with monitor mode set to None. Monitor mode should be authoritative, and "add this book" should mean only that book.
-
-- **rTorrent / ruTorrent download client** ([#1618](https://github.com/vavallee/bindery/issues/1618)) — the most-requested missing download client.
-
-- **Support-cost reducers** — download log files from the UI ([#1903](https://github.com/vavallee/bindery/issues/1903)) so users on rootless containers can attach logs to issues, and a live hardlink warning at the Import Mode selector ([#1720](https://github.com/vavallee/bindery/issues/1720)) instead of only down in the Storage section.
+Everything this section listed before shipped in v1.31.0 and has moved to **Delivered** below. Day to day work is driven by the [issue tracker](https://github.com/vavallee/bindery/issues).
- **Unattended release discovery** ([#2236](https://github.com/vavallee/bindery/issues/2236)): monitored authors are checked for new books on a schedule, off until you pick an interval in Settings, General, New release discovery, and a new `bookAnnounced` webhook says what arrived. Series discovery ([#2523](https://github.com/vavallee/bindery/issues/2523)) follows once a new work can be told from a new edition ([#2524](https://github.com/vavallee/bindery/issues/2524)).
@@ -26,17 +16,15 @@ Work in flight for the next point release.
Real candidates, not commitments, roughly in order of how much they'd change the product.
-- **Manual Import wizard** ([#1236](https://github.com/vavallee/bindery/issues/1236)) and its dead-end on unmatched files ([#1719](https://github.com/vavallee/bindery/issues/1719)) — matching each unmatched file to a new or existing book, with edition and profile choice. Together with bulk folder import ([#1292](https://github.com/vavallee/bindery/issues/1292)) and series-from-path ([#1430](https://github.com/vavallee/bindery/issues/1430)) this is one surface: bringing an existing library in. It's the single biggest source of support threads, so it deserves a full cycle rather than a corner of one.
+- **Series from file path** ([#1430](https://github.com/vavallee/bindery/issues/1430)): the last open piece of bringing an existing library in. The Manual Import wizard, creating a book from an unmatched file, and bulk folder import have all shipped (see **Delivered**). Importing an existing library is still the single biggest source of support threads.
- **Merge books / multiple editions** ([#1358](https://github.com/vavallee/bindery/issues/1358)) — group alternate and non-English editions under one book instead of minting duplicates. Real design work; matters most to non-English users.
-- **Unify add and search acquisition flows** ([#1227](https://github.com/vavallee/bindery/issues/1227)) — stage 3 ships as one search-first **Add to library** dialog (authors and their books in one list, configuration on a confirm step, library matches marked in place) plus a header search over your own catalogue that hands misses to it. Indexer release search stays on its own page.
+- **slskd as a download client** ([#1717](https://github.com/vavallee/bindery/issues/1717)) — see the note under Won't do; the re-scoped version is an ordinary download client and shares its shape with the rTorrent client that shipped in v1.31.0.
-- **slskd as a download client** ([#1717](https://github.com/vavallee/bindery/issues/1717)) — see the note under Won't do; the re-scoped version is an ordinary download client and shares its shape with the rTorrent work above.
+- **Dual-format storage and routing** — keep multiple formats rather than upgrade-replacing ([#1357](https://github.com/vavallee/bindery/issues/1357)), and route per-format on external import so a Calibre/CWA + Audiobookshelf split can be expressed ([#1632](https://github.com/vavallee/bindery/issues/1632)). Handling dual-format properly is Bindery's clearest advantage over running two Readarr instances, so this cluster is worth doing as a set. Sharing one book folder between the two formats already shipped (see **Delivered**).
-- **Dual-format storage and routing** — keep multiple formats rather than upgrade-replacing ([#1357](https://github.com/vavallee/bindery/issues/1357)), let an ebook and audiobook share one book folder instead of appending ` (2)` ([#1959](https://github.com/vavallee/bindery/issues/1959)), and route per-format on external import so a Calibre/CWA + Audiobookshelf split can be expressed ([#1632](https://github.com/vavallee/bindery/issues/1632)). Handling dual-format properly is Bindery's clearest advantage over running two Readarr instances, so this cluster is worth doing as a set.
-
-- **Ebook language handling** ([#1160](https://github.com/vavallee/bindery/issues/1160)) — read `dc:language`, make it editable and filterable, and stop authors pulling in foreign-language editions.
+- **Ebook language handling** ([#1160](https://github.com/vavallee/bindery/issues/1160)) — make a book's language filterable in the library, and stop authors pulling in foreign-language editions. Editing a book's language by hand (v1.25.0) and reading `dc:language` from the imported EPUB (v1.28.0) have shipped.
## Delivered
@@ -50,7 +38,13 @@ The Calibre-watched drop folder ([#64](https://github.com/vavallee/bindery/issue
**Search and metadata** — Direct title/keyword search page ([#85](https://github.com/vavallee/bindery/issues/85), [#267](https://github.com/vavallee/bindery/issues/267), v0.20.0). Split ebook/audiobook search results ([#333](https://github.com/vavallee/bindery/issues/333), v1.2.x). Non-English metadata: per-author `allowed_languages` filtering during ingestion ([#14](https://github.com/vavallee/bindery/issues/14), v0.6.0), language propagation into Prowlarr/Jackett queries (v0.12.0), language tags in result views, and edition-level language from Hardcover and Google Books. DNB (Deutsche Nationalbibliothek) provider over the public SRU/MARC21 endpoint, no API key ([#67](https://github.com/vavallee/bindery/issues/67), v0.x, deepened through v1.27.0).
-**Storage and privacy** — Import modes move / copy / hardlink ([#54](https://github.com/vavallee/bindery/issues/54), v0.12.0). Configurable default root folder ([#332](https://github.com/vavallee/bindery/issues/332), v1.2.1). Server-side cover-image proxy and cache so the browser never contacts third-party image hosts ([#112](https://github.com/vavallee/bindery/issues/112), ~v0.16.0). Persistent structured log store in SQLite, queryable and retention-bounded ([#241](https://github.com/vavallee/bindery/issues/241), v1.2.x).
+**Acquisition and monitoring**: One search-first **Add to library** dialog for authors and books, with library matches marked in place, plus a header search over your own catalogue that hands misses to it ([#1227](https://github.com/vavallee/bindery/issues/1227), [#2551](https://github.com/vavallee/bindery/issues/2551), v1.36.0). Adding one book no longer imports the author's back catalogue, and an author refresh respects monitor mode ([#1816](https://github.com/vavallee/bindery/issues/1816), [#1815](https://github.com/vavallee/bindery/issues/1815), v1.31.0). Hardcover list sync runs as a background job instead of inside the request, with a configurable interval ([#1854](https://github.com/vavallee/bindery/issues/1854), [#1848](https://github.com/vavallee/bindery/issues/1848), v1.31.0).
+
+**Bringing a library in**: Bulk folder import ([#1292](https://github.com/vavallee/bindery/issues/1292), v1.22.2). Manual Import wizard ([#1236](https://github.com/vavallee/bindery/issues/1236), v1.28.0), which can also create a book from an unmatched file ([#1719](https://github.com/vavallee/bindery/issues/1719), v1.33.0). Library scan matching for dual-format books: contributor-list Artist tags, both files of a dual-format folder claimed in one pass, and an unmatched-files hint that names what actually failed ([#1956](https://github.com/vavallee/bindery/issues/1956), [#1957](https://github.com/vavallee/bindery/issues/1957), [#1958](https://github.com/vavallee/bindery/issues/1958), v1.31.0). Format-scoped already-in-library check, so importing one format never abandons the other format's download ([#1885](https://github.com/vavallee/bindery/issues/1885), v1.31.0). An ebook and audiobook share one book folder under the shared-folder layout instead of appending ` (2)` ([#1959](https://github.com/vavallee/bindery/issues/1959), v1.33.3).
+
+**Download clients**: rTorrent / ruTorrent over XML-RPC, HTTP or SCGI ([#1618](https://github.com/vavallee/bindery/issues/1618), v1.31.0).
+
+**Storage and privacy** — Import modes move / copy / hardlink ([#54](https://github.com/vavallee/bindery/issues/54), v0.12.0). Configurable default root folder ([#332](https://github.com/vavallee/bindery/issues/332), v1.2.1). Server-side cover-image proxy and cache so the browser never contacts third-party image hosts ([#112](https://github.com/vavallee/bindery/issues/112), ~v0.16.0). Persistent structured log store in SQLite, queryable and retention-bounded ([#241](https://github.com/vavallee/bindery/issues/241), v1.2.x). Download the filtered log as a text file from Settings → Logs ([#1903](https://github.com/vavallee/bindery/issues/1903), v1.31.0). Live warning at the Import Mode selector when Hardlink is picked on a setup that cannot hardlink ([#1720](https://github.com/vavallee/bindery/issues/1720), v1.31.0).
**UI** — Full i18n: catalogue extraction (v0.12.0), runtime language switcher persisted before first paint, locale-aware date/number formatting, and `Accept-Language` auto-detect with manual override. Editable quality profiles with a full create/rename/delete editor; note the format allow-list was UI-only until v1.28.2 actually enforced it ([#1693](https://github.com/vavallee/bindery/issues/1693)).
diff --git a/docs/User-Guide-Wiki.md b/docs/User-Guide-Wiki.md
index 52f55ec6a..e215a757e 100644
--- a/docs/User-Guide-Wiki.md
+++ b/docs/User-Guide-Wiki.md
@@ -136,7 +136,12 @@ them — it reads existing files with a fixed parser that prefers an
`{Author}/{Book Title}/` folder structure and reads a bare `X - Y` filename as
`Title - Author` (the *opposite* of Readarr's default order). Author folders
settle the order. The Library Scan takes the author from the author folder,
-except for an audiobook whose tags name an author: there the tag wins. A file
+except for an audiobook whose tags name an author: there the tag wins. An
+ebook's **title** comes from the file's own name, with the book folder as the
+fallback, so a series or box set folder does not retitle the books inside it;
+a leading position number is stripped from a folder title, so `01 - The Eye of
+the World (1990)` matches as well. An audiobook keeps the folder as the book,
+because its files are tracks rather than books. A file
in a folder named after the first part of its name can also be read the other
way round, as author then title, and that reading is kept only if it matches a
book by an author in your library. Bulk folder import tries it for the folder
@@ -233,7 +238,10 @@ Settings → General turns grabbing off entirely if you prefer to grab by hand
from the Wanted page. It covers every path that can start a download: the
scheduled sweep, the searches an author add fires, a series fill, adding a
single book, adding from recommendations, a bulk **Search** action, a book
-flipping to wanted, and the re-search after a stalled download. Books are
+flipping to wanted, and the re-search after a stalled download. A bulk
+**Search** refuses while the switch is off and says which setting to change,
+keeping your selection; a single book's **Search Indexers** still runs, which
+is how you search and grab by hand with grabbing off. Books are
still created and still marked wanted, so the Wanted page is complete when
you come back to it. Searches also fire when an author is added
("Search for books on add") and when a book flips to wanted.
@@ -320,6 +328,12 @@ After import, Bindery fans out to whatever integrations you enabled: Calibre,
a CWA ingest folder, Grimmory's BookDrop, an Audiobookshelf library scan,
webhooks.
+If the library app downstream reads sidecar metadata, turn on **Write a
+metadata.opf sidecar** in Settings → General (off by default). Bindery then
+writes a Calibre style `metadata.opf` next to each imported ebook and
+audiobook with its own title, author, series and identifiers, and refreshes it
+on Reorganize. The book file itself is never modified.
+
**Queue and History.** The Queue page shows live downloads and, importantly,
the recovery actions: **Retry import** (after fixing a path remap), **Match to
book** (attach a failed import to the right book and import it from disk), and