15423676b5
chore(deps): update booklore-app/booklore to v2 (major) ( #4176 )
...
render-manifests-push / render-manifests-push (push) Has been skipped
lint-test-helm / lint-helm (push) Successful in 37s
renovate / renovate (push) Successful in 2m38s
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://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>
---
### 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 these updates 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:eyJjcmVhdGVkSW5WZXIiOiI0My4yNS44IiwidXBkYXRlZEluVmVyIjoiNDMuMjUuOCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=-->
Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4176
Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net >
Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net >
2026-02-24 20:46:25 +00:00
e6829c3c4f
chore(deps): update karakeep-app/karakeep to v0.31.0 ( #4163 )
...
render-manifests-push / render-manifests-push (push) Has been skipped
lint-test-helm / lint-helm (push) Successful in 11s
renovate / renovate (push) Successful in 2m18s
This PR contains the following updates:
| Package | Update | Change |
|---|---|---|
| [ghcr.io/karakeep-app/karakeep](https://github.com/karakeep-app/karakeep ) | minor | `0.30.0` → `0.31.0` |
| [karakeep-app/karakeep](https://github.com/karakeep-app/karakeep ) | minor | `0.30.0` → `0.31.0` |
---
### Release Notes
<details>
<summary>karakeep-app/karakeep (ghcr.io/karakeep-app/karakeep)</summary>
### [`v0.31.0`](https://github.com/karakeep-app/karakeep/releases/tag/v0.31.0 ): 0.31.0
[Compare Source](https://github.com/karakeep-app/karakeep/compare/v0.30.0...v0.31.0 )
##### 0.31.0
Welcome to the 0.31.0 release of Karakeep! This release brings synchronized reading progress, LLM-based OCR, a revamped import pipeline, drag-and-drop for lists, highlights on mobile, a lot of mobile polish, and fixes for some long standing bugs. Huge thanks to our contributors for this release [@​esimkowitz](https://github.com/esimkowitz ), [@​WieserDaniel](https://github.com/WieserDaniel ), [@​chen-ye](https://github.com/chen-ye ), [@​SnowSquire](https://github.com/SnowSquire ), [@​mokhovyk](https://github.com/mokhovyk ), [@​evan6seven](https://github.com/evan6seven ), [@​ElectricTea](https://github.com/ElectricTea ), [@​RobertRosca](https://github.com/RobertRosca ), [@​sweepies](https://github.com/sweepies ), [@​usr3](https://github.com/usr3 ) and everyone who shipped code, triaged bugs, or shared feedback for this release.
> If you enjoy using Karakeep, consider supporting the project [here ☕ ️](https://buymeacoffee.com/mbassem ) or via GitHub [here](https://github.com/sponsors/MohamedBassem ).
<a href="https://www.buymeacoffee.com/mbassem " target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png " alt="Buy Me A Coffee" width="auto" height="50" ></a>
And in case you missed it, we now have a ☁️ managed offering ☁️ for those who don't want to self-host. You can signup [here](https://cloud.karakeep.app ) 🎉 .
##### New Features 🚀
- Synchronized reading progress across all your devices ([#​2302](https://github.com/karakeep-app/karakeep/issues/2302 )). By [@​esimkowitz](https://github.com/esimkowitz )!
- Your reading position is now saved and synced, so you can pick up right where you left off on any device.
- LLM-based OCR as an alternative to Tesseract ([#​2442](https://github.com/karakeep-app/karakeep/issues/2442 ))
- You can now use your configured LLM for OCR instead of Tesseract, which produces significantly better results for image and asset bookmarks.
- Revamped Import pipeline ([#​2378](https://github.com/karakeep-app/karakeep/issues/2378 ))
- The import experience got another big overhaul: a new import details page ([#​2451](https://github.com/karakeep-app/karakeep/issues/2451 )), a dedicated low-priority queue for import crawling ([#​2452](https://github.com/karakeep-app/karakeep/issues/2452 )), better progress tracking, ability to pause an import and more resilient error handling.
- Drag-and-drop bookmarks into lists ([#​2469](https://github.com/karakeep-app/karakeep/issues/2469 ))
- Highlights support on mobile ([#​2494](https://github.com/karakeep-app/karakeep/issues/2494 ))
- You can now view and create highlights in the mobile app's reader view.
- AI tag suggestions: instructs the model to limit auto-tagging to a subset of your existing tags for more consistent results ([#​2444](https://github.com/karakeep-app/karakeep/issues/2444 )).
- Export lists in backups and exports ([#​2484](https://github.com/karakeep-app/karakeep/issues/2484 ))
- Automated backups and full exports now include your lists.
- Others:
- Retry buttons for dangling (aka pending) bookmarks in the admin panel ([#​2341](https://github.com/karakeep-app/karakeep/issues/2341 )).
- Add signup support to the mobile app.
- OpenAI service tier configuration via `OPENAI_SERVICE_TIER` ([#​2339](https://github.com/karakeep-app/karakeep/issues/2339 )). By [@​RobertRosca](https://github.com/RobertRosca )!
- Import from Instapaper ([#​2434](https://github.com/karakeep-app/karakeep/issues/2434 )). By [@​WieserDaniel](https://github.com/WieserDaniel )!
- Privacy-respecting bookmark debugger admin tool ([#​2373](https://github.com/karakeep-app/karakeep/issues/2373 ))
- MCP server now supports custom configurable HTTP headers ([#​2436](https://github.com/karakeep-app/karakeep/issues/2436 )). By [@​chen-ye](https://github.com/chen-ye )!
- New search qualifiers:
- `source:` filter to search by bookmark source (mobile, extension, web, etc.) ([#​2465](https://github.com/karakeep-app/karakeep/issues/2465 )).
- `tag:` alias for `#` and `!` alias for negation ([#​2425](https://github.com/karakeep-app/karakeep/issues/2425 )).
- New "Title Contains" condition in the Rule Engine ([#​2354](https://github.com/karakeep-app/karakeep/issues/2354 )). By [@​mokhovyk](https://github.com/mokhovyk )!
##### UX Improvements ✨
- Mobile app overhaul:
- Native tabs and more native-feeling screens.
- Animated UI feedback in the sharing modal ([#​2427](https://github.com/karakeep-app/karakeep/issues/2427 )).
- Show bookmark count in the all lists view.
- Better looking content fetching loading state in the bookmark preview.
- Two-phase metadata updates so bookmarks show up faster while crawling is still in progress ([#​2467](https://github.com/karakeep-app/karakeep/issues/2467 )).
- Links to apps, extensions and docs in the profile dropdown.
- Extension autofocuses on note field on open ([#​2366](https://github.com/karakeep-app/karakeep/issues/2366 )). By [@​SnowSquire](https://github.com/SnowSquire )!
- Improving the visual consistency of the settings page.
- Opt-in OAuth auto-redirect for single-provider passwordless setups ([#​2483](https://github.com/karakeep-app/karakeep/issues/2483 ))
- Add a download button for assets in the bookmark options menu.
- API keys now show their last-used dates to better identify unused keys.
- Fix masonry overflow in bookmark grids ([#​2400](https://github.com/karakeep-app/karakeep/issues/2400 )). By [@​evan6seven](https://github.com/evan6seven )!
- Hide confusing `No suggestions` message when no search suggestions are available.
##### Fixes 🔧
- \[Security] Sanitize reddit's crawling output to prevent stored XSS. This was reported by [@​ByamB4](https://github.com/ByamB4 ) and published as a github advisory (GHSA-mg93-f9mw-wpgj).
- Eliminated O(n²) parsing of Netscape bookmark imports ([#​2338](https://github.com/karakeep-app/karakeep/issues/2338 )).
- Smart lists can now be used in search qualifiers and in other smart list queries ([#​2470](https://github.com/karakeep-app/karakeep/issues/2470 ))
- Parallelize content extraction in the crawler worker for faster crawling.
- Batch meilisearch indexing requests for better performance ([#​2441](https://github.com/karakeep-app/karakeep/issues/2441 )).
- Auto dismiss dialogs during crawling that might have caused worker crashes before.
- Use user's preferred language for manual summarization ([#​2429](https://github.com/karakeep-app/karakeep/issues/2429 )).
- Accept more permissive RSS feed content types ([#​2353](https://github.com/karakeep-app/karakeep/issues/2353 )). By [@​ElectricTea](https://github.com/ElectricTea )!
- Fix clipping of reader view in smaller screens.
- Fix overscrolling in some setting pages (e.g. AI settings).
- Stop theme flashes with Cloudflare Rocket Loader ([#​2340](https://github.com/karakeep-app/karakeep/issues/2340 )). By [@​sweepies](https://github.com/sweepies )!
- Retry 403, 429 and 5XX status codes from the crawler.
- Lower priority of recrawling and mass admin actions to avoid starving interactive traffic.
- Fix scrolling in manage lists/edit tags when inside a dialog ([#​2258](https://github.com/karakeep-app/karakeep/issues/2258 )).
- Respect archived display behavior setting in mobile lists and tags ([#​2499](https://github.com/karakeep-app/karakeep/issues/2499 )).
- Fix flicker on closing bookmark preview on search page.
- Share PDFs from the mobile app as files instead of links.
- Fix high CPU usage of browser container after large imports due to leaking contexts. ([#​2503](https://github.com/karakeep-app/karakeep/issues/2503 ))
- Reader settings preview in the mobile app now matches reader view formatting ([#​2365](https://github.com/karakeep-app/karakeep/issues/2365 )). By [@​esimkowitz](https://github.com/esimkowitz )!
- When saving an image or a link from a page using "Add to Karakeep" menu item, the title of the original page is no longer incorrectly used for that link.
##### For Developers 🛠️
- Docker images moved from Alpine to Debian.
- OpenTelemetry instrumentation for database queries and extra tracing in OTEL traces ([#​2453](https://github.com/karakeep-app/karakeep/issues/2453 )).
- Prometheus metric for bookmark crawl latency ([#​2461](https://github.com/karakeep-app/karakeep/issues/2461 )).
- New `checkUrl` API endpoint to check if a URL is already bookmarked.
- `attachedBy` field in the update tags API endpoint to mark the tag as added by human or AI ([#​2281](https://github.com/karakeep-app/karakeep/issues/2281 )).
- Upgraded to Expo SDK 54, React 19.2.1, and Node.js 24.
- CLI can now search bookmarks ([#​2426](https://github.com/karakeep-app/karakeep/issues/2426 )).
##### Screenshots 📸
##### Reader Progress

##### Import Details

##### Upgrading 📦
To upgrade:
- If you're using `KARAKEEP_VERSION=release`, run `docker compose pull && docker compose up -d`.
- If you're pinning it to a specific version, bump the version and then run `docker compose pull && docker compose up -d`.
##### All Commits
- fix(workers): sanitize reddits metascraper output - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`ba3db95`](https://github.com/karakeep-app/karakeep/commit/ba3db95 )
- fix(i18n): update en\_US translation strings - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`52c1e9f`](https://github.com/karakeep-app/karakeep/commit/52c1e9f0 )
- i18n: Sync weblate translations - Weblate in [`f7ae922`](https://github.com/karakeep-app/karakeep/commit/f7ae922c )
- fix(workers): mitigate leaking browser contexts and setup and auto reaper ([#​2503](https://github.com/karakeep-app/karakeep/issues/2503 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`627faf5`](https://github.com/karakeep-app/karakeep/commit/627faf51 )
- fix(web): avoid flicker on closing bookmark preview on search page - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`ec0aaad`](https://github.com/karakeep-app/karakeep/commit/ec0aaad0 )
- fix(mobile): respect archiveDisplayBehaviour setting in lists and tags ([#​2499](https://github.com/karakeep-app/karakeep/issues/2499 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`59a2560`](https://github.com/karakeep-app/karakeep/commit/59a25607 )
- fix(web): fix scrolling in manage lists/edit tags when inside a dialog. fixes [#​2258](https://github.com/karakeep-app/karakeep/issues/2258 ) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`e37d728`](https://github.com/karakeep-app/karakeep/commit/e37d7286 )
- fix(mobile): remove the use of custom safe areas - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`ef0b50b`](https://github.com/karakeep-app/karakeep/commit/ef0b50be )
- fix(mobile): remove smart lists from manage\_lists page - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`7124d15`](https://github.com/karakeep-app/karakeep/commit/7124d15b )
- docs: correct breaking typo in 05-singlefile.md doc ([#​2496](https://github.com/karakeep-app/karakeep/issues/2496 )) - [@​brandongalbraith](https://github.com/brandongalbraith ) in [`0e3bc6f`](https://github.com/karakeep-app/karakeep/commit/0e3bc6f1 )
- fix(mobile): fix formsheets on android - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`228eb20`](https://github.com/karakeep-app/karakeep/commit/228eb208 )
- fix(ui): fix the colors of buttons in the settings page - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`3d6c83d`](https://github.com/karakeep-app/karakeep/commit/3d6c83d5 )
- fix(ui): Improve visual consistency in all settings page - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`e02a4c5`](https://github.com/karakeep-app/karakeep/commit/e02a4c5e )
- feat: add checkUrl endpoint to replace searchBookmarks for URL existence checks - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`b249273`](https://github.com/karakeep-app/karakeep/commit/b2492735 )
- fix: auto dismiss dialogs during crawling - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`23ae17f`](https://github.com/karakeep-app/karakeep/commit/23ae17fa )
- deps: fix mismatch in [@​types/react](https://github.com/types/react ) across packages - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`6f78d2f`](https://github.com/karakeep-app/karakeep/commit/6f78d2f8 )
- deps: upgrade playwright to 1.58.2 - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`07cc3ef`](https://github.com/karakeep-app/karakeep/commit/07cc3eff )
- fix(restate): call onError on rpc failures - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`4fd0eaf`](https://github.com/karakeep-app/karakeep/commit/4fd0eaf0 )
- fix(mobile): drop the use of custom safe areas in bookmark lists - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`447d2cc`](https://github.com/karakeep-app/karakeep/commit/447d2cc8 )
- fix(mobile): fix headers in android app - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`349fe05`](https://github.com/karakeep-app/karakeep/commit/349fe05e )
- fix: parallelize content extraction in crawler worker - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`74c3452`](https://github.com/karakeep-app/karakeep/commit/74c34529 )
- fix(ux): hide autocomplete dropdown when there are no suggestions - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`c6417d8`](https://github.com/karakeep-app/karakeep/commit/c6417d8e )
- docs: Add Cloudflare Workers AI provider ([#​2486](https://github.com/karakeep-app/karakeep/issues/2486 )) - [@​usr3](https://github.com/usr3 ) in [`5946ce8`](https://github.com/karakeep-app/karakeep/commit/5946ce8f )
- feat: add synchronized reading progress for bookmarks ([#​2302](https://github.com/karakeep-app/karakeep/issues/2302 )) - [@​esimkowitz](https://github.com/esimkowitz ) in [`fff0a28`](https://github.com/karakeep-app/karakeep/commit/fff0a280 )
- feat(mobile): Add highlights support for the mobile app ([#​2494](https://github.com/karakeep-app/karakeep/issues/2494 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`459ee50`](https://github.com/karakeep-app/karakeep/commit/459ee50e )
- fix: dont trigger background jobs if bookmark doesn't change on updateTags call - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`fbc63b9`](https://github.com/karakeep-app/karakeep/commit/fbc63b92 )
- fix(import): truncate title to max length in import worker - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`74b174a`](https://github.com/karakeep-app/karakeep/commit/74b174ad )
- feat(crawler): retrun 403, 429 and 5XX status codes - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`1c5c8ec`](https://github.com/karakeep-app/karakeep/commit/1c5c8ec6 )
- fix(web): fix clipping of reader view in smaller screens - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`41d2f0d`](https://github.com/karakeep-app/karakeep/commit/41d2f0d7 )
- fix(web): fix double scrolling in sidebar layout - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`a8e8ce9`](https://github.com/karakeep-app/karakeep/commit/a8e8ce98 )
- feat(ui): Add a better content fetching loading state in the bookmark preview - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`be09027`](https://github.com/karakeep-app/karakeep/commit/be090270 )
- feat: add a download button to the More submenu in bookmark options - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`2c57aa8`](https://github.com/karakeep-app/karakeep/commit/2c57aa87 )
- feat: add OAuth auto-redirect functionality ([#​2483](https://github.com/karakeep-app/karakeep/issues/2483 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`33b91e3`](https://github.com/karakeep-app/karakeep/commit/33b91e3f )
- feat: export lists in backups and exports ([#​2484](https://github.com/karakeep-app/karakeep/issues/2484 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`0c458ba`](https://github.com/karakeep-app/karakeep/commit/0c458ba1 )
- feat(workers): extract html parsing into a subprocess ([#​2485](https://github.com/karakeep-app/karakeep/issues/2485 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`7a10067`](https://github.com/karakeep-app/karakeep/commit/7a100672 )
- feat(mobile): make the bookmark edit UIs look more native - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`ec7ef00`](https://github.com/karakeep-app/karakeep/commit/ec7ef00f )
- fix: share PDFs as files instead of links in mobile app - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`0fab1aa`](https://github.com/karakeep-app/karakeep/commit/0fab1aa6 )
- feat: link to apps and extensions, docs and twitter in profile dropdown - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`d72788f`](https://github.com/karakeep-app/karakeep/commit/d72788ff )
- fix: dedup list and recent search suggestions - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`8539c83`](https://github.com/karakeep-app/karakeep/commit/8539c836 )
- fix: Support nested smart lists with cycle detection ([#​2470](https://github.com/karakeep-app/karakeep/issues/2470 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`b3d3602`](https://github.com/karakeep-app/karakeep/commit/b3d3602d )
- feat(mobile): Add animated UI feedback to sharing modal ([#​2427](https://github.com/karakeep-app/karakeep/issues/2427 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`b41b564`](https://github.com/karakeep-app/karakeep/commit/b41b5647 )
- feat(mobile): more native screens - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`e455e46`](https://github.com/karakeep-app/karakeep/commit/e455e468 )
- feat(ai): Support restricting AI tags to a subset of existing tags ([#​2444](https://github.com/karakeep-app/karakeep/issues/2444 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`4186c4c`](https://github.com/karakeep-app/karakeep/commit/4186c4c6 )
- feat(mcp): Support custom configurable HTTP headers ([#​2436](https://github.com/karakeep-app/karakeep/issues/2436 )) - [@​chen-ye](https://github.com/chen-ye ) in [`77b186c`](https://github.com/karakeep-app/karakeep/commit/77b186c3 )
- feat: Added Import for Instapaper ([#​2434](https://github.com/karakeep-app/karakeep/issues/2434 )) - [@​WieserDaniel](https://github.com/WieserDaniel ) in [`fbe7e3a`](https://github.com/karakeep-app/karakeep/commit/fbe7e3a9 )
- feat: Add drag-and-drop support for bookmarks to lists ([#​2469](https://github.com/karakeep-app/karakeep/issues/2469 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`485e994`](https://github.com/karakeep-app/karakeep/commit/485e9948 )
- feat(crawler): Split bookmark metadata updates into two phases for faster feedback ([#​2467](https://github.com/karakeep-app/karakeep/issues/2467 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`c8464e3`](https://github.com/karakeep-app/karakeep/commit/c8464e30 )
- feat: add source filter to query language ([#​2465](https://github.com/karakeep-app/karakeep/issues/2465 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`b05a753`](https://github.com/karakeep-app/karakeep/commit/b05a7531 )
- fix: treat bookmark not found as a no-op in rule engine instead of a failure ([#​2464](https://github.com/karakeep-app/karakeep/issues/2464 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`960ca9b`](https://github.com/karakeep-app/karakeep/commit/960ca9b6 )
- fix(extension): dont store tab title when saving links or images. fixes [#​2462](https://github.com/karakeep-app/karakeep/issues/2462 ) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`1a01f75`](https://github.com/karakeep-app/karakeep/commit/1a01f75d )
- feat: Add separate queue for import link crawling ([#​2452](https://github.com/karakeep-app/karakeep/issues/2452 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`bbd65fd`](https://github.com/karakeep-app/karakeep/commit/bbd65fd6 )
- fix: lower the priority of recrawling - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`7d53e2e`](https://github.com/karakeep-app/karakeep/commit/7d53e2e4 )
- feat(metrics): add prometheus metric for bookmark crawl latency ([#​2461](https://github.com/karakeep-app/karakeep/issues/2461 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`b264080`](https://github.com/karakeep-app/karakeep/commit/b2640803 )
- feat(db): add OpenTelemetry instrumentation for database queries - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`9e5693c`](https://github.com/karakeep-app/karakeep/commit/9e5693c6 )
- feat(import): new import details page ([#​2451](https://github.com/karakeep-app/karakeep/issues/2451 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`e59fd98`](https://github.com/karakeep-app/karakeep/commit/e59fd98b )
- feat: add extra instrumentation in the otel traces ([#​2453](https://github.com/karakeep-app/karakeep/issues/2453 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`538035c`](https://github.com/karakeep-app/karakeep/commit/538035c4 )
- fix(import): sanitize error messages to prevent backend detail leakage ([#​2455](https://github.com/karakeep-app/karakeep/issues/2455 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`93ad2e2`](https://github.com/karakeep-app/karakeep/commit/93ad2e20 )
- fix(import): propagate crawling/tagging failure to import status - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`50320ec`](https://github.com/karakeep-app/karakeep/commit/50320ecd )
- fix: backfill old sessions and do queue backpressure ([#​2449](https://github.com/karakeep-app/karakeep/issues/2449 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`e8e48a4`](https://github.com/karakeep-app/karakeep/commit/e8e48a41 )
- feat: Import workflow v3 ([#​2378](https://github.com/karakeep-app/karakeep/issues/2378 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`3c838dd`](https://github.com/karakeep-app/karakeep/commit/3c838ddb )
- feat: Add LLM-based OCR as alternative to Tesseract ([#​2442](https://github.com/karakeep-app/karakeep/issues/2442 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`3fcccb8`](https://github.com/karakeep-app/karakeep/commit/3fcccb85 )
- feat: batch meilisearch requests ([#​2441](https://github.com/karakeep-app/karakeep/issues/2441 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`54243b8`](https://github.com/karakeep-app/karakeep/commit/54243b8c )
- fix(mobile): migrate from RN image to expo-image - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`e861880`](https://github.com/karakeep-app/karakeep/commit/e8618800 )
- feat(mobile): use native tabs for mobile - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`bf5c99c`](https://github.com/karakeep-app/karakeep/commit/bf5c99cb )
- feat(mobile): add signup support to the mobile app - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`5cb7306`](https://github.com/karakeep-app/karakeep/commit/5cb73069 )
- fix: better looking error message when article content is unavailable - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`67501ed`](https://github.com/karakeep-app/karakeep/commit/67501ed6 )
- refactor: migrate trpc to the new react query integration mode ([#​2438](https://github.com/karakeep-app/karakeep/issues/2438 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`65f6e83`](https://github.com/karakeep-app/karakeep/commit/65f6e83f )
- feat(mobile): show num bookmarks in the all lists view - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`4bc1b90`](https://github.com/karakeep-app/karakeep/commit/4bc1b90f )
- fix: use user's preferred language for manual summarization ([#​2429](https://github.com/karakeep-app/karakeep/issues/2429 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`95bfa56`](https://github.com/karakeep-app/karakeep/commit/95bfa569 )
- feat(cli): Add bookmark search command ([#​2426](https://github.com/karakeep-app/karakeep/issues/2426 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`42cdc93`](https://github.com/karakeep-app/karakeep/commit/42cdc937 )
- feat(search): add tag: alias for # and ! alias for negation ([#​2425](https://github.com/karakeep-app/karakeep/issues/2425 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`5656e39`](https://github.com/karakeep-app/karakeep/commit/5656e394 )
- feat(extension): autofocus on note open ([#​2366](https://github.com/karakeep-app/karakeep/issues/2366 )) - [@​SnowSquire](https://github.com/SnowSquire ) in [`bf2c6de`](https://github.com/karakeep-app/karakeep/commit/bf2c6ded )
- feat: Add attachedBy field to update tags endpoint ([#​2281](https://github.com/karakeep-app/karakeep/issues/2281 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`e09061b`](https://github.com/karakeep-app/karakeep/commit/e09061bd )
- docker: add USE\_JEMALLOC env var and disable it by default - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`edf3f68`](https://github.com/karakeep-app/karakeep/commit/edf3f681 )
- docker: switch to jemalloc - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`6535a5a`](https://github.com/karakeep-app/karakeep/commit/6535a5a2 )
- docker: move from alpine to debian - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`b0036ef`](https://github.com/karakeep-app/karakeep/commit/b0036ef1 )
- feat: track api key usage dates - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`7b5f632`](https://github.com/karakeep-app/karakeep/commit/7b5f6328 )
- deps(mobile): upgrade to sdk 54 - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`6094d36`](https://github.com/karakeep-app/karakeep/commit/6094d360 )
- feat(rules): add "Title Contains" condition to Rule Engine ([#​1670](https://github.com/karakeep-app/karakeep/issues/1670 )) ([#​2354](https://github.com/karakeep-app/karakeep/issues/2354 )) - [@​mokhovyk](https://github.com/mokhovyk ) in [`c56cf4e`](https://github.com/karakeep-app/karakeep/commit/c56cf4e2 )
- fix(mobile): Reader settings preview on mobile matches reader view formatting ([#​2365](https://github.com/karakeep-app/karakeep/issues/2365 )) - [@​esimkowitz](https://github.com/esimkowitz ) in [`1b98014`](https://github.com/karakeep-app/karakeep/commit/1b98014d )
- fix(web): avoid masonry overflow in bookmark grids ([#​2400](https://github.com/karakeep-app/karakeep/issues/2400 )) - [@​evan6seven](https://github.com/evan6seven ) in [`789188b`](https://github.com/karakeep-app/karakeep/commit/789188b5 )
- deps: upgrade react to 19.2.1 - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`086b464`](https://github.com/karakeep-app/karakeep/commit/086b464d )
- fix(mobile): add custom headers to card banners. fixes [#​2342](https://github.com/karakeep-app/karakeep/issues/2342 ) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`b4dbc9c`](https://github.com/karakeep-app/karakeep/commit/b4dbc9ce )
- feat: privacy-respecting bookmark debugger admin tool ([#​2373](https://github.com/karakeep-app/karakeep/issues/2373 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`0f9132b`](https://github.com/karakeep-app/karakeep/commit/0f9132b5 )
- fix: Accept more permissive RSS feed content types and Fix User-Agent key ([#​2353](https://github.com/karakeep-app/karakeep/issues/2353 )) - [@​ElectricTea](https://github.com/ElectricTea ) in [`0e938c1`](https://github.com/karakeep-app/karakeep/commit/0e938c14 )
- fix: harden the restate implementation ([#​2370](https://github.com/karakeep-app/karakeep/issues/2370 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`f48e98e`](https://github.com/karakeep-app/karakeep/commit/f48e98e1 )
- fix: parallelize queue enqueues in bookmark routes - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`4ba1475`](https://github.com/karakeep-app/karakeep/commit/4ba1475d )
- feat: add openai service tier configuration option ([#​2339](https://github.com/karakeep-app/karakeep/issues/2339 )) - [@​RobertRosca](https://github.com/RobertRosca ) in [`aa7a81e`](https://github.com/karakeep-app/karakeep/commit/aa7a81e0 )
- fix: stop theme flashes with cloudflare rocket loader ([#​2340](https://github.com/karakeep-app/karakeep/issues/2340 )) - [@​sweepies](https://github.com/sweepies ) in [`2a6fe6e`](https://github.com/karakeep-app/karakeep/commit/2a6fe6e6 )
- feat: Add retry buttons for pending bookmarks in admin panel ([#​2341](https://github.com/karakeep-app/karakeep/issues/2341 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`e195f40`](https://github.com/karakeep-app/karakeep/commit/e195f40b )
- fix: Eliminate the O(n2) parsing of the netscape import parsing ([#​2338](https://github.com/karakeep-app/karakeep/issues/2338 )) - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`6fe2063`](https://github.com/karakeep-app/karakeep/commit/6fe20639 )
- feat(mobile): use react native sonner - [@​MohamedBassem](https://github.com/MohamedBassem ) in [`016433d`](https://github.com/karakeep-app/karakeep/commit/016433d4 )
</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 these updates 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:eyJjcmVhdGVkSW5WZXIiOiI0My4yNS43IiwidXBkYXRlZEluVmVyIjoiNDMuMjUuNyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=-->
Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4163
Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net >
Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net >
2026-02-22 17:18:41 +00:00