LinuxServer Changes:
Fix app file perms to prevent high uid.
kavita Changes:
With this release, I've hit 3 years of developing Kavita. Originally starting out after using Ubooquity and feeling limited by the lack of metadata and other solutions not aligning with my sense of UX, I started this project as a personal project to not only have a simple reader and organizer like Plex, but also learn .NET. Fast forward to now and Kavita has grown to be a name brand product and my vision has drastically expanded from a simple self project to becoming the Plex of the reading world. After 3 years of building this project solo (with some help from a few users here and there), I would think it would be nearly complete, yet I find myself with more work than ever as the ideas keep flowing.
Before we jump into this release, let's take a look back at some of the major features I've released this year:
- User and Server Stats (160 hours)
- Double Page reader (100 hours)
- CBL & Reading List Improvements (40 hours)
- Vertical Reading support in Epub reader
- Base URL Support
- WebP and AVIF support
- Kavita+ (and the review overhaul that went along with it) (600+ hours)
- Dynamic covers for collections and reading lists (3 hours)
- Personal Bookmarks in the Epub reader (12 hours)
- Full app localization (80 hours)
- A complete filtering overhaul with deep customization on how you filter (300 hours)
- Smart Filters and customization of your side nav and Dashboard with those streams (300 hours)
This year has been huge in terms of delivering features to the users and also the transformation the underlying codebase has undergone to support these features. Overall, I've delivered 141 new features, 301 changes, and 277 fixes. It has been a tremendous year indeed and much appreciation needs to go to @DieselTech and @scare376 who are basically the only nightly testers to test releases before it hits stable and provide a ton of support in the discord.
I'm looking forward to next year where I will finally get to work on some much needed features, like a complete PDF overhaul, kobo sync support, the start of the mobile app, and some really cool Kavita+ ideas that I've been discussing in the discord (join if you want to give your opinion).
With that said, this last release I had to take a step back and focus on the polish. There were a few performance issues and styling issues that were starting to nag me and after delivering such a huge update, I needed something a bit easier to relax with. This release is focused on polishing the application and I think this first pass brings a lot of nice smoothing to the edges in the app. I have more planned that I will sprinkle in next year.
First up is the .kavitaignore, which is a file you can place within any directory and apply glob syntax patterns which will exclude files and folders. While this is really powerful, it is an advanced feature that many don't use and requires updating your filesystem. I took a hard look, opened an issue and collected feedback from a few users and decided, let's bubble up this feature to the UI. .kavitaignore will be removed next year in the v0.8.x series of releases and instead, admins can now use the File Type switches and the Exclude Patterns in the Library Settings modal. I believe this will lead to higher adoption.
Next is a minor feature that has huge feel--image loading. I overhauled the image loading code to be much smoother. Images fade in and the lazy loading is much more performant. You should immediately notice the difference. Along with this image loading, a lot of the readers got bugfixes and attention to close out some of the bugs that were reported.
Lastly, let's talk about Smart Filters. As we all know, I had to do a few hotfixes due to some code around the smart filters and unfortunately, there were still more bugs in the system. This release should have all the bugs worked out. The testers and I really ensured it's working well. I wrote a migration to try and reduce data loss, but you might find some filters are broken. This is the cost of writing over 10K lines of new code around one feature and only 2 users helping with testing (Seriously, we need help, please join our nightly testing channel and help out).
Aside from the encoding issues, I realized that not all Smart filters need to be binded to the side nav or dashboard. I ended up building quite a few utility filters to identify series that have missing metadata, series that I started reading but forgot about, etc. With this release, in the user settings dropdown (top right of screen), you can now view all your Smart Filters and load them quickly.
One last thing I want to call out for those that read all the changes. I did a ton of polishing on the Publication Status code for a series to make it smarter than before. Books with just one book or series that are just a single special will mark as Completed. Kavita will fallback much better for Series that have a total Count in how it matches against Volumes or Chapters. These will need a force scan to pickup, but I think overall, leads to a much better experience.
Added
- Added: You can now see your total progress in the series from within the manga/image reader.
- Added: Added a Smart Filters page so you can see all your filters and click to load them. The new page is accessed from your user settings (top right dropdown on nav). The smart filter will show red if the filter was not able to be migrated and needs to be recreated by you.
- Added: New Library Type for Image. This is a placeholder while I gather feedback to avoid a bug in non-image types. If you are a primary user of loose leaf image series, please try this out with a test library. This library type may be removed in the future without a data migration. This is exclusively here to gather feedback after solutioning Loose leaf image issues from the open discussion.
- Added: Epub's marc role of creator now maps to writer
- Added: Library Settings now has File types setting which allows you to turn on/off different types of file types from the scanner.
- Added: Library Settings now has an exclude patterns control which allows you to ignore folders or file patterns.
- Added: Added the ability to search for bookmarked series and open up the bookmark reader directly (this is image based bookmarks)
- Added: Added a nightly task (cleanup task) that will ensure all user's progress on a chapter is at max the chapter's pages, in the case it was replaced with one that has less pages.
Changed
- Changed: All filtering encode/decode code is now purely in the backend. There is no noticeable differences when interacting with the filter. This will avoid a lot of headache with the filtering system.
- Changed: All Series page will now render out the title of the smart filter if it's set instead of All Series.
- Changed: Manage users page in admin dashboard has a new look and feel
- Changed: Added a fade in and changed the way Kavita lazy loads images for a much better experience (large improvement on all series page as well)
- Changed: Icon buttons will now longer show an active state when focused
- Changed: Replaced the underlying library for Reading Day breakdown chart
- Changed: On Desktop, by default all series metadata will show (for series metadata). I'm looking for feedback from users.
- Changed: Series detail metadata (summary and tags) will now be expanded to a limit by default on desktop. I'm looking for feedback from users.
- Changed: Metadata filter now animates as it expands/collapses
- Changed: Optimized dashboard page to allow better stream loading so there is less jank
- Changed: Migrated to using a lighter way of loading lazy loaded modules
- Changed: Updated some logs so we can avoid a potential log injection
- Changed: Improved the webtoon reader to better find where you are after quickly scrolling.
- Changed: Next estimated chapter will not show the time anymore
- Changed: Card titles are now center aligned by default
- Changed: On cards, don't show the progress bar unless there is at least one page read
- Changed: Cover chooser no longer has an apply button. Upon adding or selecting a cover, it will instantly take effect.
- Changed: Made the jump bar transition instant which feels much better with the new image loading.
- Changed: Updated Angular to v17
- Changed: Next estimated chapter now looks much better
- Changed: Changed how loose-leaf images are parsed within Kavita to work much better and fallback to more natural grouping. They will now grab the series name from the folder name, use any in-between folders for extracting volume/chapter numbers and if none found, treat the image as a special. (Thank you to users that commented on the discussion issue)
- Changed: Next Estimated Chapter title is now shorthand and localized, in case your locale doesn't use ~ or it doesn't go before the date
- Changed: User settings tabs now defer load, meaning a probably very slight speed increase on slower networks
- Changed: Spruced up the Image Parser to handle more volume and chapter parsing from filenames when it's needed.
- Changed: .kavitaignore files have been deprecated and will log a warning to the logs whenever one is found. They will currently still function but be removed in the v0.8 release.
- Changed: On smaller viewports, modals will open in fullscreen.
- Changed: Next Chapter is now Upcoming to better indicate what the feature does
- Changed: epub reader now has a close book within the settings itself
- Changed: Major performance enhancements done to the update series metadata API which should help when Komf hammers the API when Kavita adds a large amount of new series
- Changed: (Scanner) If a series has a total count of 1 and there is only a special, consider the publication status completed (good for omnibus releases).
- Changed: On smaller viewports, the customize dashboard/sidenav screen has drag'n'drop disabled.
- Changed: Improved some image loading code in the Manga reader to help with slow loading images causing the reader to pause or show a black page. This is not fully complete, just a bit better.
- Changed: Series relations in the dropdown are now alphabetically sorted
Fixed
- Fixed: (Kavita+) Want to read wasn't scrobbling to AniList
- Fixed: Fixed a bug where bookmarks page wasn't actually getting the series back from the API.
- Fixed: Fixed bad encodings with smart filters across UI/Backend
- Fixed: Fixed a bug on calculating average reading hours per week. Thanks @duplaja for the help on the math.
- Fixed: Fixed pagination not working consistently in scroll mode due to some changes a few releases ago in Epub reader
- Fixed: Fixed a bug that when you had the line overlay in epub reader, when you hit escape it closed the book instead of first closing the overlay.
- Fixed: Fixed a bug where directory picker was not listing when no path passed
- Fixed: Fixed a bug where Kavita was too aggressive to complete a series. It is back to explicitly needing to match total count.
- Fixed: Fixed a bug where publication status was getting set to Ended when it shouldn't. Ended should only be set when there is at least a Count within any chapter.
- Fixed: Lots of localization areas were updated with missing keys
- Fixed: Fixed a long standing, difficult bug where on docker, when adding a book to an existing series, the series read time could get set to < 1 hour.
- Fixed: Fixed book-reader skipping the end of chapters in 2 column mode (Thank you @Hobogrammer)
- Fixed: Fixed a bug in nightly where clicking on menu/actionbar could trigger pagination in the epub reader
- Fixed: Fixed an edge case where the filter didn't have the correct comparison when switching from a multi-select to a single string type.
- Fixed: Fixed a database foreign constraint issue (in most cases, this is fixed. A few edge cases still exist). This fix comes at the cost of the first scan being 50% slower and subsequent scans slightly slower to process.
- Fixed: Fixed a bug where directory picker typeahead was not opening correctly
- Fixed: Fixed an issue where email links can have only https:/ instead of https://
- Fixed: Fixed all people fields in Edit Series not reflecting the locked status. All locked fields are now singular.
- Fixed: Fixed a bug where single epubs without a volume or chapter number in their title could get marked as non-special and thus not render on the series detail page (or render twice)
- Fixed: Fixed publication status to have an override for calculation by checking if there is only 1 book and the type is epub/pdf, then setting it to Completed
- Fixed: Fixed a bug where searching for a person and clicking said search result wouldn't load up the filtered screen.
- Fixed: Fixed a bug where scanning a series wouldn't properly update the cover when applicable
- Fixed: Fixed an issue when scanning a series, 2 additional tasks would be done (word count and cover gen) when only one of each was needed.
- Fixed: Fixed a bug where you could move 2 pages in immersion mode with the action bar menu open
- Fixed: Fixed a ton of bugs in the epub reader around paging when you wouldn't expect to
- Fixed: When busting Kavita+ cache, also bust recommendations
- Fixed: Fixed an edge case where a logged in user would setup a user account then hit back and their side nav would not restore.
- Fixed: (Kavita+) Fixed a bug where if you add and remove a series multiple times from want to read, before scrobbling Kavita identifies the correct end state and scrobbles that, but those other events never got marked as processed.
API
- POST /series/metadata payload has been updated so locked fields for people (writersLocked) are now singular (writerLocked).