Release Notes
All LibrisLog releases, newest first — what's new, what was fixed, and anything you need to know before upgrading.
Upgrading: releases are backwards compatible. Database migrations run automatically when the container starts (
alembic upgrade head), so upgrading is a drop-in replacement. We always recommend taking a backup before an upgrade.
You can also browse the GitHub Releases page and the full changelog.
Latest Release
⭐ v1.10.0 — More Book Sources & Upgrades
LibrisLog v1.10.0 adds four more metadata sources to the import search (BnF, Inventaire.io, the Library of Congress, and the Deutsche Nationalbibliothek) with a per-source on/off switch and a startup guard, lets you point the frontend at a custom backend address, keeps the Add Book dialog header reachable while scrolling, and updates the frontend framework and dependency set.
All releases
| Version | Date | Type |
|---|---|---|
| v1.10.0 | 2026-10-18 | Feature release |
| v1.9.0 | 2026-09-15 | Feature release |
| v1.8.0 | 2026-09-02 | Feature release |
| v1.7.0 | 2026-08-26 | Feature release |
| v1.6.0 | 2026-08-23 | Feature release |
| v1.5.2 | 2026-06-22 | Maintenance |
| v1.5.1 | 2026-06-22 | Maintenance |
| v1.5.0 | 2026-06-22 | Feature release |
| v1.4.0 | 2026-06-14 | Feature release |
| v1.3.1 | 2026-06-09 | Maintenance |
| v1.3.0 | 2026-06-09 | Feature release |
| v1.2.2 | 2026-06-08 | Maintenance |
| v1.2.1 | 2026-06-08 | Feature release |
| v1.2.0 | 2026-06-01 | Feature release |
| v1.1.1 | 2026-06-01 | Maintenance |
| v1.1.0 | 2026-05-31 | Feature release |
| v1.0.0 | 2026-05-28 | Initial release |
v1.10.0: More Book Sources & Upgrades
Feature release 2026-10-18Summary: Adds four more metadata sources to the import search, brings back coverage for non-English editions that Open Library misses, adds an on/off switch for every import source, keeps the Add Book dialog header reachable while scrolling, and updates the frontend framework and dependency set.
Features
- 📚 Bibliothèque nationale de France (BnF) as a search source, queried over the public SRU endpoint. No API key needed. Strong coverage of French editions: an ISBN such as
9791020923554returns no result from Open Library but a full record from BnF, with title, subtitle, authors, publisher, year, page count, language, and subject headings. BnF answers one ISBN with several records, including a commercial barcode stub; those are grouped per ISBN so only the richest record is imported - 🔗 Inventaire.io as a search source, queried over its public entities API. No API key needed. It aggregates data from several national libraries and is the only new source that supplies cover images. Inventaire answers ISBN lookups only, because it exposes no title search, so it is reported as skipped on a title search instead of returning an empty result
- 🏛️ Library of Congress as a search source, queried over the official SRU server. No API key needed. Coverage is US and English oriented, so it complements rather than replaces the other sources. This source is only reachable over plain HTTP, so its queries and responses travel unencrypted; it can be switched off if that is not acceptable in your network. See the Configuration guide
- 📕 Deutsche Nationalbibliothek as a search source, queried over its public SRU endpoint. No API key needed. Strong coverage of German-language editions, and unlike the Library of Congress it answers both title and ISBN searches over HTTPS. Records are read as MARC21, so the subtitle, publisher, year, page count, language, subject headings and description all come through, and co-authors catalogued as added entries are included alongside the lead author. Four cataloguing quirks are handled rather than shown raw: the non-sorting markers the DNB embeds around articles such as the "Der" in Der Zauberberg are stripped, a record that flags its own ISBN as misprinted is imported without one instead of with a number that identifies a different book, editors or translators listed as added entries are not reported as authors, and an inverted catalogued name is turned back into reading order without eating the period on a real initial or title. One quirk is passed through unchanged: the DNB transliterates umlauts in its titles, so Das Maß comes back as Das Mass der Erde
- 🔀 Every import source can be switched on or off individually. Seven new
*_IMPORT_SEARCH_ENABLEDsettings cover Open Library, BnF, Inventaire.io, the Library of Congress, the Deutsche Nationalbibliothek, Hardcover, and the Google Books fallback. Sources that are switched off are not queried at all - 🔑 Hardcover and Google Books are set to
falsein.env.example. Neither can answer a query without credentials, so the example config recommends switching them off unless a token or key is configured. The built-in default staystrue, so existing installs that never set the variable keep their current behavior after upgrading. A source left on without its credential is reported as skipped and makes no request - 🚦 Startup guard for unusable sources. If no source can answer, the backend refuses to start and names the settings to change, instead of silently returning no search results forever. That includes the case where only Hardcover and Google Books are enabled without their credentials
- 🌍 Localized source names. Import sources are shown under their translated name in the search progress list and in the edition chips, in all five UI languages
Improvements
- 🌐 Configurable backend address. The frontend webserver proxies
/apitoBACKEND_ADDR(defaulthttp://backend:8000) instead of a hardcoded backend host, so the web container can reach a backend outside the bundleddocker-compose.yml. A value that would break API routing, such as one with a trailing slash, is reported when the container starts. See the Configuration guide - 📌 Sticky Add Book dialog header. The dialog title and the close button stay pinned to the top of the window while the content scrolls, so closing the dialog no longer requires scrolling back up after a long list of results
- 🔍 Search results report each source. The progress list names every source that was queried, including those that were skipped and why
Dependencies
- ⬆️ Updated backend and frontend dependencies, most notably SvelteKit 3 and Vitest 5. Building the frontend from source now needs Node.js 22.17 or newer
Bug fixes / security
- 🛡️ Remote SRU responses are parsed with entity expansion disabled. The BnF, Library of Congress and Deutsche Nationalbibliothek responses are untrusted remote XML and are now parsed defensively, so a hostile or malformed response cannot exhaust memory or read local files through entity references
- 🛡️ Import rejects cover URLs that point at private addresses. A book candidate is submitted by the client, so its cover URL is untrusted input. URLs resolving to loopback, private, or link-local addresses are now rejected before download instead of being fetched
Contributors: Thank you to @mj0nez for making the backend address of the webserver configurable.
Breaking changes: None. Existing installs keep working untouched: every source defaults to true, so no configured source is lost on upgrade. To follow the recommended configuration, set HARDCOVER_IMPORT_SEARCH_ENABLED=false and GOOGLE_BOOKS_IMPORT_SEARCH_ENABLED=false unless you have configured a token or key. If your deployment blocks outbound plain HTTP on port 210, set LIBRARY_OF_CONGRESS_IMPORT_SEARCH_ENABLED=false.
v1.9.0: Smarter Import Search & Input UX
Feature release 2026-09-15Summary: Adds shareable read-only public profile pages with configurable access and content, groups duplicate import-search results into expandable edition groups, lets you collect search results in an import basket and import them all at once, supports multiple parallel import searches, makes running searches cancelable, adds Excel (XLSX) file import, adds a Bookstats import preset, adds configurable reading-date automation, introduces an adaptive date input with a native picker, adds optional book media and medium statistics, supports localized medium and possession searches, detects insecure camera contexts, and fixes timezone handling in the daily page statistics and progress log editing.
Features
- 📚 Edition groups in the import search: results from different providers that describe the same book (same ISBN, or same title and authors) are now grouped into expandable entries with an "N results" badge. Compare the variants side by side and import the one you want; no result is dropped anymore. The selected edition is highlighted with a border and a "Selected" badge, and every edition row shows a pointer cursor, hover feedback, and a keyboard focus ring. See the Library guide for the exact grouping rules
- 🗂️ Optional book medium: classify books as Print, eBook, Audiobook, Comic / Graphic Novel, or Magazine / Newspaper from manual entry, search import, and book editing. Mediums can be filtered in the library, searched with
medium:, imported/exported, and reviewed in the statistics distribution - 🌍 Localized search values:
medium:andpossession:searches accept both their original enum keys and localized display values, such asmedium:Hörbuchandpossession:Im Besitz - 🛑 Cancelable book search: while an import search is running, the Search button becomes a Cancel button, so you can stop the request and refine your query
- ⌨️ Escape closes dialogs and drawers: overlays such as the sidebar, the book drawer, and the import modal can now be closed with the Escape key
- 📅 Adaptive date input: date fields in the book form now use a segmented year/month/day input that no longer assumes the month or day after the first keystroke, validates values as you type, and accepts pasting a complete date. A calendar button next to the field opens the native date picker
- 🌐 Searchable timezone picker: the timezone setting on the profile page is now a searchable dropdown covering all IANA timezones
- 📷 Secure context detection in the barcode scanner: if LibrisLog is served outside a secure context (plain HTTP on a remote host), the scan button is hidden and the scanner explains why the camera cannot start, instead of showing a black box. See the Library guide for details
- 🎥 Active camera name in the scanner: the barcode scanner now shows the name of the active camera in a badge next to the switch button, so you always know which lens is being used
- 🔗 Heimdall dashboard integration: new documentation for the LibrisLog enhanced app, which shows your reading statistics directly on Heimdall tiles
- 🔗 Shareable public profile pages: create named, read-only profile URLs from the Profile page. Configure each link independently for public or logged-in-only access, selected profile sections and statistics, language, and an optional expiration date. Shared pages include responsive book cards, a mobile-safe reading timeline with incremental loading and hidden-book hints, full-library search with incremental loading, selectable 12-month/3-year/all-time trend ranges with value tooltips, distribution and rating panels, and the owner's generated avatar. Existing links can be copied, opened, edited, or revoked. The full URL token is only revealed on demand and is shown once after creation. See the Profile guide for setup and security details
- 🧺 Import basket: search results now offer an Add to Basket action next to the existing Add button. Collected books appear in a new Basket tab with a live count badge, where you can review them, remove individual entries, and import everything in one go. Each entry remembers the reading status, possession status, and medium that were selected when it was added. If some books fail during a basket import, the successful ones are imported and the failed ones stay in the basket so you can retry or remove them. The same book cannot be added twice
- 🔎 Parallel import searches: open multiple independent search panels in the Add Book dialog and run different queries concurrently. Each panel keeps its own results and can add selected books to the shared import basket
- 📅 Configurable reading-date automation: choose independently whether moving a book to Currently Reading, Read, or Did Not Finish should fill a missing start or finish date automatically. Existing dates are preserved, and disabling automation allows intentionally unknown dates without additional transition popups. See the Profile guide
- 📥 Excel (XLSX) data import: the Data Import page now accepts
.xlsxand.xlsmworkbooks alongside CSV and JSON. LibrisLog reads the workbook's active worksheet, treats the first non-empty row as the header and every following row as a record, shows the parsed sheet name next to the row and field counts, and runs the result through the same mapping, preview, validation, and import flow as CSV. Dates are read as ISO strings, whole numbers stay integers, and empty rows are skipped. See the Import & Export guide - 📥 Bookstats import preset: a new built-in, read-only mapping for the German Bookstats export. It translates German reading, acquisition, and medium values, converts Excel serial dates, reorders "Last, First" author names, maps the rating (with
0as unrated), and mergesGenreandKategorieinto tags. Load it from the saved-mappings dropdown like the Goodreads Export preset. See the Import & Export guide
Bug fixes
- 🗓️ Timezone-correct daily page statistics: pages read between two progress updates are now attributed to calendar days in the user's timezone instead of fixed 24h slots, so the pages-per-day view matches your local days. Your heatmap may shift slightly after the upgrade
- 🕐 Timezone-aware progress date editing: editing a progress entry's date in the book detail view now interprets the value in your profile timezone instead of the browser's, so entries stay on the correct calendar day and streaks remain accurate
- 🏷️ Better contrast for selected suggestion items: the selected entry in tag and author suggestion dropdowns now has stronger contrast and a visible border in all themes
- ⚠️ Undated read imports remain usable: import previews show a non-blocking warning when a book is marked Read without a finish date, instead of treating the intentionally missing date as an import error
Breaking changes: None.
v1.8.0: Camera & Zoom Control, Optional Telemetry
Feature release 2026-09-02Summary: Adds camera selection and zoom control to the barcode scanner, optional anonymous installation telemetry with a publicly verifiable census, a new Homer dashboard integration, and several usability and dependency fixes.
Features
- 📷 Barcode scanner camera & zoom — switch between your available cameras and zoom in on the code directly in the scan view. Your camera and zoom level are remembered for the next scan
- 📡 Optional anonymous telemetry — a privacy-focused installation census (version, OS, architecture, runtime) sent on startup and then every 24 hours. It is enabled by default and can be disabled with
TELEMETRY_DISABLED=true. The telemetry server is open source and the aggregated results are public at metrics.librislog.app. See the Telemetry guide for details - 🖼️ Homer dashboard integration — new documentation for showing your reading statistics on a Homer dashboard using its LibrisLog smart card
- 🔢 Current-page input clamping — the page input in the book details now clamps to the book's page count while you type, so an out-of-range value can no longer be entered
- 🔒 Dependency updates — upgraded backend and frontend dependencies, including fixes for security advisories in Starlette and joserfc
- 🛠️ Developer CLI fix — adjusted the
llcCLI for the updated Typer exception handling
Bug fixes
- 🏷️ Fixed the reading-status badge overflowing its border in the book details view for books with many authors — the author list now wraps and the badge stays on a single line
Breaking changes: None.
v1.7.0: Reading Streaks & Goals
Feature release 2026-08-26Summary: Adds a gamification section to the dashboard with reading streaks and reading goals, a richer book model with multiple authors, a new field-specific search syntax, and a more flexible file import.
Features
- 👥 Multiple authors per book — a book can have any number of authors (normalized per-user author model). The legacy API
authorfield is deprecated in favor of theauthorslist - 🏆 Reading streaks & goals — a gamification section on the dashboard shows your current and all-time longest reading streak (with date range) plus playful progress cards for reading goals. Goals (pages/day, pages/month, books/month, books/year) are configured on the profile page and disabled by default; the whole section can be switched off
- 🎲 Random "Next to Read" suggestions — the dashboard's suggestion shelf now picks a random selection from your want-to-read list on every visit
- 🔍 Enhanced search — field-specific prefixes (
author:,title:,publisher:,tag:,language:,possession:,notes:,description:), quoted phrases, and-negation - 📚 "All books" library tab — browse every book regardless of reading status, with the usual search and sort controls
- 📈 Author statistics card — total book count and distinct author count on the statistics page
- 📥 Improved file import
- New
authorstarget field (accepts a plain string or an array; legacyauthormappings keep working) - CSV delimiter is now user-configurable (default
,) date_addedcan be imported — preserves original library dates when migrating from other tools- Transforms may return lists for the
authors/tagstargets (e.g.value.split(';')) - Preview renders
authorsandtagsas JSON arrays
- New
- 📤 Data export —
authorsandtagsexport as lists in JSON, round-tripping through the adaptive import - 🏷️ Possession naming — the acquisition/possession field and its search prefix are now consistently called possession
Bug fixes
- 📊 Fixed the inverted Top Rated / Worst Rated ordering on the statistics page
Breaking changes
- ⚠️ Creating a book now requires at least one author (via
authorsor the legacyauthorfield) — API requests without any author are rejected - ⚠️ The
availability:search prefix is renamed topossession:
v1.6.0: Reading Progress & Possession Tracking
Feature release 2026-08-23Summary: Improved reading-progress tracking with automatic cross-view synchronization, a new possession model for tracking what you own, and a wave of UI, statistics, and reliability improvements.
Features
- 📖 Automatic synchronization of reading progress across book cards and the detail view
- 📚 Possession tracking — mark books as owned, borrowed, digitally available, or to acquire
- 📊 Possession information added to the statistics page
- 🏷️ Visual "needs to be acquired" indicators on book cards
- 📝 Improved reading-status transitions, including a start-date prompt and smarter progress-completion handling
- 📅 Timezone-aware progress charts with better visualization
- 🎨 Refined sort selector and other UI improvements
- 🔒 Updated dependencies and applied frontend security patches
Breaking changes: None.
v1.5.2: Maintenance
Maintenance 2026-06-22Summary: Small maintenance release improving the accuracy of reading-progress visualizations.
Bug fixes
- 📊 Fixed the fallback logic for the start date used in the reading-progress chart in the book detail view
- 🐛 Improved reliability of progress timeline calculations
Breaking changes: None.
v1.5.1: Maintenance
Maintenance 2026-06-22Summary: Small maintenance release fixing an issue in the book edit drawer.
Bug fixes
- 🐛 Fixed an issue where the edit drawer could fail to open correctly in certain situations
Breaking changes: None.
v1.5.0: Password Reset & Usability
Feature release 2026-06-22Summary: Adds password-reset functionality with email support, improves cover imports, and brings several usability and statistics enhancements.
Features
- 🔐 Password reset via email
- 🖼️ Cover imports now follow HTTP redirects automatically
- 📱 Android back-button support for navigation drawers
- 💡 Author and publisher suggestions on the Data Hygiene page
- 📊 Reading-progress charts scaled by actual elapsed time
Bug fixes
- 🐛 Various UI and usability fixes
Breaking changes: None.
v1.4.0: Embeddable Views & ARM64
Feature release 2026-06-14Summary: Introduces embeddable library views, ARM64 Docker support, improved data-hygiene workflows, and auto-generated database documentation.
Features
- 🖼️ New HTML iframe embed endpoint for dashboards, homepages, and other applications
- 🏗️ ARM64 Docker images for Raspberry Pi and other ARM-based systems
- 🧹 Improved Data Hygiene UX for incomplete or inconsistent metadata
- 📊 Integration documentation for Dashy and Glance
- 🗄️ Auto-generated database schema documentation
- 🧪 Frontend test and type improvements
Contributors: Thank you to @Jossey28 for adding ARM64 Docker build support.
Breaking changes: None.
v1.3.1: Maintenance
Maintenance 2026-06-09Summary: Small maintenance release improving the reliability of update notifications.
Bug fixes
- 🔔 Fixed a caching issue affecting the version update indicator
Breaking changes: None.
v1.3.0: More Languages
Feature release 2026-06-09Summary: Expands localization support, refines statistics calculations, and improves documentation.
Features
- 🌍 Added Spanish, French, and Chinese (Simplified) UI languages with expanded localization coverage
- 📈 Improved pages-per-day statistics calculations
- 📖 Integration documentation (Dashy, Home Assistant) and general documentation improvements
Breaking changes: None.
v1.2.2: Maintenance
Maintenance 2026-06-08Summary: Small maintenance release focused on Goodreads import data handling.
Bug fixes
- 🐛 Fixed the Goodreads notes transformation during import processing
Breaking changes: None.
v1.2.1: Import Reliability & Multi-User Consistency
Feature release 2026-06-08Summary: Focused on import reliability, multi-user data consistency, and quality-of-life improvements.
Features
- 📥 Improved Goodreads import mapping templates and book import handling
- 👥 Per-user ISBN uniqueness — the same ISBN can now exist for different users without conflict
- 🌐 Support for a custom documentation domain
Bug fixes
- 🐛 Fixed issues affecting Goodreads imports
Contributors: Thank you to @badcrc for their first contribution.
Breaking changes: None. (The ISBN uniqueness change is a database migration and runs automatically on upgrade.)
v1.2.0: Startup Screen & Update Checks
Feature release 2026-06-01Summary: Improves the initial user experience and adds automatic update awareness.
Features
- 🚀 New startup loading screen for a smoother launch
- 🔔 Release update check that notifies you when a new version is available
Breaking changes: None.
v1.1.1: Maintenance
Maintenance 2026-06-01Summary: Maintenance release focused on thumbnails, bug fixes, and stability.
Bug fixes
- 🖼️ Improved thumbnail generation and image quality
- 🐛 Fixed several cover and thumbnail handling issues
- 🧪 Test-suite maintenance and documentation build workflow improvements
Breaking changes: None.
v1.1.0: Polish & Missing Covers
Feature release 2026-05-31Summary: A refinement release focused on usability, workflow completeness, and overall polish.
Features
- 📚 Improved missing-book-cover workflow for incomplete metadata
- 🌐 Refined translations and i18n coverage
- 🧩 UX and UI improvements across the application
- 📖 Documentation updates
Breaking changes: None.
v1.0.0: Initial Release
Initial release 2026-05-28Summary: The first stable release of LibrisLog — a self-hosted, multi-user book tracking web app with full data ownership.
Features
- 📚 Library management with four reading states (Want to Read, Reading, Read, Did Not Finish)
- 📖 Reading-progress tracking with per-book history
- 📊 Statistics dashboard (heatmaps, charts, reading trends)
- 📷 ISBN barcode scanning (browser-based, mobile-friendly)
- 📥 Imports from Goodreads, Open Library, Google Books, and custom CSV/JSON
- 🖼️ Automatic cover-art fetching with manual fallback
- 👥 Multi-user support with roles and optional OIDC login
- 🔌 REST API with OpenAPI documentation
- 🐳 Self-hosted via Docker Compose (SQLite, lightweight setup)
- 🎨 Light/dark themes and responsive UI
