Release Notes: v4.0.3
✨ New Features
- Redesigned Book Details Page:
- Completely rebuilt the view to be modern, responsive, and data-rich.
- Added the ability to delete books directly from the details screen (no longer requires entering "Edit" mode).
- Displays more useful metadata at a glance.
- OPDS & Magic Shelves Overhaul:
- Magic Shelves Support: Added
/opds/magicshelfroutes. Magic Shelves now appear in the OPDS catalog. - Customizable OPDS Root: Replaced the static root with a dynamic, per-user list.
- Drag & Drop Ordering: Users can now reorder OPDS entries and toggle their visibility via a new UI in User Settings (
/me), similar to the Duplicate Format Priority ranking.
- Magic Shelves Support: Added
- Manual Search Improvements:
- Persistence: The UI now remembers your selected metadata fields for manual searches (#891).
- File Sizes: Added file size badges to search results.
- Feedback: Added toast notifications for better user feedback.
🚀 Improvements
- Hardcover Integration:
- Metadata Enforcement: Inline edits and book-list updates now correctly trigger the metadata enforcer. This ensures changes (like Series info) are written into the EPUB files. The system also now coalesces duplicate logs to prevent redundant processing (#726).
🐛 Bug Fixes
Kobo & Syncing
- Unregistered Device Support: Added placeholder OAuth endpoints to fix connectivity for Kobo devices that cannot use the store proxy (#879).
- Download Fix: Fixed EPUB OPF parsing (stripping BOM/whitespace) to resolve download failures on Kobo devices (e.g., Clara BW) (#975).
- Magic Shelf Sync: Fixed an issue where books existing only in Magic Shelves were not syncing to Kobo. Reading states now also respect the Magic Shelf allow-list (#976).
Authentication & Permissions
- OAuth Admin Roles: Fixed a bug where enabling OAuth could revoke admin rights if the provider returned an empty groups claim. The system now preserves existing roles if group data is missing (#978).
- OAuth Email Collision: Fixed "UNIQUE constraint failed" errors. If an OAuth provider's email matches an existing user, the system now binds the login to that user instead of attempting to create a duplicate (#973).
Database & Stability
- Calibre 9 Schema Fallback: Refined the database compatibility layer. Added a safe fallback for
books.isbnby detecting the schema version at startup. This resolves lingering 500 errors for users on both Calibre 9 and older versions (#979).
🌍 Translations
- French: Major updates and corrections (merged PR #977).
- Dutch: Updated server restart messages (merged PR #969).
👷 CI/CD
- ARM Runner: Added cleanup for zombie digests on the persistent ARM runner to improve build reliability.

