Introduce multi-format book support, including audiobooks#2486
Merged
Introduce multi-format book support, including audiobooks#2486
Conversation
Migrate reading progress from book-level to file-level tracking while maintaining backward compatibility: Backend: - Add UserBookFileProgressEntity for per-file progress storage - Add UserBookFileProgressRepository with queries for file-level progress - Add BookFileProgress DTO for new API field - Update BookUpdateService with dual-write logic (old + new tables) - Update BookProgressUtil to return all progress types for alt formats - Update KoreaderService and KoboReadingStateService for dual-write - Add MigrateProgressToFileProgressMigration for one-time data migration - Add V101 database migration for user_book_file_progress table Frontend: - Add BookFileProgress interface - Update BookPatchService to include fileProgress in API requests - Update reader components to track and pass bookFileId - Add null-safety for epubProgress in ebook reader
Replace single defaultBookFormat with ordered formatPriority list that allows users to specify preferred format order. When a book has multiple formats, the system selects the highest-priority available format as primary, with automatic fallback to next priority if preferred format is missing. Changes: - Add FormatPriorityConverter for List<BookFileType> JSON serialization - Update LibraryEntity, Library DTO, and CreateLibraryRequest - Implement cascading fallback in BookEntity.getPrimaryBookFile() - Update BookMapper and BookMapperV2 to use format priority - Add drag-and-drop priority ordering UI using Angular CDK DragDrop - Remove deprecated scanMode/Import Mode feature - Add database migration V102 for column rename and data conversion
Consolidate all reading progress functionality from 3 separate locations into a single ReadingProgressService: - UserProgressService (fetching progress) - BookProgressUtil (mapping progress to DTOs) - Progress methods from BookUpdateService (updating progress) This improves code organization by centralizing all progress-related operations in one service while maintaining the existing dual-write pattern for backward compatibility.
…allback Enhance filename normalization to handle underscores, trailing authors, and article repositioning. Add fuzzy matching fallback at 85% threshold for files that don't match exactly. Skip root-level files from auto-attach and eliminate duplicate findMatchingBook() calls via caching.
When a folder contains exactly one book entity, new files added to that folder are now automatically attached without requiring filename similarity. This handles the common case where users organize one book per folder. Multiple books in the same folder still use fuzzy matching as fallback.
Groups book files using folder name as canonical title reference: - Files matching folder name (substring/fuzzy) are grouped together - Edition variants (Anniversary, Unabridged, etc.) are grouped with base title - Series entries (Book 1, Vol 2, Part 3) are kept separate - Files with different trailing numbers (book1, book2) stay separate - Root-level files use exact key matching
- Add LibraryOrganizationMode enum (BOOK_PER_FOLDER, AUTO_DETECT) - Create BookGroupingService for unified grouping logic - Refactor LibraryProcessingService to use BookGroupingService - Both initial scan and rescan now use same grouping strategy - Add "audiobook/ebook" to edition patterns for better matching - Add migration V104 for organization_mode column
FileFingerprint.generateHash() was being called on audiobook folder paths, causing FileNotFoundException since directories cannot be opened as RandomAccessFile. Now checks isFolderBased() and uses generateFolderHash() for audiobook folders.
- File deletion now removes only the specific BookFileEntity - Book is marked deleted only when its last file is removed - Multi-format books retain remaining files when one format is deleted - Also fixed folder-based audiobook hash computation in AbstractFileProcessor
…iobook folders The autoAttachFile method was missing: 1. The folderBased flag on the BookFileEntity builder, causing folder-based audiobooks to be saved with folderBased=false 2. Using getFolderSizeInKb() for folder-based audiobooks instead of getFileSizeInKb() which only returns the directory metadata size (~3KB)
Replace book.getBookFiles().size() with a direct count query to prevent LazyInitializationException when accessing the collection outside of the transaction boundary.
When a file is moved, the system receives CREATE (new location) then DELETE (old location) events. Previously this created a duplicate book and marked the original as deleted, losing all metadata. Now the CREATE handler checks if a book with the same content hash already exists and updates its path instead of creating a duplicate.
Filter out deleted books that have no associated book files before attempting to get their file path during library rescan.
Add play button for audiobook files in metadata tabs. Refactor tab values from numeric to semantic string identifiers.
Extract file extension from filename for regular files, or from the first audio file in folder-based audiobooks.
booklore-api/src/main/java/com/adityachandel/booklore/config/security/SecurityConfig.java
Dismissed
Show dismissed
Hide dismissed
- Add findFilelessBooksByLibraryId query to match books without files - Match new files to fileless books (e.g., physical books) by title similarity - Prevent NPE when accessing getPrimaryBookFile() on fileless books - Don't mark fileless books as deleted during library rescan - Set book's libraryPath when attaching first file to fileless book - Skip fileless books during metadata re-extraction - Guard against attaching files from different libraryPaths
suryavamsi6
pushed a commit
to suryavamsi6/booklore
that referenced
this pull request
Jan 28, 2026
…pp#2486) * fix: support reading alternative book formats using bookType query param * feat: add streaming reader support for alternative EPUB formats * refactor: extract tabs section into MetadataTabsComponent * feat: implement per-file reading progress tracking * feat: add configurable format priority with cascading fallback * refactor: redesign library creator with single-page layout * refactor: unify reading progress into ReadingProgressService * refactor: improve delete options with clearer file format and book deletion * refactor: improve book format matching with normalization and fuzzy fallback * feat: add folder-based audiobook support with ZIP downloads and preparing state * fix: display unique format types in metadata viewer * refactor: auto-attach files to single book in folder during rescan * feat: implement folder-centric book file grouping with fuzzy matching * refactor: consolidate book grouping with organization mode support * fix: use folder hash for folder-based audiobooks in auto-attach * fix: delete only BookFileEntity on file removal, not entire book * fix: set folderBased flag and correct file size for auto-attached audiobook folders * fix: use count query to avoid lazy initialization in file delete handler * fix: preserve book metadata when file is moved by detecting hash match * fix: skip books with no files in restoration to avoid NPE * fix: round all progress percentages to one decimal place before sending to UI * style: improve library creator dialog spacing and layout * fix: migrate FOLDER_AS_BOOK to BOOK_PER_FOLDER for backwards compatibility * fix: FileMoveService now handles multi-file BookEntity properly * style: redesign metadata-picker and file-mover UI components * style: redesign file-naming-pattern UI and improve theme contrast * style: relax spacing in library-creator component * style: tighten directory-picker layout for consistency * fix: PathPatternResolver now respects folderBased flag for audiobooks * style: move checkmark column to left side and add pending status in file-mover * refactor: consolidate BookFileType into BookType and add audiobook styling * feat: show 'Continue Reading' button for in-progress books * fix: preserve dots in folder names during grouping and prevent duplicate attachments * style: reduce gap between download-all button and primary file section * style: shorten 'Continue Reading' button to 'Read' on mobile * feat: add DISK_TYPE config to disable file moves on network storage * style: standardize settings pages with shared styles and consistent spacing * style: revamp settings pages with modern card-based layouts * style: revamp OPDS, auth, and task management settings layouts * fix: update FileMoveService tests to include AppProperties parameter * fix: derive BookFileType from extension when uploading additional book files * feat: show format type and size in download button with dropdown for alternatives * feat: add audiobook streaming player with HTTP Range support * feat: add M4B chapter extraction and chapter navigation * feat: add audiobook bookmarks and sleep timer * refactor: split AudiobookReaderService into focused services * feat: add Media Session API for background audio playback * feat: display file extensions in format tags with distinct colors and add audiobook upload support * feat: require bookFileId for viewer settings API * fix: show split button for audiobooks with readable alternatives * feat: improve reading sessions table with book type badges and better formatting * feat: add audiobook play button in files tab * feat: use file extension for format display and meaningful tab values * feat: add extension field to BookFile DTO * feat: use extension field for book card format pill * fix: use mixed orientation for format priority drag-drop to support multi-line layout * feat: add attach book files feature to consolidate single-file books * fix: increase drag handle size for format priority chips * fix: add missing BookFileRepository mock to BookServiceDeleteTests * feat: add delete buttons to files tab and move shelf to other items menu * feat: add physical books support for cataloging books without digital files * refactor: redesign icon-picker component with improved styling * refactor: redesign metadata-picker component with improved layout and alignment * refactor: move Add Physical Book to top of library menu * refactor: use p-autoComplete for authors/categories in add-physical-book dialog * feat: add square cover search and display support for audiobooks * fix: navigate to first page when opening unread ebooks * fix: exclude API requests from service worker interception * feat: support fileless books with automatic file attachment * fix: bypass service worker for audiobook streaming requests * refactor: remove alphabetical filter sorting, default to count, limit filters to 100 --------- Co-authored-by: acx10 <acx10@users.noreply.github.com>
alexlebens
pushed a commit
to alexlebens/infrastructure
that referenced
this pull request
Feb 24, 2026
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [booklore-app/BookLore](https://github.com/booklore-app/BookLore) | major | `v1.18.5` → `v2.0.1` | | [ghcr.io/booklore-app/booklore](https://github.com/booklore-app/booklore) | major | `v1.18.5` → `v2.0.1` | --- ### Release Notes <details> <summary>booklore-app/BookLore (booklore-app/BookLore)</summary> ### [`v2.0.1`](https://github.com/booklore-app/booklore/releases/tag/v2.0.1) [Compare Source](https://github.com/booklore-app/BookLore/compare/v2.0.0...v2.0.1) #### 🌟 What's New in v2.0.1 #### 🐛 Bug Fixes - Fix max upload size description to include all file formats ([#​2894](https://github.com/booklore-app/BookLore/issues/2894)) by [@​acx10](https://github.com/acx10) - Fix magic shelf physical book filter and polish UI ([#​2888](https://github.com/booklore-app/BookLore/issues/2888)) by [@​acx10](https://github.com/acx10) - Fix metadata settings not saving due to null deserialization error ([#​2886](https://github.com/booklore-app/BookLore/issues/2886)) by [@​acx10](https://github.com/acx10) - Fix Kobo download/image URLs using wrong port behind reverse proxy ([#​2875](https://github.com/booklore-app/BookLore/issues/2875)) by [@​acx10](https://github.com/acx10) - Fix app crash on startup when /bookdrop volume is not mounted ([#​2873](https://github.com/booklore-app/BookLore/issues/2873)) by [@​acx10](https://github.com/acx10) #### 🛠️ Refactoring & Maintenance - Hide sidecar tab for physical books ([#​2887](https://github.com/booklore-app/BookLore/issues/2887)) by [@​acx10](https://github.com/acx10) - Translations update from Hosted Weblate ([#​2866](https://github.com/booklore-app/BookLore/issues/2866)) by [@​acx10](https://github.com/acx10) #### 🐳 Docker Images - **Docker Hub:** `booklore/booklore:v2.0.1` - **GitHub Container Registry:** `ghcr.io/booklore-app/booklore:v2.0.1` **Full Changelog**: <https://github.com/booklore-app/booklore/compare/v2.0.0...v2.0.1> ### [`v2.0.0`](https://github.com/booklore-app/booklore/releases/tag/v2.0.0) [Compare Source](https://github.com/booklore-app/BookLore/compare/v1.18.5...v2.0.0) #### 🌟 What's New in v2.0.0 This is the biggest Booklore release yet, with nearly 200 commits touching every part of the application: - **Multi-Format Book Support & Audiobooks**: Books can now have multiple file formats (EPUB, PDF, CBZ, etc.) attached to a single entry. Full audiobook support is here with a dedicated player, streaming playback, narrator filtering, and session tracking. - **Duplicate Book Detection & Merge**: Booklore can now detect duplicate books across your library. A new merge tool lets you combine duplicates, choose which formats to keep, and optionally move files, all without losing metadata. - **Author Metadata via Audnexus**: Author pages now pull rich metadata (bios, images) from the Audnexus API, with a dedicated author browser, detail page, and editor. - **Series Browser**: A brand new series browser page with search, filtering, sorting, and resizable cards for browsing your series collection at a glance. - **Annotation Notebook**: All your highlights, notes, and bookmarks are now collected in a searchable, paginated notebook view. - **Audit Log System**: Admins can now see a full audit trail of significant actions (user management, library changes, metadata operations) with geo flags, relative timestamps, and filterable logs. - **Bidirectional Kobo Sync**: Full two-way reading progress sync with Kobo devices, plus shelves and magic shelves now sync as Kobo tags. - **Cascading Sidebar Filters**: Filters now cascade, so selecting an author narrows available series, genres, etc. You can also customize which filters are visible. - **10+ New Statistics Charts**: A massive expansion of the stats page with reading heatmaps, distribution charts, completion races, and more. - **PDF Annotations & Reader Upgrades**: The PDF reader now supports annotations, dark/light mode toggle, and Range streaming. The ebook reader gains fullscreen, keyboard shortcuts, and go-to-percentage. The CBX reader adds fullscreen, slideshow, RTL, and long strip mode. - **Sidecar Metadata Files**: Booklore can now read and write `.metadata.json` sidecar files alongside your books for portable metadata storage. - **Extended Comic Metadata**: Full ComicInfo.xml support with a dedicated comic metadata picker and write-back to CBZ/PDF files. - **Internationalization via Weblate**: Booklore is now fully translatable with Transloco and Weblate integration. Ships with 15+ languages including Hungarian, Slovenian, Croatian, Swedish, Chinese, and Japanese. - **Java 25, Spring Boot 4, Gradle 9**: The entire backend has been upgraded to the latest stack. Nginx has been removed; Angular is now served directly from Spring Boot. - **Login Rate Limiting**: Brute-force protection on the login endpoint. Plus new age and content rating support for restricted libraries. - **Performance**: Book list API optimized with ETag caching, delta sync, and IndexedDB. Project Lilliput compact object headers reduce heap usage. #### 🚀 New Features - Introduce multi-format book support, including audiobooks ([#​2486](https://github.com/booklore-app/BookLore/issues/2486)) by [@​acx10](https://github.com/acx10) - Add duplicate book detection/merge and fix format-related data loss ([#​2820](https://github.com/booklore-app/BookLore/issues/2820)) by [@​acx10](https://github.com/acx10) - Add author metadata via Audnexus with browser, detail, and editor pages ([#​2843](https://github.com/booklore-app/BookLore/issues/2843)) by [@​acx10](https://github.com/acx10) - feat: add series browser page ([#​2771](https://github.com/booklore-app/BookLore/issues/2771)) by [@​acx10](https://github.com/acx10) - feat: add annotation notebook with server-side pagination ([#​2736](https://github.com/booklore-app/BookLore/issues/2736)) by [@​acx10](https://github.com/acx10) - feat: add audit log system for tracking admin-significant actions ([#​2759](https://github.com/booklore-app/BookLore/issues/2759)) by [@​acx10](https://github.com/acx10) - Add bidirectional Kobo reading progress sync ([#​2791](https://github.com/booklore-app/BookLore/issues/2791)) by [@​acx10](https://github.com/acx10) - feat(filters): implement cascading sidebar filters ([#​2616](https://github.com/booklore-app/BookLore/issues/2616)) by [@​acx10](https://github.com/acx10) - feat(cbx-reader): add fullscreen, slideshow, RTL, long strip mode and keyboard shortcuts ([#​2632](https://github.com/booklore-app/BookLore/issues/2632)) by [@​acx10](https://github.com/acx10) - feat(sidecar): add sidecar JSON metadata file support ([#​2657](https://github.com/booklore-app/BookLore/issues/2657)) by [@​acx10](https://github.com/acx10) - feat(comic-metadata): add extended comic metadata support ([#​2654](https://github.com/booklore-app/BookLore/issues/2654)) by [@​acx10](https://github.com/acx10) - feat(i18n): add Transloco translation framework with EN/ES and 7 language scaffolds ([#​2681](https://github.com/booklore-app/BookLore/issues/2681)) by [@​acx10](https://github.com/acx10) - feat(api, build): Upgrade to Java 25, Gradle 9, and Spring Boot 4, Jackson 3 ([#​2597](https://github.com/booklore-app/BookLore/issues/2597)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Remove nginx and serve Angular directly from Spring Boot ([#​2662](https://github.com/booklore-app/BookLore/issues/2662)) by [@​acx10](https://github.com/acx10) - feat: add login rate limiting to prevent brute-force attacks ([#​2761](https://github.com/booklore-app/BookLore/issues/2761)) by [@​acx10](https://github.com/acx10) - feat(content-restrictions): add age rating and content rating support ([#​2619](https://github.com/booklore-app/BookLore/issues/2619)) by [@​acx10](https://github.com/acx10) - feat(sorting): add multi-field sorting support ([#​2628](https://github.com/booklore-app/BookLore/issues/2628)) by [@​acx10](https://github.com/acx10) - feat(metadata): add custom metadata write to file support for moods, tags, ratings, and external IDs in PDF, and CBZ ([#​2552](https://github.com/booklore-app/BookLore/issues/2552)) by [@​balazs-szucs](https://github.com/balazs-szucs) - feat(metadata) Save basic metadata to EPUB file - Bonus use Calibre Custom Columns for importing metadata. ([#​1879](https://github.com/booklore-app/BookLore/issues/1879)) by [@​jadehawk](https://github.com/jadehawk) - feat: add grouped field dropdown and composite fields to magic shelf ([#​2750](https://github.com/booklore-app/BookLore/issues/2750)) by [@​acx10](https://github.com/acx10) - feat(filters): add customizable visible filters setting ([#​2625](https://github.com/booklore-app/BookLore/issues/2625)) by [@​acx10](https://github.com/acx10) - Add 10 advanced stats charts ([#​2850](https://github.com/booklore-app/BookLore/issues/2850)) by [@​acx10](https://github.com/acx10) - feat(stats): add 5 new user statistics charts ([#​2703](https://github.com/booklore-app/BookLore/issues/2703)) by [@​acx10](https://github.com/acx10) - feat(i18n): add Weblate integration and auth translations ([#​2727](https://github.com/booklore-app/BookLore/issues/2727)) by [@​acx10](https://github.com/acx10) - feat: add else clause and value modifiers to file naming patterns ([#​2724](https://github.com/booklore-app/BookLore/issues/2724)) by [@​acx10](https://github.com/acx10) - feat: add button to fetch metadata from book file ([#​2739](https://github.com/booklore-app/BookLore/issues/2739)) by [@​acx10](https://github.com/acx10) - feat(google-books): add optional API key configuration ([#​2629](https://github.com/booklore-app/BookLore/issues/2629)) by [@​acx10](https://github.com/acx10) #### ✨ Enhancements - feat(reader): add PDF annotations, Range streaming, and optimized chunk loading ([#​2701](https://github.com/booklore-app/BookLore/issues/2701)) by [@​acx10](https://github.com/acx10) - feat(reader): add fullscreen, keyboard shortcuts, search cancel, and go-to-percentage ([#​2698](https://github.com/booklore-app/BookLore/issues/2698)) by [@​acx10](https://github.com/acx10) - feat(reader): add dark/light mode toggle and improved close button to PDF reader ([#​2699](https://github.com/booklore-app/BookLore/issues/2699)) by [@​acx10](https://github.com/acx10) - feat(kobo-sync): add user scoped 2 way kobo sync ([#​2452](https://github.com/booklore-app/BookLore/issues/2452)) by [@​b3nk3](https://github.com/b3nk3) - feat(kobo-sync): Sync Shelves and Magic Shelves to Kobo Tags ([#​2236](https://github.com/booklore-app/BookLore/issues/2236)) by [@​xcashy](https://github.com/xcashy) - Redesign series page layout and book list tab ([#​2847](https://github.com/booklore-app/BookLore/issues/2847)) by [@​acx10](https://github.com/acx10) - feat(sort): replace compound sort options with atomic fields and multi-sort support ([#​2686](https://github.com/booklore-app/BookLore/issues/2686)) by [@​acx10](https://github.com/acx10) - Add moveFiles option to attach/merge and per-book delete in duplicate merger ([#​2833](https://github.com/booklore-app/BookLore/issues/2833)) by [@​acx10](https://github.com/acx10) - feat: enhance audit logs with geo flags, relative time, and UX improvements ([#​2760](https://github.com/booklore-app/BookLore/issues/2760)) by [@​acx10](https://github.com/acx10) - feat(bookdrop): add ability to poll the bookdrop folder ([#​2768](https://github.com/booklore-app/BookLore/issues/2768)) by [@​arjunsrinivasan1997](https://github.com/arjunsrinivasan1997) - feat: add metadata presence filter to magic shelf ([#​2757](https://github.com/booklore-app/BookLore/issues/2757)) by [@​acx10](https://github.com/acx10) - feat(upload): add upload progress tracking with progress bar and stats ([#​2640](https://github.com/booklore-app/BookLore/issues/2640)) by [@​acx10](https://github.com/acx10) - feat(email): add format selection to email book dialog ([#​2650](https://github.com/booklore-app/BookLore/issues/2650)) by [@​acx10](https://github.com/acx10) - feat(pwa): Enable fullscreen mode for Android immersive reading ([#​2649](https://github.com/booklore-app/BookLore/issues/2649)) by [@​alondero](https://github.com/alondero) - Add Hungarian and Slovenian language support ([#​2846](https://github.com/booklore-app/BookLore/issues/2846)) by [@​acx10](https://github.com/acx10) - fix(library-service): prevent concurrent library scans with a tracking set ([#​2637](https://github.com/booklore-app/BookLore/issues/2637)) by [@​balazs-szucs](https://github.com/balazs-szucs) - feat: add configurable sidebar width setting ([#​2749](https://github.com/booklore-app/BookLore/issues/2749)) by [@​acx10](https://github.com/acx10) - refactor(download): simplify file download to use browser native handling ([#​2639](https://github.com/booklore-app/BookLore/issues/2639)) by [@​acx10](https://github.com/acx10) #### 🎨 UI Tweaks - Add visual polish to book card component ([#​2788](https://github.com/booklore-app/BookLore/issues/2788)) by [@​acx10](https://github.com/acx10) - refactor: centralize access-denied card styles into shared mixin ([#​2515](https://github.com/booklore-app/BookLore/issues/2515)) by [@​acx10](https://github.com/acx10) #### 🐛 Bug Fixes - fix(auth): resolve DST-related login failure for refresh tokens ([#​2624](https://github.com/booklore-app/BookLore/issues/2624)) by [@​acx10](https://github.com/acx10) - Fix Kobo sync HeadersTooLargeException for large libraries ([#​2809](https://github.com/booklore-app/BookLore/issues/2809)) by [@​acx10](https://github.com/acx10) - fix(metadata-refresh): Correct metadata update priorities and preserve disabled fields during 'replace all' ([#​2503](https://github.com/booklore-app/BookLore/issues/2503)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(metadata-parsers): improve ISBN search logic and fallback strategies for metadata fetching ([#​2502](https://github.com/booklore-app/BookLore/issues/2502)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(metadata-update): ensure per-book transaction isolation in bulk updates to prevent race conditions ([#​2536](https://github.com/booklore-app/BookLore/issues/2536)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(metadata-refresh): fix filter book shelves by authenticated user logs out the user. ([#​2481](https://github.com/booklore-app/BookLore/issues/2481)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix null collection errors for PDFs, audiobooks, and physical books ([#​2817](https://github.com/booklore-app/BookLore/issues/2817)) by [@​acx10](https://github.com/acx10) - fix(library-processing): re-fetch library entity after clearing entity manager during rescan ([#​2507](https://github.com/booklore-app/BookLore/issues/2507)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(file-move): ensure file moves are rolled back if database update fails ([#​2588](https://github.com/booklore-app/BookLore/issues/2588)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(file-move): update empty directory cleanup to handle multiple library paths ([#​2634](https://github.com/booklore-app/BookLore/issues/2634)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix CBR/CB7 to CBZ conversion losing track of file path ([#​2835](https://github.com/booklore-app/BookLore/issues/2835)) by [@​acx10](https://github.com/acx10) - fix(cbz-reader): CBZ reading regression and optimize ZIP parsing strategy ([#​2593](https://github.com/booklore-app/BookLore/issues/2593)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix PDF reader not loading alternate format files ([#​2836](https://github.com/booklore-app/BookLore/issues/2836)) by [@​acx10](https://github.com/acx10) - fix(epub-cover-extract): improve cover image extraction with fallback handling ([#​2585](https://github.com/booklore-app/BookLore/issues/2585)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(epub-metadata): enhance cover extraction with heuristic fallbacks for manifest and ZIP entries ([#​2636](https://github.com/booklore-app/BookLore/issues/2636)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(book-rule-evaluator): fix file type handling and add mapping for specific formats to fix magic shelve based on filetype ([#​2480](https://github.com/booklore-app/BookLore/issues/2480)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix magic shelf rule evaluation for numeric comparisons ([#​2795](https://github.com/booklore-app/BookLore/issues/2795)) by [@​acx10](https://github.com/acx10) - Fix read status NULL progress handling in rule evaluator ([#​2821](https://github.com/booklore-app/BookLore/issues/2821)) by [@​acx10](https://github.com/acx10) - Fix bookdrop race condition processing files before fully written ([#​2785](https://github.com/booklore-app/BookLore/issues/2785)) by [@​acx10](https://github.com/acx10) - fix(bookdrop): handle file modifications in Bookdrop event handler ([#​2559](https://github.com/booklore-app/BookLore/issues/2559)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(hardcover-sync): Don't send repeated read status to Hardcover.app ([#​2609](https://github.com/booklore-app/BookLore/issues/2609)) by [@​PhasecoreX](https://github.com/PhasecoreX) - fix(api): Select correct Hardcover.app ISBN from lookup results ([#​2530](https://github.com/booklore-app/BookLore/issues/2530)) by [@​PhasecoreX](https://github.com/PhasecoreX) - fix(ui): fix memory leaks and cascading API calls in metadata editor ([#​2716](https://github.com/booklore-app/BookLore/issues/2716)) by [@​acx10](https://github.com/acx10) - fix: replace Quill editor with native HTML rendering for book descriptions ([#​2733](https://github.com/booklore-app/BookLore/issues/2733)) by [@​acx10](https://github.com/acx10) - Fix reading stats queries not accounting for timezone ([#​2844](https://github.com/booklore-app/BookLore/issues/2844)) by [@​acx10](https://github.com/acx10) - Fix reading session timeline long sessions, tooltip perf, and week mismatch ([#​2848](https://github.com/booklore-app/BookLore/issues/2848)) by [@​acx10](https://github.com/acx10) - fix(reading-stats,ui): update heatmap to use local time formatting… ([#​2587](https://github.com/booklore-app/BookLore/issues/2587)) by [@​WorldTeacher](https://github.com/WorldTeacher) - fix(select-all): "Mark All" bug and add "Remove from all shelves" bulk action across components ([#​2562](https://github.com/booklore-app/BookLore/issues/2562)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(opds): Fix OPDS CBR mime type reporting and strict Archive detection ([#​2592](https://github.com/booklore-app/BookLore/issues/2592)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix OPDS shelf filter cartesian product ([#​2837](https://github.com/booklore-app/BookLore/issues/2837)) by [@​acx10](https://github.com/acx10) - fix(comic-metadata): fix series grouping bug with external ComicInfo.xml metadata ([#​2385](https://github.com/booklore-app/BookLore/issues/2385)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix additional file uploader bugs and improve metadata viewer ([#​2816](https://github.com/booklore-app/BookLore/issues/2816)) by [@​acx10](https://github.com/acx10) - Fix PWA offline fallback blocking localhost access when internet is disconnected ([#​2784](https://github.com/booklore-app/BookLore/issues/2784)) by [@​acx10](https://github.com/acx10) - fix(audiobook-reader): use preload=none for immediate streaming playback ([#​2518](https://github.com/booklore-app/BookLore/issues/2518)) by [@​acx10](https://github.com/acx10) - fix: reset audiobook progress and clear cached progress in UI ([#​2711](https://github.com/booklore-app/BookLore/issues/2711)) by [@​acx10](https://github.com/acx10) - Fix cbx reader prev/next book stacking on close ([#​2858](https://github.com/booklore-app/BookLore/issues/2858)) by [@​acx10](https://github.com/acx10) - Fix ebook reader header not hiding on mobile tap ([#​2857](https://github.com/booklore-app/BookLore/issues/2857)) by [@​acx10](https://github.com/acx10) - fix(reader): enable text copy in ebook reader ([#​2702](https://github.com/booklore-app/BookLore/issues/2702)) by [@​acx10](https://github.com/acx10) - Fix CBZ reader scroll position reset in infinite scroll mode ([#​2781](https://github.com/booklore-app/BookLore/issues/2781)) by [@​acx10](https://github.com/acx10) - Fix column gap +/- buttons in eBook reader default settings ([#​2780](https://github.com/booklore-app/BookLore/issues/2780)) by [@​acx10](https://github.com/acx10) - Fix email provider creation failing due to null shared field ([#​2794](https://github.com/booklore-app/BookLore/issues/2794)) by [@​acx10](https://github.com/acx10) - Fix audit logs pagination bug and add URL query param sync ([#​2787](https://github.com/booklore-app/BookLore/issues/2787)) by [@​acx10](https://github.com/acx10) - Fix audit log description overflow for bulk metadata refresh ([#​2783](https://github.com/booklore-app/BookLore/issues/2783)) by [@​acx10](https://github.com/acx10) - Fix multiple author card menus opening simultaneously ([#​2852](https://github.com/booklore-app/BookLore/issues/2852)) by [@​acx10](https://github.com/acx10) - Fix Goodreads label mappings and format config ([#​2779](https://github.com/booklore-app/BookLore/issues/2779)) by [@​AlfredSimpson](https://github.com/AlfredSimpson) - fix(ui): encode filter values in query params to handle commas in names ([#​2717](https://github.com/booklore-app/BookLore/issues/2717)) by [@​acx10](https://github.com/acx10) - fix(ui): prevent footer submenu from rendering off screen ([#​2714](https://github.com/booklore-app/BookLore/issues/2714)) by [@​acx10](https://github.com/acx10) - fix(ui): inline mobile charts submenu to prevent layout overflow ([#​2713](https://github.com/booklore-app/BookLore/issues/2713)) by [@​acx10](https://github.com/acx10) - fix(ui): correctly format lubimyczytac external rating link ([#​2491](https://github.com/booklore-app/BookLore/issues/2491)) by [@​sebhewelt](https://github.com/sebhewelt) - Fix iconDisplay binding syntax in metadata viewer ([#​2772](https://github.com/booklore-app/BookLore/issues/2772)) by [@​WorldTeacher](https://github.com/WorldTeacher) - Fix mobile toolbar overlapping on small screens ([#​2856](https://github.com/booklore-app/BookLore/issues/2856)) by [@​acx10](https://github.com/acx10) - Fix book browser header title overflow on mobile ([#​2808](https://github.com/booklore-app/BookLore/issues/2808)) by [@​acx10](https://github.com/acx10) - fix(book-browser): resolve footer menu not hiding after navigation back ([#​2626](https://github.com/booklore-app/BookLore/issues/2626)) by [@​acx10](https://github.com/acx10) - fix: align frontend Page interfaces with VIA\_DTO serialization format ([#​2751](https://github.com/booklore-app/BookLore/issues/2751)) by [@​acx10](https://github.com/acx10) - fix: show provider icons in metadata viewer when only ID is present ([#​2734](https://github.com/booklore-app/BookLore/issues/2734)) by [@​acx10](https://github.com/acx10) - fix: hide show-more button when description fits without truncation ([#​2766](https://github.com/booklore-app/BookLore/issues/2766)) by [@​acx10](https://github.com/acx10) - fix: use audiobook thumbnail for audiobook entries in notebook ([#​2763](https://github.com/booklore-app/BookLore/issues/2763)) by [@​acx10](https://github.com/acx10) - fix: show session numbers in book ([#​2696](https://github.com/booklore-app/BookLore/issues/2696)) by [@​WorldTeacher](https://github.com/WorldTeacher) - fix(settings): use boxed Integer for ScrollerConfig.maxItems to allow null ([#​2684](https://github.com/booklore-app/BookLore/issues/2684)) by [@​acx10](https://github.com/acx10) - fix(series-multi-select): Fix transparency in series multi select pop-up ([#​2555](https://github.com/booklore-app/BookLore/issues/2555)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix: Filter text overwrites on long options ([#​2540](https://github.com/booklore-app/BookLore/issues/2540)) by [@​acx10](https://github.com/acx10) - Fix: Lock icons do not stay with publisher and series name input fields ([#​2539](https://github.com/booklore-app/BookLore/issues/2539)) by [@​acx10](https://github.com/acx10) - fix(metadata): improve cover errors, reduce metadata fetch count, and hide attach option ([#​2690](https://github.com/booklore-app/BookLore/issues/2690)) by [@​acx10](https://github.com/acx10) #### ⚡ Performance - perf: optimize book list API with ETag, delta sync, and IndexedDB caching ([#​2753](https://github.com/booklore-app/BookLore/issues/2753)) by [@​acx10](https://github.com/acx10) - perf: enable compact object headers (Project Lilliput) ([#​2755](https://github.com/booklore-app/BookLore/issues/2755)) by [@​acx10](https://github.com/acx10) #### 🛠️ Refactoring & Maintenance - refactor: split BookService into BookFileService and BookMetadataManageService ([#​2758](https://github.com/booklore-app/BookLore/issues/2758)) by [@​acx10](https://github.com/acx10) - chore: fix memory leaks, add aria-labels, improve type safety and logging ([#​2764](https://github.com/booklore-app/BookLore/issues/2764)) by [@​acx10](https://github.com/acx10) - chore: add caching, validation, lazy routes, refresh rate limiting, JaCoCo, and cleanup ([#​2762](https://github.com/booklore-app/BookLore/issues/2762)) by [@​acx10](https://github.com/acx10) - perf: strip unused fields from book list API response ([#​2741](https://github.com/booklore-app/BookLore/issues/2741)) by [@​acx10](https://github.com/acx10) - perf(epub): Replace linear manifest scans with HashMaps in EPUB reader ([#​2598](https://github.com/booklore-app/BookLore/issues/2598)) by [@​balazs-szucs](https://github.com/balazs-szucs) - feat(metadata): return full metadata from parsers instead of previews ([#​2689](https://github.com/booklore-app/BookLore/issues/2689)) by [@​acx10](https://github.com/acx10) - feat: comic metadata picker, lazy-load providers, and UI improvements ([#​2679](https://github.com/booklore-app/BookLore/issues/2679)) by [@​acx10](https://github.com/acx10) - Add complete translations for all supported languages ([#​2831](https://github.com/booklore-app/BookLore/issues/2831)) by [@​acx10](https://github.com/acx10) - Add Hungarian and Slovenian language support ([#​2846](https://github.com/booklore-app/BookLore/issues/2846)) by [@​acx10](https://github.com/acx10) - Add Croatian and Swedish translations for login page ([#​2786](https://github.com/booklore-app/BookLore/issues/2786)) by [@​acx10](https://github.com/acx10) - feat: add i18n translations for stats, pdf reader, magic shelf, and remaining components (en/es) ([#​2742](https://github.com/booklore-app/BookLore/issues/2742)) by [@​acx10](https://github.com/acx10) - feat: add i18n translations for book components, services, and readers (en/es) ([#​2738](https://github.com/booklore-app/BookLore/issues/2738)) by [@​acx10](https://github.com/acx10) - fix(i18n): dynamic sidebar translations and UI font normalization ([#​2683](https://github.com/booklore-app/BookLore/issues/2683)) by [@​acx10](https://github.com/acx10) - feat: disable PDF printing for users without download permission ([#​2737](https://github.com/booklore-app/BookLore/issues/2737)) by [@​acx10](https://github.com/acx10) - feat(ui): add file name column to table view and include filename in search ([#​2712](https://github.com/booklore-app/BookLore/issues/2712)) by [@​acx10](https://github.com/acx10) - feat(ui): provide hyperlinks for books as book cards in grid view ([#​2500](https://github.com/booklore-app/BookLore/issues/2500)) by [@​berb](https://github.com/berb) - feat(ui): Add sort by filePath ([#​1180](https://github.com/booklore-app/BookLore/issues/1180) and [#​2364](https://github.com/booklore-app/BookLore/issues/2364)) ([#​2512](https://github.com/booklore-app/BookLore/issues/2512)) by [@​chiguirepower](https://github.com/chiguirepower) - feat(icons): Made icons for libraries and shelves optional with no default icons. ([#​2599](https://github.com/booklore-app/BookLore/issues/2599)) by [@​arthurgiroux](https://github.com/arthurgiroux) - fix(comicvine): add fallback to issue detail endpoint for missing creator credits ([#​2694](https://github.com/booklore-app/BookLore/issues/2694)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(epub-metadata): enhance cover extraction with heuristic fallbacks for manifest and ZIP entries ([#​2636](https://github.com/booklore-app/BookLore/issues/2636)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(metadata-match): Fix metadata quality calculation to properly handle locked fields ([#​2513](https://github.com/booklore-app/BookLore/issues/2513)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(ui): reload shelves when enabling Kobo sync ([#​2715](https://github.com/booklore-app/BookLore/issues/2715)) by [@​acx10](https://github.com/acx10) - fix(ui): standardize button labels and styles across components ([#​2560](https://github.com/booklore-app/BookLore/issues/2560)) by [@​balazs-szucs](https://github.com/balazs-szucs) - chore: redesign README for cleaner layout and visual polish ([#​2728](https://github.com/booklore-app/BookLore/issues/2728)) by [@​acx10](https://github.com/acx10) - fix: make README logo visible in GitHub light mode ([#​2756](https://github.com/booklore-app/BookLore/issues/2756)) by [@​acx10](https://github.com/acx10) - chore: clean up PR template and contributing guide ([#​2660](https://github.com/booklore-app/BookLore/issues/2660)) by [@​acx10](https://github.com/acx10) - fix(file naming): add leading zero to series index ([#​2642](https://github.com/booklore-app/BookLore/issues/2642)) by [@​WorldTeacher](https://github.com/WorldTeacher) - Update viewport meta tag to prevent auto-zoom on iOS when entering in… ([#​2620](https://github.com/booklore-app/BookLore/issues/2620)) by [@​jmswangit](https://github.com/jmswangit) - test(API): add missing tests for BookMapperV2 ([#​2495](https://github.com/booklore-app/BookLore/issues/2495)) by [@​piffio](https://github.com/piffio) - fix(audiobook-reader): use preload=none with explicit load() for faster streaming ([#​2520](https://github.com/booklore-app/BookLore/issues/2520)) by [@​acx10](https://github.com/acx10) - fix(ui): clean cached properties ([#​2499](https://github.com/booklore-app/BookLore/issues/2499)) by [@​piffio](https://github.com/piffio) - fix(additional-file-uploader): add file size validation with UI feedback ([#​2516](https://github.com/booklore-app/BookLore/issues/2516)) by [@​acx10](https://github.com/acx10) - fix(os\_x-conversion): ignore \_\_MACOSX directory for conversions ([#​2479](https://github.com/booklore-app/BookLore/issues/2479)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(series-page): add missing overlay preference service to book card ([#​2466](https://github.com/booklore-app/BookLore/issues/2466)) by [@​xcashy](https://github.com/xcashy) - fix(docker): add build and gradle directories to volumes in docker compose ([#​2459](https://github.com/booklore-app/BookLore/issues/2459)) by [@​balazs-szucs](https://github.com/balazs-szucs) #### 📦 Dependencies - chore(deps): bump org.springframework.boot from 4.0.2 to 4.0.3 in /booklore-api in the gradle-dependencies group ([#​2813](https://github.com/booklore-app/BookLore/issues/2813)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump the npm-dependencies group in /booklore-ui with 15 updates ([#​2814](https://github.com/booklore-app/BookLore/issues/2814)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump the npm-dependencies group across 1 directory with 18 updates ([#​2687](https://github.com/booklore-app/BookLore/issues/2687)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump the npm-dependencies group in /booklore-ui with 13 updates ([#​2721](https://github.com/booklore-app/BookLore/issues/2721)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump the npm-dependencies group in /booklore-ui with 20 updates ([#​2542](https://github.com/booklore-app/BookLore/issues/2542)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump the gradle-dependencies group across 1 directory with 7 updates ([#​2659](https://github.com/booklore-app/BookLore/issues/2659)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump the gradle-dependencies group in /booklore-api with 2 updates ([#​2720](https://github.com/booklore-app/BookLore/issues/2720)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump tar from 7.5.7 to 7.5.9 in /booklore-ui ([#​2805](https://github.com/booklore-app/BookLore/issues/2805)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump tar from 7.5.6 to 7.5.7 in /booklore-ui ([#​2534](https://github.com/booklore-app/BookLore/issues/2534)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump hono from 4.11.9 to 4.12.0 in /booklore-ui ([#​2815](https://github.com/booklore-app/BookLore/issues/2815)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump qs from 6.14.1 to 6.14.2 in /booklore-ui ([#​2722](https://github.com/booklore-app/BookLore/issues/2722)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump [@​modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/sdk) and [@​angular/cli](https://github.com/angular/cli) in /booklore-ui ([#​2612](https://github.com/booklore-app/BookLore/issues/2612)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump actions/setup-node from 4 to 6 ([#​2573](https://github.com/booklore-app/BookLore/issues/2573)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) #### ⚙️ CI/CD - ci: move Angular/Gradle builds to native CI steps to eliminate QEMU emulation ([#​2705](https://github.com/booklore-app/BookLore/issues/2705)) by [@​acx10](https://github.com/acx10) - chore: add performance label to release drafter categories ([#​2754](https://github.com/booklore-app/BookLore/issues/2754)) by [@​acx10](https://github.com/acx10) #### 🐳 Docker Images - **Docker Hub:** `booklore/booklore:v2.0.0` - **GitHub Container Registry:** `ghcr.io/booklore-app/booklore:v2.0.0` **Full Changelog**: <https://github.com/booklore-app/booklore/compare/v1.18.5...v2.0.0> #### 📸 Screenshots <img width="750" alt="Book browser with audiobook library and cascading sidebar filters" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/book-browser-audiobooks-library.png" /> <img width="750" alt="Book detail page with multi-format support and alternative formats" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/book-detail-multi-format.png" /> <img width="300" alt="Audiobook player with streaming playback" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/audiobook-player.png" /> <img width="300" alt="Ebook reader" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/ebook-reader.png" /> <img width="750" alt="CBX comic reader with fullscreen, slideshow, RTL, and long strip mode" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/cbx-comic-reader.png" /> <img width="750" alt="Annotation notebook with highlights, notes, and bookmarks" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/annotation-notebook.png" /> <img width="750" alt="Author browser with Audnexus metadata" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/author-browser.png" /> <img width="750" alt="Series browser with search, filter, and sort" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/series-browser.png" /> <img width="500" alt="Reading Clock statistics chart" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/reading-clock-stats.png" /> <img width="750" alt="Reading Survival Curve and Book Length Sweet Spot charts" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/reading-survival-book-length-charts.png" /> <img width="750" alt="Reading Completion Race chart" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/reading-completion-race.png" /> </details> <details> <summary>booklore-app/booklore (ghcr.io/booklore-app/booklore)</summary> ### [`v2.0.1`](https://github.com/booklore-app/booklore/releases/tag/v2.0.1) [Compare Source](https://github.com/booklore-app/booklore/compare/v2.0.0...v2.0.1) #### 🌟 What's New in v2.0.1 #### 🐛 Bug Fixes - Fix max upload size description to include all file formats ([#​2894](https://github.com/booklore-app/booklore/issues/2894)) by [@​acx10](https://github.com/acx10) - Fix magic shelf physical book filter and polish UI ([#​2888](https://github.com/booklore-app/booklore/issues/2888)) by [@​acx10](https://github.com/acx10) - Fix metadata settings not saving due to null deserialization error ([#​2886](https://github.com/booklore-app/booklore/issues/2886)) by [@​acx10](https://github.com/acx10) - Fix Kobo download/image URLs using wrong port behind reverse proxy ([#​2875](https://github.com/booklore-app/booklore/issues/2875)) by [@​acx10](https://github.com/acx10) - Fix app crash on startup when /bookdrop volume is not mounted ([#​2873](https://github.com/booklore-app/booklore/issues/2873)) by [@​acx10](https://github.com/acx10) #### 🛠️ Refactoring & Maintenance - Hide sidecar tab for physical books ([#​2887](https://github.com/booklore-app/booklore/issues/2887)) by [@​acx10](https://github.com/acx10) - Translations update from Hosted Weblate ([#​2866](https://github.com/booklore-app/booklore/issues/2866)) by [@​acx10](https://github.com/acx10) #### 🐳 Docker Images - **Docker Hub:** `booklore/booklore:v2.0.1` - **GitHub Container Registry:** `ghcr.io/booklore-app/booklore:v2.0.1` **Full Changelog**: <https://github.com/booklore-app/booklore/compare/v2.0.0...v2.0.1> ### [`v2.0.0`](https://github.com/booklore-app/booklore/releases/tag/v2.0.0) [Compare Source](https://github.com/booklore-app/booklore/compare/v1.18.5...v2.0.0) #### 🌟 What's New in v2.0.0 This is the biggest Booklore release yet, with nearly 200 commits touching every part of the application: - **Multi-Format Book Support & Audiobooks**: Books can now have multiple file formats (EPUB, PDF, CBZ, etc.) attached to a single entry. Full audiobook support is here with a dedicated player, streaming playback, narrator filtering, and session tracking. - **Duplicate Book Detection & Merge**: Booklore can now detect duplicate books across your library. A new merge tool lets you combine duplicates, choose which formats to keep, and optionally move files, all without losing metadata. - **Author Metadata via Audnexus**: Author pages now pull rich metadata (bios, images) from the Audnexus API, with a dedicated author browser, detail page, and editor. - **Series Browser**: A brand new series browser page with search, filtering, sorting, and resizable cards for browsing your series collection at a glance. - **Annotation Notebook**: All your highlights, notes, and bookmarks are now collected in a searchable, paginated notebook view. - **Audit Log System**: Admins can now see a full audit trail of significant actions (user management, library changes, metadata operations) with geo flags, relative timestamps, and filterable logs. - **Bidirectional Kobo Sync**: Full two-way reading progress sync with Kobo devices, plus shelves and magic shelves now sync as Kobo tags. - **Cascading Sidebar Filters**: Filters now cascade, so selecting an author narrows available series, genres, etc. You can also customize which filters are visible. - **10+ New Statistics Charts**: A massive expansion of the stats page with reading heatmaps, distribution charts, completion races, and more. - **PDF Annotations & Reader Upgrades**: The PDF reader now supports annotations, dark/light mode toggle, and Range streaming. The ebook reader gains fullscreen, keyboard shortcuts, and go-to-percentage. The CBX reader adds fullscreen, slideshow, RTL, and long strip mode. - **Sidecar Metadata Files**: Booklore can now read and write `.metadata.json` sidecar files alongside your books for portable metadata storage. - **Extended Comic Metadata**: Full ComicInfo.xml support with a dedicated comic metadata picker and write-back to CBZ/PDF files. - **Internationalization via Weblate**: Booklore is now fully translatable with Transloco and Weblate integration. Ships with 15+ languages including Hungarian, Slovenian, Croatian, Swedish, Chinese, and Japanese. - **Java 25, Spring Boot 4, Gradle 9**: The entire backend has been upgraded to the latest stack. Nginx has been removed; Angular is now served directly from Spring Boot. - **Login Rate Limiting**: Brute-force protection on the login endpoint. Plus new age and content rating support for restricted libraries. - **Performance**: Book list API optimized with ETag caching, delta sync, and IndexedDB. Project Lilliput compact object headers reduce heap usage. #### 🚀 New Features - Introduce multi-format book support, including audiobooks ([#​2486](https://github.com/booklore-app/booklore/issues/2486)) by [@​acx10](https://github.com/acx10) - Add duplicate book detection/merge and fix format-related data loss ([#​2820](https://github.com/booklore-app/booklore/issues/2820)) by [@​acx10](https://github.com/acx10) - Add author metadata via Audnexus with browser, detail, and editor pages ([#​2843](https://github.com/booklore-app/booklore/issues/2843)) by [@​acx10](https://github.com/acx10) - feat: add series browser page ([#​2771](https://github.com/booklore-app/booklore/issues/2771)) by [@​acx10](https://github.com/acx10) - feat: add annotation notebook with server-side pagination ([#​2736](https://github.com/booklore-app/booklore/issues/2736)) by [@​acx10](https://github.com/acx10) - feat: add audit log system for tracking admin-significant actions ([#​2759](https://github.com/booklore-app/booklore/issues/2759)) by [@​acx10](https://github.com/acx10) - Add bidirectional Kobo reading progress sync ([#​2791](https://github.com/booklore-app/booklore/issues/2791)) by [@​acx10](https://github.com/acx10) - feat(filters): implement cascading sidebar filters ([#​2616](https://github.com/booklore-app/booklore/issues/2616)) by [@​acx10](https://github.com/acx10) - feat(cbx-reader): add fullscreen, slideshow, RTL, long strip mode and keyboard shortcuts ([#​2632](https://github.com/booklore-app/booklore/issues/2632)) by [@​acx10](https://github.com/acx10) - feat(sidecar): add sidecar JSON metadata file support ([#​2657](https://github.com/booklore-app/booklore/issues/2657)) by [@​acx10](https://github.com/acx10) - feat(comic-metadata): add extended comic metadata support ([#​2654](https://github.com/booklore-app/booklore/issues/2654)) by [@​acx10](https://github.com/acx10) - feat(i18n): add Transloco translation framework with EN/ES and 7 language scaffolds ([#​2681](https://github.com/booklore-app/booklore/issues/2681)) by [@​acx10](https://github.com/acx10) - feat(api, build): Upgrade to Java 25, Gradle 9, and Spring Boot 4, Jackson 3 ([#​2597](https://github.com/booklore-app/booklore/issues/2597)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Remove nginx and serve Angular directly from Spring Boot ([#​2662](https://github.com/booklore-app/booklore/issues/2662)) by [@​acx10](https://github.com/acx10) - feat: add login rate limiting to prevent brute-force attacks ([#​2761](https://github.com/booklore-app/booklore/issues/2761)) by [@​acx10](https://github.com/acx10) - feat(content-restrictions): add age rating and content rating support ([#​2619](https://github.com/booklore-app/booklore/issues/2619)) by [@​acx10](https://github.com/acx10) - feat(sorting): add multi-field sorting support ([#​2628](https://github.com/booklore-app/booklore/issues/2628)) by [@​acx10](https://github.com/acx10) - feat(metadata): add custom metadata write to file support for moods, tags, ratings, and external IDs in PDF, and CBZ ([#​2552](https://github.com/booklore-app/booklore/issues/2552)) by [@​balazs-szucs](https://github.com/balazs-szucs) - feat(metadata) Save basic metadata to EPUB file - Bonus use Calibre Custom Columns for importing metadata. ([#​1879](https://github.com/booklore-app/booklore/issues/1879)) by [@​jadehawk](https://github.com/jadehawk) - feat: add grouped field dropdown and composite fields to magic shelf ([#​2750](https://github.com/booklore-app/booklore/issues/2750)) by [@​acx10](https://github.com/acx10) - feat(filters): add customizable visible filters setting ([#​2625](https://github.com/booklore-app/booklore/issues/2625)) by [@​acx10](https://github.com/acx10) - Add 10 advanced stats charts ([#​2850](https://github.com/booklore-app/booklore/issues/2850)) by [@​acx10](https://github.com/acx10) - feat(stats): add 5 new user statistics charts ([#​2703](https://github.com/booklore-app/booklore/issues/2703)) by [@​acx10](https://github.com/acx10) - feat(i18n): add Weblate integration and auth translations ([#​2727](https://github.com/booklore-app/booklore/issues/2727)) by [@​acx10](https://github.com/acx10) - feat: add else clause and value modifiers to file naming patterns ([#​2724](https://github.com/booklore-app/booklore/issues/2724)) by [@​acx10](https://github.com/acx10) - feat: add button to fetch metadata from book file ([#​2739](https://github.com/booklore-app/booklore/issues/2739)) by [@​acx10](https://github.com/acx10) - feat(google-books): add optional API key configuration ([#​2629](https://github.com/booklore-app/booklore/issues/2629)) by [@​acx10](https://github.com/acx10) #### ✨ Enhancements - feat(reader): add PDF annotations, Range streaming, and optimized chunk loading ([#​2701](https://github.com/booklore-app/booklore/issues/2701)) by [@​acx10](https://github.com/acx10) - feat(reader): add fullscreen, keyboard shortcuts, search cancel, and go-to-percentage ([#​2698](https://github.com/booklore-app/booklore/issues/2698)) by [@​acx10](https://github.com/acx10) - feat(reader): add dark/light mode toggle and improved close button to PDF reader ([#​2699](https://github.com/booklore-app/booklore/issues/2699)) by [@​acx10](https://github.com/acx10) - feat(kobo-sync): add user scoped 2 way kobo sync ([#​2452](https://github.com/booklore-app/booklore/issues/2452)) by [@​b3nk3](https://github.com/b3nk3) - feat(kobo-sync): Sync Shelves and Magic Shelves to Kobo Tags ([#​2236](https://github.com/booklore-app/booklore/issues/2236)) by [@​xcashy](https://github.com/xcashy) - Redesign series page layout and book list tab ([#​2847](https://github.com/booklore-app/booklore/issues/2847)) by [@​acx10](https://github.com/acx10) - feat(sort): replace compound sort options with atomic fields and multi-sort support ([#​2686](https://github.com/booklore-app/booklore/issues/2686)) by [@​acx10](https://github.com/acx10) - Add moveFiles option to attach/merge and per-book delete in duplicate merger ([#​2833](https://github.com/booklore-app/booklore/issues/2833)) by [@​acx10](https://github.com/acx10) - feat: enhance audit logs with geo flags, relative time, and UX improvements ([#​2760](https://github.com/booklore-app/booklore/issues/2760)) by [@​acx10](https://github.com/acx10) - feat(bookdrop): add ability to poll the bookdrop folder ([#​2768](https://github.com/booklore-app/booklore/issues/2768)) by [@​arjunsrinivasan1997](https://github.com/arjunsrinivasan1997) - feat: add metadata presence filter to magic shelf ([#​2757](https://github.com/booklore-app/booklore/issues/2757)) by [@​acx10](https://github.com/acx10) - feat(upload): add upload progress tracking with progress bar and stats ([#​2640](https://github.com/booklore-app/booklore/issues/2640)) by [@​acx10](https://github.com/acx10) - feat(email): add format selection to email book dialog ([#​2650](https://github.com/booklore-app/booklore/issues/2650)) by [@​acx10](https://github.com/acx10) - feat(pwa): Enable fullscreen mode for Android immersive reading ([#​2649](https://github.com/booklore-app/booklore/issues/2649)) by [@​alondero](https://github.com/alondero) - Add Hungarian and Slovenian language support ([#​2846](https://github.com/booklore-app/booklore/issues/2846)) by [@​acx10](https://github.com/acx10) - fix(library-service): prevent concurrent library scans with a tracking set ([#​2637](https://github.com/booklore-app/booklore/issues/2637)) by [@​balazs-szucs](https://github.com/balazs-szucs) - feat: add configurable sidebar width setting ([#​2749](https://github.com/booklore-app/booklore/issues/2749)) by [@​acx10](https://github.com/acx10) - refactor(download): simplify file download to use browser native handling ([#​2639](https://github.com/booklore-app/booklore/issues/2639)) by [@​acx10](https://github.com/acx10) #### 🎨 UI Tweaks - Add visual polish to book card component ([#​2788](https://github.com/booklore-app/booklore/issues/2788)) by [@​acx10](https://github.com/acx10) - refactor: centralize access-denied card styles into shared mixin ([#​2515](https://github.com/booklore-app/booklore/issues/2515)) by [@​acx10](https://github.com/acx10) #### 🐛 Bug Fixes - fix(auth): resolve DST-related login failure for refresh tokens ([#​2624](https://github.com/booklore-app/booklore/issues/2624)) by [@​acx10](https://github.com/acx10) - Fix Kobo sync HeadersTooLargeException for large libraries ([#​2809](https://github.com/booklore-app/booklore/issues/2809)) by [@​acx10](https://github.com/acx10) - fix(metadata-refresh): Correct metadata update priorities and preserve disabled fields during 'replace all' ([#​2503](https://github.com/booklore-app/booklore/issues/2503)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(metadata-parsers): improve ISBN search logic and fallback strategies for metadata fetching ([#​2502](https://github.com/booklore-app/booklore/issues/2502)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(metadata-update): ensure per-book transaction isolation in bulk updates to prevent race conditions ([#​2536](https://github.com/booklore-app/booklore/issues/2536)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(metadata-refresh): fix filter book shelves by authenticated user logs out the user. ([#​2481](https://github.com/booklore-app/booklore/issues/2481)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix null collection errors for PDFs, audiobooks, and physical books ([#​2817](https://github.com/booklore-app/booklore/issues/2817)) by [@​acx10](https://github.com/acx10) - fix(library-processing): re-fetch library entity after clearing entity manager during rescan ([#​2507](https://github.com/booklore-app/booklore/issues/2507)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(file-move): ensure file moves are rolled back if database update fails ([#​2588](https://github.com/booklore-app/booklore/issues/2588)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(file-move): update empty directory cleanup to handle multiple library paths ([#​2634](https://github.com/booklore-app/booklore/issues/2634)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix CBR/CB7 to CBZ conversion losing track of file path ([#​2835](https://github.com/booklore-app/booklore/issues/2835)) by [@​acx10](https://github.com/acx10) - fix(cbz-reader): CBZ reading regression and optimize ZIP parsing strategy ([#​2593](https://github.com/booklore-app/booklore/issues/2593)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix PDF reader not loading alternate format files ([#​2836](https://github.com/booklore-app/booklore/issues/2836)) by [@​acx10](https://github.com/acx10) - fix(epub-cover-extract): improve cover image extraction with fallback handling ([#​2585](https://github.com/booklore-app/booklore/issues/2585)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(epub-metadata): enhance cover extraction with heuristic fallbacks for manifest and ZIP entries ([#​2636](https://github.com/booklore-app/booklore/issues/2636)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(book-rule-evaluator): fix file type handling and add mapping for specific formats to fix magic shelve based on filetype ([#​2480](https://github.com/booklore-app/booklore/issues/2480)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix magic shelf rule evaluation for numeric comparisons ([#​2795](https://github.com/booklore-app/booklore/issues/2795)) by [@​acx10](https://github.com/acx10) - Fix read status NULL progress handling in rule evaluator ([#​2821](https://github.com/booklore-app/booklore/issues/2821)) by [@​acx10](https://github.com/acx10) - Fix bookdrop race condition processing files before fully written ([#​2785](https://github.com/booklore-app/booklore/issues/2785)) by [@​acx10](https://github.com/acx10) - fix(bookdrop): handle file modifications in Bookdrop event handler ([#​2559](https://github.com/booklore-app/booklore/issues/2559)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(hardcover-sync): Don't send repeated read status to Hardcover.app ([#​2609](https://github.com/booklore-app/booklore/issues/2609)) by [@​PhasecoreX](https://github.com/PhasecoreX) - fix(api): Select correct Hardcover.app ISBN from lookup results ([#​2530](https://github.com/booklore-app/booklore/issues/2530)) by [@​PhasecoreX](https://github.com/PhasecoreX) - fix(ui): fix memory leaks and cascading API calls in metadata editor ([#​2716](https://github.com/booklore-app/booklore/issues/2716)) by [@​acx10](https://github.com/acx10) - fix: replace Quill editor with native HTML rendering for book descriptions ([#​2733](https://github.com/booklore-app/booklore/issues/2733)) by [@​acx10](https://github.com/acx10) - Fix reading stats queries not accounting for timezone ([#​2844](https://github.com/booklore-app/booklore/issues/2844)) by [@​acx10](https://github.com/acx10) - Fix reading session timeline long sessions, tooltip perf, and week mismatch ([#​2848](https://github.com/booklore-app/booklore/issues/2848)) by [@​acx10](https://github.com/acx10) - fix(reading-stats,ui): update heatmap to use local time formatting… ([#​2587](https://github.com/booklore-app/booklore/issues/2587)) by [@​WorldTeacher](https://github.com/WorldTeacher) - fix(select-all): "Mark All" bug and add "Remove from all shelves" bulk action across components ([#​2562](https://github.com/booklore-app/booklore/issues/2562)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(opds): Fix OPDS CBR mime type reporting and strict Archive detection ([#​2592](https://github.com/booklore-app/booklore/issues/2592)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix OPDS shelf filter cartesian product ([#​2837](https://github.com/booklore-app/booklore/issues/2837)) by [@​acx10](https://github.com/acx10) - fix(comic-metadata): fix series grouping bug with external ComicInfo.xml metadata ([#​2385](https://github.com/booklore-app/booklore/issues/2385)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix additional file uploader bugs and improve metadata viewer ([#​2816](https://github.com/booklore-app/booklore/issues/2816)) by [@​acx10](https://github.com/acx10) - Fix PWA offline fallback blocking localhost access when internet is disconnected ([#​2784](https://github.com/booklore-app/booklore/issues/2784)) by [@​acx10](https://github.com/acx10) - fix(audiobook-reader): use preload=none for immediate streaming playback ([#​2518](https://github.com/booklore-app/booklore/issues/2518)) by [@​acx10](https://github.com/acx10) - fix: reset audiobook progress and clear cached progress in UI ([#​2711](https://github.com/booklore-app/booklore/issues/2711)) by [@​acx10](https://github.com/acx10) - Fix cbx reader prev/next book stacking on close ([#​2858](https://github.com/booklore-app/booklore/issues/2858)) by [@​acx10](https://github.com/acx10) - Fix ebook reader header not hiding on mobile tap ([#​2857](https://github.com/booklore-app/booklore/issues/2857)) by [@​acx10](https://github.com/acx10) - fix(reader): enable text copy in ebook reader ([#​2702](https://github.com/booklore-app/booklore/issues/2702)) by [@​acx10](https://github.com/acx10) - Fix CBZ reader scroll position reset in infinite scroll mode ([#​2781](https://github.com/booklore-app/booklore/issues/2781)) by [@​acx10](https://github.com/acx10) - Fix column gap +/- buttons in eBook reader default settings ([#​2780](https://github.com/booklore-app/booklore/issues/2780)) by [@​acx10](https://github.com/acx10) - Fix email provider creation failing due to null shared field ([#​2794](https://github.com/booklore-app/booklore/issues/2794)) by [@​acx10](https://github.com/acx10) - Fix audit logs pagination bug and add URL query param sync ([#​2787](https://github.com/booklore-app/booklore/issues/2787)) by [@​acx10](https://github.com/acx10) - Fix audit log description overflow for bulk metadata refresh ([#​2783](https://github.com/booklore-app/booklore/issues/2783)) by [@​acx10](https://github.com/acx10) - Fix multiple author card menus opening simultaneously ([#​2852](https://github.com/booklore-app/booklore/issues/2852)) by [@​acx10](https://github.com/acx10) - Fix Goodreads label mappings and format config ([#​2779](https://github.com/booklore-app/booklore/issues/2779)) by [@​AlfredSimpson](https://github.com/AlfredSimpson) - fix(ui): encode filter values in query params to handle commas in names ([#​2717](https://github.com/booklore-app/booklore/issues/2717)) by [@​acx10](https://github.com/acx10) - fix(ui): prevent footer submenu from rendering off screen ([#​2714](https://github.com/booklore-app/booklore/issues/2714)) by [@​acx10](https://github.com/acx10) - fix(ui): inline mobile charts submenu to prevent layout overflow ([#​2713](https://github.com/booklore-app/booklore/issues/2713)) by [@​acx10](https://github.com/acx10) - fix(ui): correctly format lubimyczytac external rating link ([#​2491](https://github.com/booklore-app/booklore/issues/2491)) by [@​sebhewelt](https://github.com/sebhewelt) - Fix iconDisplay binding syntax in metadata viewer ([#​2772](https://github.com/booklore-app/booklore/issues/2772)) by [@​WorldTeacher](https://github.com/WorldTeacher) - Fix mobile toolbar overlapping on small screens ([#​2856](https://github.com/booklore-app/booklore/issues/2856)) by [@​acx10](https://github.com/acx10) - Fix book browser header title overflow on mobile ([#​2808](https://github.com/booklore-app/booklore/issues/2808)) by [@​acx10](https://github.com/acx10) - fix(book-browser): resolve footer menu not hiding after navigation back ([#​2626](https://github.com/booklore-app/booklore/issues/2626)) by [@​acx10](https://github.com/acx10) - fix: align frontend Page interfaces with VIA\_DTO serialization format ([#​2751](https://github.com/booklore-app/booklore/issues/2751)) by [@​acx10](https://github.com/acx10) - fix: show provider icons in metadata viewer when only ID is present ([#​2734](https://github.com/booklore-app/booklore/issues/2734)) by [@​acx10](https://github.com/acx10) - fix: hide show-more button when description fits without truncation ([#​2766](https://github.com/booklore-app/booklore/issues/2766)) by [@​acx10](https://github.com/acx10) - fix: use audiobook thumbnail for audiobook entries in notebook ([#​2763](https://github.com/booklore-app/booklore/issues/2763)) by [@​acx10](https://github.com/acx10) - fix: show session numbers in book ([#​2696](https://github.com/booklore-app/booklore/issues/2696)) by [@​WorldTeacher](https://github.com/WorldTeacher) - fix(settings): use boxed Integer for ScrollerConfig.maxItems to allow null ([#​2684](https://github.com/booklore-app/booklore/issues/2684)) by [@​acx10](https://github.com/acx10) - fix(series-multi-select): Fix transparency in series multi select pop-up ([#​2555](https://github.com/booklore-app/booklore/issues/2555)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix: Filter text overwrites on long options ([#​2540](https://github.com/booklore-app/booklore/issues/2540)) by [@​acx10](https://github.com/acx10) - Fix: Lock icons do not stay with publisher and series name input fields ([#​2539](https://github.com/booklore-app/booklore/issues/2539)) by [@​acx10](https://github.com/acx10) - fix(metadata): improve cover errors, reduce metadata fetch count, and hide attach option ([#​2690](https://github.com/booklore-app/booklore/issues/2690)) by [@​acx10](https://github.com/acx10) #### ⚡ Performance - perf: optimize book list API with ETag, delta sync, and IndexedDB caching ([#​2753](https://github.com/booklore-app/booklore/issues/2753)) by [@​acx10](https://github.com/acx10) - perf: enable compact object headers (Project Lilliput) ([#​2755](https://github.com/booklore-app/booklore/issues/2755)) by [@​acx10](https://github.com/acx10) #### 🛠️ Refactoring & Maintenance - refactor: split BookService into BookFileService and BookMetadataManageService ([#​2758](https://github.com/booklore-app/booklore/issues/2758)) by [@​acx10](https://github.com/acx10) - chore: fix memory leaks, add aria-labels, improve type safety and logging ([#​2764](https://github.com/booklore-app/booklore/issues/2764)) by [@​acx10](https://github.com/acx10) - chore: add caching, validation, lazy routes, refresh rate limiting, JaCoCo, and cleanup ([#​2762](https://github.com/booklore-app/booklore/issues/2762)) by [@​acx10](https://github.com/acx10) - perf: strip unused fields from book list API response ([#​2741](https://github.com/booklore-app/booklore/issues/2741)) by [@​acx10](https://github.com/acx10) - perf(epub): Replace linear manifest scans with HashMaps in EPUB reader ([#​2598](https://git…
dgalanberasaluce
pushed a commit
to dgalanberasaluce/infra-personal
that referenced
this pull request
Feb 27, 2026
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/booklore-app/booklore](https://github.com/booklore-app/booklore) | major | `v1.18.5` → `v2.0.3` | --- ### Release Notes <details> <summary>booklore-app/booklore (ghcr.io/booklore-app/booklore)</summary> ### [`v2.0.3`](https://github.com/booklore-app/booklore/releases/tag/v2.0.3) [Compare Source](booklore-app/booklore@v2.0.2...v2.0.3) #### 🌟 What's New in v2.0.3 #### ✨ Enhancements - Add detach book file feature and fix attach not respecting move preference ([#​3024](booklore-app/booklore#3024)) by [@​acx10](https://github.com/acx10) #### 🎨 UI Tweaks - Use app-tag component with operation-based colors for audit log actions ([#​3029](booklore-app/booklore#3029)) by [@​acx10](https://github.com/acx10) #### 🐛 Bug Fixes - Fix bookdrop metadata picker bugs ([#​3032](booklore-app/booklore#3032)) by [@​acx10](https://github.com/acx10) - Fix sort resetting to default when toggling series collapse ([#​3031](booklore-app/booklore#3031)) by [@​acx10](https://github.com/acx10) - Disable horizontal swipe navigation in CBX infinite/long strip scroll modes ([#​3026](booklore-app/booklore#3026)) by [@​acx10](https://github.com/acx10) - Fix trailing spaces in metadata fields ([#​3025](booklore-app/booklore#3025)) by [@​acx10](https://github.com/acx10) - fix(http): enable restricted headers for DNS rebinding protection and improve host header handling ([#​3022](booklore-app/booklore#3022)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix cover not persisting after metadata search copy ([#​3003](booklore-app/booklore#3003)) by [@​acx10](https://github.com/acx10) - Fix cover preview overlay stuck after mobile back gesture ([#​3002](booklore-app/booklore#3002)) by [@​acx10](https://github.com/acx10) - Fix attach file without move when source/target have different library paths ([#​2999](booklore-app/booklore#2999)) by [@​acx10](https://github.com/acx10) - Fix stale selection state and shelf view not updating after edits ([#​2996](booklore-app/booklore#2996)) by [@​acx10](https://github.com/acx10) - Fix bookdrop notification Hibernate NPE ([#​2993](booklore-app/booklore#2993)) by [@​acx10](https://github.com/acx10) - Fix audiobook chapter extraction for M4B/M4A formats ([#​2976](booklore-app/booklore#2976)) by [@​acx10](https://github.com/acx10) - Fix navigation links in the README file ([#​2964](booklore-app/booklore#2964)) by [@​vkhvostov](https://github.com/vkhvostov) - Apply content restrictions to OPDS and Komga feeds ([#​2937](booklore-app/booklore#2937)) by [@​acx10](https://github.com/acx10) #### 📦 Dependencies - Bump rollup to fix path traversal CVE ([#​3004](booklore-app/booklore#3004)) by [@​acx10](https://github.com/acx10) #### 🛠️ Refactoring & Maintenance - Translations update from Hosted Weblate ([#​2990](booklore-app/booklore#2990)) by [@​acx10](https://github.com/acx10) - Translations update from Hosted Weblate ([#​2956](booklore-app/booklore#2956)) by [@​acx10](https://github.com/acx10) #### 🐳 Docker Images - **Docker Hub:** `booklore/booklore:v2.0.3` - **GitHub Container Registry:** `ghcr.io/booklore-app/booklore:v2.0.3` **Full Changelog**: <booklore-app/booklore@v2.0.2...v2.0.3> ### [`v2.0.2`](https://github.com/booklore-app/booklore/releases/tag/v2.0.2) [Compare Source](booklore-app/booklore@v2.0.1...v2.0.2) #### 🌟 What's New in v2.0.2 #### ✨ Enhancements - Use square covers for audiobook-only libraries ([#​2945](booklore-app/booklore#2945)) by [@​acx10](https://github.com/acx10) #### 🐛 Bug Fixes - Fix Kobo sync URLs missing port when Host header omits it ([#​2986](booklore-app/booklore#2986)) by [@​acx10](https://github.com/acx10) - Allow any file format for supplementary file uploads ([#​2954](booklore-app/booklore#2954)) by [@​acx10](https://github.com/acx10) - Fix wrong icon on bookdrop finalize confirmation button ([#​2951](booklore-app/booklore#2951)) by [@​acx10](https://github.com/acx10) - Fix Docker build for Alpine 3.23 unrar removal ([#​2950](booklore-app/booklore#2950)) by [@​acx10](https://github.com/acx10) - Fix finished date update on physical books ([#​2949](booklore-app/booklore#2949)) by [@​acx10](https://github.com/acx10) - Fix CBR/RAR5 support via unrar CLI fallback ([#​2948](booklore-app/booklore#2948)) by [@​acx10](https://github.com/acx10) - Fix metadata weights and provider fields DTO mismatch with UI ([#​2947](booklore-app/booklore#2947)) by [@​acx10](https://github.com/acx10) - Fix off-center info button on physical book cards ([#​2946](booklore-app/booklore#2946)) by [@​acx10](https://github.com/acx10) - Fix settings deserialization failure on upgrade ([#​2928](booklore-app/booklore#2928)) by [@​acx10](https://github.com/acx10) - Fix i18n fallback for languages with empty translation strings ([#​2898](booklore-app/booklore#2898)) by [@​acx10](https://github.com/acx10) #### 🛠️ Refactoring & Maintenance - refactor(misc): Harden request handling, tighten defaults, and pin CI deps ([#​2878](booklore-app/booklore#2878)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Smarter AUTO\_DETECT for audiobook series folders and multi-part files ([#​2900](booklore-app/booklore#2900)) by [@​acx10](https://github.com/acx10) #### 🐳 Docker Images - **Docker Hub:** `booklore/booklore:v2.0.2` - **GitHub Container Registry:** `ghcr.io/booklore-app/booklore:v2.0.2` **Full Changelog**: <booklore-app/booklore@v2.0.1...v2.0.2> ### [`v2.0.1`](https://github.com/booklore-app/booklore/releases/tag/v2.0.1) [Compare Source](booklore-app/booklore@v2.0.0...v2.0.1) #### 🌟 What's New in v2.0.1 #### 🐛 Bug Fixes - Fix max upload size description to include all file formats ([#​2894](booklore-app/booklore#2894)) by [@​acx10](https://github.com/acx10) - Fix magic shelf physical book filter and polish UI ([#​2888](booklore-app/booklore#2888)) by [@​acx10](https://github.com/acx10) - Fix metadata settings not saving due to null deserialization error ([#​2886](booklore-app/booklore#2886)) by [@​acx10](https://github.com/acx10) - Fix Kobo download/image URLs using wrong port behind reverse proxy ([#​2875](booklore-app/booklore#2875)) by [@​acx10](https://github.com/acx10) - Fix app crash on startup when /bookdrop volume is not mounted ([#​2873](booklore-app/booklore#2873)) by [@​acx10](https://github.com/acx10) #### 🛠️ Refactoring & Maintenance - Hide sidecar tab for physical books ([#​2887](booklore-app/booklore#2887)) by [@​acx10](https://github.com/acx10) - Translations update from Hosted Weblate ([#​2866](booklore-app/booklore#2866)) by [@​acx10](https://github.com/acx10) #### 🐳 Docker Images - **Docker Hub:** `booklore/booklore:v2.0.1` - **GitHub Container Registry:** `ghcr.io/booklore-app/booklore:v2.0.1` **Full Changelog**: <booklore-app/booklore@v2.0.0...v2.0.1> ### [`v2.0.0`](https://github.com/booklore-app/booklore/releases/tag/v2.0.0) [Compare Source](booklore-app/booklore@v1.18.5...v2.0.0) #### 🌟 What's New in v2.0.0 This is the biggest Booklore release yet, with nearly 200 commits touching every part of the application: - **Multi-Format Book Support & Audiobooks**: Books can now have multiple file formats (EPUB, PDF, CBZ, etc.) attached to a single entry. Full audiobook support is here with a dedicated player, streaming playback, narrator filtering, and session tracking. - **Duplicate Book Detection & Merge**: Booklore can now detect duplicate books across your library. A new merge tool lets you combine duplicates, choose which formats to keep, and optionally move files, all without losing metadata. - **Author Metadata via Audnexus**: Author pages now pull rich metadata (bios, images) from the Audnexus API, with a dedicated author browser, detail page, and editor. - **Series Browser**: A brand new series browser page with search, filtering, sorting, and resizable cards for browsing your series collection at a glance. - **Annotation Notebook**: All your highlights, notes, and bookmarks are now collected in a searchable, paginated notebook view. - **Audit Log System**: Admins can now see a full audit trail of significant actions (user management, library changes, metadata operations) with geo flags, relative timestamps, and filterable logs. - **Bidirectional Kobo Sync**: Full two-way reading progress sync with Kobo devices, plus shelves and magic shelves now sync as Kobo tags. - **Cascading Sidebar Filters**: Filters now cascade, so selecting an author narrows available series, genres, etc. You can also customize which filters are visible. - **10+ New Statistics Charts**: A massive expansion of the stats page with reading heatmaps, distribution charts, completion races, and more. - **PDF Annotations & Reader Upgrades**: The PDF reader now supports annotations, dark/light mode toggle, and Range streaming. The ebook reader gains fullscreen, keyboard shortcuts, and go-to-percentage. The CBX reader adds fullscreen, slideshow, RTL, and long strip mode. - **Sidecar Metadata Files**: Booklore can now read and write `.metadata.json` sidecar files alongside your books for portable metadata storage. - **Extended Comic Metadata**: Full ComicInfo.xml support with a dedicated comic metadata picker and write-back to CBZ/PDF files. - **Internationalization via Weblate**: Booklore is now fully translatable with Transloco and Weblate integration. Ships with 15+ languages including Hungarian, Slovenian, Croatian, Swedish, Chinese, and Japanese. - **Java 25, Spring Boot 4, Gradle 9**: The entire backend has been upgraded to the latest stack. Nginx has been removed; Angular is now served directly from Spring Boot. - **Login Rate Limiting**: Brute-force protection on the login endpoint. Plus new age and content rating support for restricted libraries. - **Performance**: Book list API optimized with ETag caching, delta sync, and IndexedDB. Project Lilliput compact object headers reduce heap usage. #### 🚀 New Features - Introduce multi-format book support, including audiobooks ([#​2486](booklore-app/booklore#2486)) by [@​acx10](https://github.com/acx10) - Add duplicate book detection/merge and fix format-related data loss ([#​2820](booklore-app/booklore#2820)) by [@​acx10](https://github.com/acx10) - Add author metadata via Audnexus with browser, detail, and editor pages ([#​2843](booklore-app/booklore#2843)) by [@​acx10](https://github.com/acx10) - feat: add series browser page ([#​2771](booklore-app/booklore#2771)) by [@​acx10](https://github.com/acx10) - feat: add annotation notebook with server-side pagination ([#​2736](booklore-app/booklore#2736)) by [@​acx10](https://github.com/acx10) - feat: add audit log system for tracking admin-significant actions ([#​2759](booklore-app/booklore#2759)) by [@​acx10](https://github.com/acx10) - Add bidirectional Kobo reading progress sync ([#​2791](booklore-app/booklore#2791)) by [@​acx10](https://github.com/acx10) - feat(filters): implement cascading sidebar filters ([#​2616](booklore-app/booklore#2616)) by [@​acx10](https://github.com/acx10) - feat(cbx-reader): add fullscreen, slideshow, RTL, long strip mode and keyboard shortcuts ([#​2632](booklore-app/booklore#2632)) by [@​acx10](https://github.com/acx10) - feat(sidecar): add sidecar JSON metadata file support ([#​2657](booklore-app/booklore#2657)) by [@​acx10](https://github.com/acx10) - feat(comic-metadata): add extended comic metadata support ([#​2654](booklore-app/booklore#2654)) by [@​acx10](https://github.com/acx10) - feat(i18n): add Transloco translation framework with EN/ES and 7 language scaffolds ([#​2681](booklore-app/booklore#2681)) by [@​acx10](https://github.com/acx10) - feat(api, build): Upgrade to Java 25, Gradle 9, and Spring Boot 4, Jackson 3 ([#​2597](booklore-app/booklore#2597)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Remove nginx and serve Angular directly from Spring Boot ([#​2662](booklore-app/booklore#2662)) by [@​acx10](https://github.com/acx10) - feat: add login rate limiting to prevent brute-force attacks ([#​2761](booklore-app/booklore#2761)) by [@​acx10](https://github.com/acx10) - feat(content-restrictions): add age rating and content rating support ([#​2619](booklore-app/booklore#2619)) by [@​acx10](https://github.com/acx10) - feat(sorting): add multi-field sorting support ([#​2628](booklore-app/booklore#2628)) by [@​acx10](https://github.com/acx10) - feat(metadata): add custom metadata write to file support for moods, tags, ratings, and external IDs in PDF, and CBZ ([#​2552](booklore-app/booklore#2552)) by [@​balazs-szucs](https://github.com/balazs-szucs) - feat(metadata) Save basic metadata to EPUB file - Bonus use Calibre Custom Columns for importing metadata. ([#​1879](booklore-app/booklore#1879)) by [@​jadehawk](https://github.com/jadehawk) - feat: add grouped field dropdown and composite fields to magic shelf ([#​2750](booklore-app/booklore#2750)) by [@​acx10](https://github.com/acx10) - feat(filters): add customizable visible filters setting ([#​2625](booklore-app/booklore#2625)) by [@​acx10](https://github.com/acx10) - Add 10 advanced stats charts ([#​2850](booklore-app/booklore#2850)) by [@​acx10](https://github.com/acx10) - feat(stats): add 5 new user statistics charts ([#​2703](booklore-app/booklore#2703)) by [@​acx10](https://github.com/acx10) - feat(i18n): add Weblate integration and auth translations ([#​2727](booklore-app/booklore#2727)) by [@​acx10](https://github.com/acx10) - feat: add else clause and value modifiers to file naming patterns ([#​2724](booklore-app/booklore#2724)) by [@​acx10](https://github.com/acx10) - feat: add button to fetch metadata from book file ([#​2739](booklore-app/booklore#2739)) by [@​acx10](https://github.com/acx10) - feat(google-books): add optional API key configuration ([#​2629](booklore-app/booklore#2629)) by [@​acx10](https://github.com/acx10) #### ✨ Enhancements - feat(reader): add PDF annotations, Range streaming, and optimized chunk loading ([#​2701](booklore-app/booklore#2701)) by [@​acx10](https://github.com/acx10) - feat(reader): add fullscreen, keyboard shortcuts, search cancel, and go-to-percentage ([#​2698](booklore-app/booklore#2698)) by [@​acx10](https://github.com/acx10) - feat(reader): add dark/light mode toggle and improved close button to PDF reader ([#​2699](booklore-app/booklore#2699)) by [@​acx10](https://github.com/acx10) - feat(kobo-sync): add user scoped 2 way kobo sync ([#​2452](booklore-app/booklore#2452)) by [@​b3nk3](https://github.com/b3nk3) - feat(kobo-sync): Sync Shelves and Magic Shelves to Kobo Tags ([#​2236](booklore-app/booklore#2236)) by [@​xcashy](https://github.com/xcashy) - Redesign series page layout and book list tab ([#​2847](booklore-app/booklore#2847)) by [@​acx10](https://github.com/acx10) - feat(sort): replace compound sort options with atomic fields and multi-sort support ([#​2686](booklore-app/booklore#2686)) by [@​acx10](https://github.com/acx10) - Add moveFiles option to attach/merge and per-book delete in duplicate merger ([#​2833](booklore-app/booklore#2833)) by [@​acx10](https://github.com/acx10) - feat: enhance audit logs with geo flags, relative time, and UX improvements ([#​2760](booklore-app/booklore#2760)) by [@​acx10](https://github.com/acx10) - feat(bookdrop): add ability to poll the bookdrop folder ([#​2768](booklore-app/booklore#2768)) by [@​arjunsrinivasan1997](https://github.com/arjunsrinivasan1997) - feat: add metadata presence filter to magic shelf ([#​2757](booklore-app/booklore#2757)) by [@​acx10](https://github.com/acx10) - feat(upload): add upload progress tracking with progress bar and stats ([#​2640](booklore-app/booklore#2640)) by [@​acx10](https://github.com/acx10) - feat(email): add format selection to email book dialog ([#​2650](booklore-app/booklore#2650)) by [@​acx10](https://github.com/acx10) - feat(pwa): Enable fullscreen mode for Android immersive reading ([#​2649](booklore-app/booklore#2649)) by [@​alondero](https://github.com/alondero) - Add Hungarian and Slovenian language support ([#​2846](booklore-app/booklore#2846)) by [@​acx10](https://github.com/acx10) - fix(library-service): prevent concurrent library scans with a tracking set ([#​2637](booklore-app/booklore#2637)) by [@​balazs-szucs](https://github.com/balazs-szucs) - feat: add configurable sidebar width setting ([#​2749](booklore-app/booklore#2749)) by [@​acx10](https://github.com/acx10) - refactor(download): simplify file download to use browser native handling ([#​2639](booklore-app/booklore#2639)) by [@​acx10](https://github.com/acx10) #### 🎨 UI Tweaks - Add visual polish to book card component ([#​2788](booklore-app/booklore#2788)) by [@​acx10](https://github.com/acx10) - refactor: centralize access-denied card styles into shared mixin ([#​2515](booklore-app/booklore#2515)) by [@​acx10](https://github.com/acx10) #### 🐛 Bug Fixes - fix(auth): resolve DST-related login failure for refresh tokens ([#​2624](booklore-app/booklore#2624)) by [@​acx10](https://github.com/acx10) - Fix Kobo sync HeadersTooLargeException for large libraries ([#​2809](booklore-app/booklore#2809)) by [@​acx10](https://github.com/acx10) - fix(metadata-refresh): Correct metadata update priorities and preserve disabled fields during 'replace all' ([#​2503](booklore-app/booklore#2503)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(metadata-parsers): improve ISBN search logic and fallback strategies for metadata fetching ([#​2502](booklore-app/booklore#2502)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(metadata-update): ensure per-book transaction isolation in bulk updates to prevent race conditions ([#​2536](booklore-app/booklore#2536)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(metadata-refresh): fix filter book shelves by authenticated user logs out the user. ([#​2481](booklore-app/booklore#2481)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix null collection errors for PDFs, audiobooks, and physical books ([#​2817](booklore-app/booklore#2817)) by [@​acx10](https://github.com/acx10) - fix(library-processing): re-fetch library entity after clearing entity manager during rescan ([#​2507](booklore-app/booklore#2507)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(file-move): ensure file moves are rolled back if database update fails ([#​2588](booklore-app/booklore#2588)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(file-move): update empty directory cleanup to handle multiple library paths ([#​2634](booklore-app/booklore#2634)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix CBR/CB7 to CBZ conversion losing track of file path ([#​2835](booklore-app/booklore#2835)) by [@​acx10](https://github.com/acx10) - fix(cbz-reader): CBZ reading regression and optimize ZIP parsing strategy ([#​2593](booklore-app/booklore#2593)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix PDF reader not loading alternate format files ([#​2836](booklore-app/booklore#2836)) by [@​acx10](https://github.com/acx10) - fix(epub-cover-extract): improve cover image extraction with fallback handling ([#​2585](booklore-app/booklore#2585)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(epub-metadata): enhance cover extraction with heuristic fallbacks for manifest and ZIP entries ([#​2636](booklore-app/booklore#2636)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(book-rule-evaluator): fix file type handling and add mapping for specific formats to fix magic shelve based on filetype ([#​2480](booklore-app/booklore#2480)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix magic shelf rule evaluation for numeric comparisons ([#​2795](booklore-app/booklore#2795)) by [@​acx10](https://github.com/acx10) - Fix read status NULL progress handling in rule evaluator ([#​2821](booklore-app/booklore#2821)) by [@​acx10](https://github.com/acx10) - Fix bookdrop race condition processing files before fully written ([#​2785](booklore-app/booklore#2785)) by [@​acx10](https://github.com/acx10) - fix(bookdrop): handle file modifications in Bookdrop event handler ([#​2559](booklore-app/booklore#2559)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(hardcover-sync): Don't send repeated read status to Hardcover.app ([#​2609](booklore-app/booklore#2609)) by [@​PhasecoreX](https://github.com/PhasecoreX) - fix(api): Select correct Hardcover.app ISBN from lookup results ([#​2530](booklore-app/booklore#2530)) by [@​PhasecoreX](https://github.com/PhasecoreX) - fix(ui): fix memory leaks and cascading API calls in metadata editor ([#​2716](booklore-app/booklore#2716)) by [@​acx10](https://github.com/acx10) - fix: replace Quill editor with native HTML rendering for book descriptions ([#​2733](booklore-app/booklore#2733)) by [@​acx10](https://github.com/acx10) - Fix reading stats queries not accounting for timezone ([#​2844](booklore-app/booklore#2844)) by [@​acx10](https://github.com/acx10) - Fix reading session timeline long sessions, tooltip perf, and week mismatch ([#​2848](booklore-app/booklore#2848)) by [@​acx10](https://github.com/acx10) - fix(reading-stats,ui): update heatmap to use local time formatting… ([#​2587](booklore-app/booklore#2587)) by [@​WorldTeacher](https://github.com/WorldTeacher) - fix(select-all): "Mark All" bug and add "Remove from all shelves" bulk action across components ([#​2562](booklore-app/booklore#2562)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(opds): Fix OPDS CBR mime type reporting and strict Archive detection ([#​2592](booklore-app/booklore#2592)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix OPDS shelf filter cartesian product ([#​2837](booklore-app/booklore#2837)) by [@​acx10](https://github.com/acx10) - fix(comic-metadata): fix series grouping bug with external ComicInfo.xml metadata ([#​2385](booklore-app/booklore#2385)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix additional file uploader bugs and improve metadata viewer ([#​2816](booklore-app/booklore#2816)) by [@​acx10](https://github.com/acx10) - Fix PWA offline fallback blocking localhost access when internet is disconnected ([#​2784](booklore-app/booklore#2784)) by [@​acx10](https://github.com/acx10) - fix(audiobook-reader): use preload=none for immediate streaming playback ([#​2518](booklore-app/booklore#2518)) by [@​acx10](https://github.com/acx10) - fix: reset audiobook progress and clear cached progress in UI ([#​2711](booklore-app/booklore#2711)) by [@​acx10](https://github.com/acx10) - Fix cbx reader prev/next book stacking on close ([#​2858](booklore-app/booklore#2858)) by [@​acx10](https://github.com/acx10) - Fix ebook reader header not hiding on mobile tap ([#​2857](booklore-app/booklore#2857)) by [@​acx10](https://github.com/acx10) - fix(reader): enable text copy in ebook reader ([#​2702](booklore-app/booklore#2702)) by [@​acx10](https://github.com/acx10) - Fix CBZ reader scroll position reset in infinite scroll mode ([#​2781](booklore-app/booklore#2781)) by [@​acx10](https://github.com/acx10) - Fix column gap +/- buttons in eBook reader default settings ([#​2780](booklore-app/booklore#2780)) by [@​acx10](https://github.com/acx10) - Fix email provider creation failing due to null shared field ([#​2794](booklore-app/booklore#2794)) by [@​acx10](https://github.com/acx10) - Fix audit logs pagination bug and add URL query param sync ([#​2787](booklore-app/booklore#2787)) by [@​acx10](https://github.com/acx10) - Fix audit log description overflow for bulk metadata refresh ([#​2783](booklore-app/booklore#2783)) by [@​acx10](https://github.com/acx10) - Fix multiple author card menus opening simultaneously ([#​2852](booklore-app/booklore#2852)) by [@​acx10](https://github.com/acx10) - Fix Goodreads label mappings and format config ([#​2779](booklore-app/booklore#2779)) by [@​AlfredSimpson](https://github.com/AlfredSimpson) - fix(ui): encode filter values in query params to handle commas in names ([#​2717](booklore-app/booklore#2717)) by [@​acx10](https://github.com/acx10) - fix(ui): prevent footer submenu from rendering off screen ([#​2714](booklore-app/booklore#2714)) by [@​acx10](https://github.com/acx10) - fix(ui): inline mobile charts submenu to prevent layout overflow ([#​2713](booklore-app/booklore#2713)) by [@​acx10](https://github.com/acx10) - fix(ui): correctly format lubimyczytac external rating link ([#​2491](booklore-app/booklore#2491)) by [@​sebhewelt](https://github.com/sebhewelt) - Fix iconDisplay binding syntax in metadata viewer ([#​2772](booklore-app/booklore#2772)) by [@​WorldTeacher](https://github.com/WorldTeacher) - Fix mobile toolbar overlapping on small screens ([#​2856](booklore-app/booklore#2856)) by [@​acx10](https://github.com/acx10) - Fix book browser header title overflow on mobile ([#​2808](booklore-app/booklore#2808)) by [@​acx10](https://github.com/acx10) - fix(book-browser): resolve footer menu not hiding after navigation back ([#​2626](booklore-app/booklore#2626)) by [@​acx10](https://github.com/acx10) - fix: align frontend Page interfaces with VIA\_DTO serialization format ([#​2751](booklore-app/booklore#2751)) by [@​acx10](https://github.com/acx10) - fix: show provider icons in metadata viewer when only ID is present ([#​2734](booklore-app/booklore#2734)) by [@​acx10](https://github.com/acx10) - fix: hide show-more button when description fits without truncation ([#​2766](booklore-app/booklore#2766)) by [@​acx10](https://github.com/acx10) - fix: use audiobook thumbnail for audiobook entries in notebook ([#​2763](booklore-app/booklore#2763)) by [@​acx10](https://github.com/acx10) - fix: show session numbers in book ([#​2696](booklore-app/booklore#2696)) by [@​WorldTeacher](https://github.com/WorldTeacher) - fix(settings): use boxed Integer for ScrollerConfig.maxItems to allow null ([#​2684](booklore-app/booklore#2684)) by [@​acx10](https://github.com/acx10) - fix(series-multi-select): Fix transparency in series multi select pop-up ([#​2555](booklore-app/booklore#2555)) by [@​balazs-szucs](https://github.com/balazs-szucs) - Fix: Filter text overwrites on long options ([#​2540](booklore-app/booklore#2540)) by [@​acx10](https://github.com/acx10) - Fix: Lock icons do not stay with publisher and series name input fields ([#​2539](booklore-app/booklore#2539)) by [@​acx10](https://github.com/acx10) - fix(metadata): improve cover errors, reduce metadata fetch count, and hide attach option ([#​2690](booklore-app/booklore#2690)) by [@​acx10](https://github.com/acx10) #### ⚡ Performance - perf: optimize book list API with ETag, delta sync, and IndexedDB caching ([#​2753](booklore-app/booklore#2753)) by [@​acx10](https://github.com/acx10) - perf: enable compact object headers (Project Lilliput) ([#​2755](booklore-app/booklore#2755)) by [@​acx10](https://github.com/acx10) #### 🛠️ Refactoring & Maintenance - refactor: split BookService into BookFileService and BookMetadataManageService ([#​2758](booklore-app/booklore#2758)) by [@​acx10](https://github.com/acx10) - chore: fix memory leaks, add aria-labels, improve type safety and logging ([#​2764](booklore-app/booklore#2764)) by [@​acx10](https://github.com/acx10) - chore: add caching, validation, lazy routes, refresh rate limiting, JaCoCo, and cleanup ([#​2762](booklore-app/booklore#2762)) by [@​acx10](https://github.com/acx10) - perf: strip unused fields from book list API response ([#​2741](booklore-app/booklore#2741)) by [@​acx10](https://github.com/acx10) - perf(epub): Replace linear manifest scans with HashMaps in EPUB reader ([#​2598](booklore-app/booklore#2598)) by [@​balazs-szucs](https://github.com/balazs-szucs) - feat(metadata): return full metadata from parsers instead of previews ([#​2689](booklore-app/booklore#2689)) by [@​acx10](https://github.com/acx10) - feat: comic metadata picker, lazy-load providers, and UI improvements ([#​2679](booklore-app/booklore#2679)) by [@​acx10](https://github.com/acx10) - Add complete translations for all supported languages ([#​2831](booklore-app/booklore#2831)) by [@​acx10](https://github.com/acx10) - Add Hungarian and Slovenian language support ([#​2846](booklore-app/booklore#2846)) by [@​acx10](https://github.com/acx10) - Add Croatian and Swedish translations for login page ([#​2786](booklore-app/booklore#2786)) by [@​acx10](https://github.com/acx10) - feat: add i18n translations for stats, pdf reader, magic shelf, and remaining components (en/es) ([#​2742](booklore-app/booklore#2742)) by [@​acx10](https://github.com/acx10) - feat: add i18n translations for book components, services, and readers (en/es) ([#​2738](booklore-app/booklore#2738)) by [@​acx10](https://github.com/acx10) - fix(i18n): dynamic sidebar translations and UI font normalization ([#​2683](booklore-app/booklore#2683)) by [@​acx10](https://github.com/acx10) - feat: disable PDF printing for users without download permission ([#​2737](booklore-app/booklore#2737)) by [@​acx10](https://github.com/acx10) - feat(ui): add file name column to table view and include filename in search ([#​2712](booklore-app/booklore#2712)) by [@​acx10](https://github.com/acx10) - feat(ui): provide hyperlinks for books as book cards in grid view ([#​2500](booklore-app/booklore#2500)) by [@​berb](https://github.com/berb) - feat(ui): Add sort by filePath ([#​1180](booklore-app/booklore#1180) and [#​2364](https://github.com/booklore-app/booklore/issues/2364)) ([#​2512](https://github.com/booklore-app/booklore/issues/2512)) by [@​chiguirepower](https://github.com/chiguirepower) - feat(icons): Made icons for libraries and shelves optional with no default icons. ([#​2599](https://github.com/booklore-app/booklore/issues/2599)) by [@​arthurgiroux](https://github.com/arthurgiroux) - fix(comicvine): add fallback to issue detail endpoint for missing creator credits ([#​2694](https://github.com/booklore-app/booklore/issues/2694)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(epub-metadata): enhance cover extraction with heuristic fallbacks for manifest and ZIP entries ([#​2636](booklore-app/booklore#2636)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(metadata-match): Fix metadata quality calculation to properly handle locked fields ([#​2513](https://github.com/booklore-app/booklore/issues/2513)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(ui): reload shelves when enabling Kobo sync ([#​2715](https://github.com/booklore-app/booklore/issues/2715)) by [@​acx10](https://github.com/acx10) - fix(ui): standardize button labels and styles across components ([#​2560](https://github.com/booklore-app/booklore/issues/2560)) by [@​balazs-szucs](https://github.com/balazs-szucs) - chore: redesign README for cleaner layout and visual polish ([#​2728](https://github.com/booklore-app/booklore/issues/2728)) by [@​acx10](https://github.com/acx10) - fix: make README logo visible in GitHub light mode ([#​2756](https://github.com/booklore-app/booklore/issues/2756)) by [@​acx10](https://github.com/acx10) - chore: clean up PR template and contributing guide ([#​2660](https://github.com/booklore-app/booklore/issues/2660)) by [@​acx10](https://github.com/acx10) - fix(file naming): add leading zero to series index ([#​2642](https://github.com/booklore-app/booklore/issues/2642)) by [@​WorldTeacher](https://github.com/WorldTeacher) - Update viewport meta tag to prevent auto-zoom on iOS when entering in… ([#​2620](https://github.com/booklore-app/booklore/issues/2620)) by [@​jmswangit](https://github.com/jmswangit) - test(API): add missing tests for BookMapperV2 ([#​2495](https://github.com/booklore-app/booklore/issues/2495)) by [@​piffio](https://github.com/piffio) - fix(audiobook-reader): use preload=none with explicit load() for faster streaming ([#​2520](https://github.com/booklore-app/booklore/issues/2520)) by [@​acx10](https://github.com/acx10) - fix(ui): clean cached properties ([#​2499](https://github.com/booklore-app/booklore/issues/2499)) by [@​piffio](https://github.com/piffio) - fix(additional-file-uploader): add file size validation with UI feedback ([#​2516](https://github.com/booklore-app/booklore/issues/2516)) by [@​acx10](https://github.com/acx10) - fix(os\_x-conversion): ignore \_\_MACOSX directory for conversions ([#​2479](https://github.com/booklore-app/booklore/issues/2479)) by [@​balazs-szucs](https://github.com/balazs-szucs) - fix(series-page): add missing overlay preference service to book card ([#​2466](https://github.com/booklore-app/booklore/issues/2466)) by [@​xcashy](https://github.com/xcashy) - fix(docker): add build and gradle directories to volumes in docker compose ([#​2459](https://github.com/booklore-app/booklore/issues/2459)) by [@​balazs-szucs](https://github.com/balazs-szucs) #### 📦 Dependencies - chore(deps): bump org.springframework.boot from 4.0.2 to 4.0.3 in /booklore-api in the gradle-dependencies group ([#​2813](https://github.com/booklore-app/booklore/issues/2813)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump the npm-dependencies group in /booklore-ui with 15 updates ([#​2814](https://github.com/booklore-app/booklore/issues/2814)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump the npm-dependencies group across 1 directory with 18 updates ([#​2687](https://github.com/booklore-app/booklore/issues/2687)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump the npm-dependencies group in /booklore-ui with 13 updates ([#​2721](https://github.com/booklore-app/booklore/issues/2721)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump the npm-dependencies group in /booklore-ui with 20 updates ([#​2542](https://github.com/booklore-app/booklore/issues/2542)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump the gradle-dependencies group across 1 directory with 7 updates ([#​2659](https://github.com/booklore-app/booklore/issues/2659)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump the gradle-dependencies group in /booklore-api with 2 updates ([#​2720](https://github.com/booklore-app/booklore/issues/2720)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump tar from 7.5.7 to 7.5.9 in /booklore-ui ([#​2805](https://github.com/booklore-app/booklore/issues/2805)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump tar from 7.5.6 to 7.5.7 in /booklore-ui ([#​2534](https://github.com/booklore-app/booklore/issues/2534)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump hono from 4.11.9 to 4.12.0 in /booklore-ui ([#​2815](https://github.com/booklore-app/booklore/issues/2815)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump qs from 6.14.1 to 6.14.2 in /booklore-ui ([#​2722](https://github.com/booklore-app/booklore/issues/2722)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump [@​modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/sdk) and [@​angular/cli](https://github.com/angular/cli) in /booklore-ui ([#​2612](https://github.com/booklore-app/booklore/issues/2612)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) - chore(deps): bump actions/setup-node from 4 to 6 ([#​2573](https://github.com/booklore-app/booklore/issues/2573)) by @​[dependabot\[bot\]](https://github.com/apps/dependabot) #### ⚙️ CI/CD - ci: move Angular/Gradle builds to native CI steps to eliminate QEMU emulation ([#​2705](https://github.com/booklore-app/booklore/issues/2705)) by [@​acx10](https://github.com/acx10) - chore: add performance label to release drafter categories ([#​2754](https://github.com/booklore-app/booklore/issues/2754)) by [@​acx10](https://github.com/acx10) #### 🐳 Docker Images - **Docker Hub:** `booklore/booklore:v2.0.0` - **GitHub Container Registry:** `ghcr.io/booklore-app/booklore:v2.0.0` **Full Changelog**: <booklore-app/booklore@v1.18.5...v2.0.0> #### 📸 Screenshots <img width="750" alt="Book browser with audiobook library and cascading sidebar filters" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/book-browser-audiobooks-library.png" /> <img width="750" alt="Book detail page with multi-format support and alternative formats" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/book-detail-multi-format.png" /> <img width="300" alt="Audiobook player with streaming playback" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/audiobook-player.png" /> <img width="300" alt="Ebook reader" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/ebook-reader.png" /> <img width="750" alt="CBX comic reader with fullscreen, slideshow, RTL, and long strip mode" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/cbx-comic-reader.png" /> <img width="750" alt="Annotation notebook with highlights, notes, and bookmarks" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/annotation-notebook.png" /> <img width="750" alt="Author browser with Audnexus metadata" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/author-browser.png" /> <img width="750" alt="Series browser with search, filter, and sort" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/series-browser.png" /> <img width="500" alt="Reading Clock statistics chart" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/reading-clock-stats.png" /> <img width="750" alt="Reading Survival Curve and Book Length Sweet Spot charts" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/reading-survival-book-length-charts.png" /> <img width="750" alt="Reading Completion Race chart" src="https://github.com/booklore-app/booklore/releases/download/v2.0.0/reading-completion-race.png" /> </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi43MS4wIiwidXBkYXRlZEluVmVyIjoiNDIuNzEuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUiXX0=--> Reviewed-on: https://forgejo.internal/forgejo_admin/infra-personal/pulls/28 Co-authored-by: Renovate Bot <renovatebot@forgejo.internal> Co-committed-by: Renovate Bot <renovatebot@forgejo.internal>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🚀 Pull Request
📝 Description
🛠️ Changes Implemented
🧪 Testing Strategy
📸 Visual Changes (if applicable)
Please Read - This Checklist is Mandatory
Mandatory Requirements (please check ALL boxes):
developbranch (please resolve any merge conflicts)./gradlew testfor Spring Boot backend, andng testfor Angular frontend - NO EXCEPTIONS)Why This Matters:
Recent production incidents have been traced back to:
Backend changes without tests will not be accepted. By completing this checklist thoroughly, you're helping maintain the quality and stability of Booklore for all users.
Note to Reviewers: Please verify the checklist is complete before beginning your review. If items are unchecked, kindly ask the contributor to complete them first.
💬 Additional Context (optional)