Kavita

Media

A fast, self-hosted digital library for manga, comics and books.

Latest v0.9.0.2 · by KavitaWebsiteKareadita/Kavita

Release activity

Release activity — 6 releases across 6 days in the last year. Each cell is one day; darker means more releases that day. Older weeks are hidden at this screen width.
MayJunJulAug
SundayNo releases on Apr 26, 2026No releases on May 3, 2026No releases on May 10, 2026No releases on May 17, 2026No releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026
MondayNo releases on Apr 27, 2026No releases on May 4, 2026No releases on May 11, 2026No releases on May 18, 2026No releases on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026
TuesdayNo releases on Apr 28, 2026No releases on May 5, 2026No releases on May 12, 2026No releases on May 19, 2026No releases on May 26, 2026No releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026
WednesdayNo releases on Apr 29, 2026No releases on May 6, 2026No releases on May 13, 2026No releases on May 20, 2026No releases on May 27, 2026No releases on Jun 3, 2026No releases on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026
Thursday1 release on Apr 30, 2026No releases on May 7, 20261 release on May 14, 2026No releases on May 21, 2026No releases on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026
FridayNo releases on May 1, 2026No releases on May 8, 2026No releases on May 15, 2026No releases on May 22, 2026No releases on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026
SaturdayNo releases on May 2, 2026No releases on May 9, 2026No releases on May 16, 2026No releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026

6 releases in the last year

Changelog

v0.9.0.2

v0.9.0.2 - Security Hotfix

Changed 1
  • OIDC validation no longer requires super safe urls
Fixed 13
  • Fixed reading list detail tab not having tabs wired up
  • Fixed series/chapter rating always returning 0 if you had rated it
  • Fixed bookmarks not loading
  • Fixed text & image bookmarks being switched
  • Fixed long chapter names causing wrapping in activity overview
  • Fixed epub bookmarks not loading
Security 1
  • Critical vulnerability fixed (CVE-2026-47202)

All users are strongly advised to update immediately.

There has been a critical vulnerability discovered in Kavita. Please update your instances.

All versions prior to this release are impacted.

If you are holding out on an old release due to some change in Kavita, please raise a FR and I will work with you to help bridge that feature gap.

Details/CVE will be shared at a later date to give users time to update.

Edit: CVE Published: CVE-2026-47202

Changed

  • Changed: OIDC validation no longer requires super safe urls.

Fixed

  • Fixed: Fixed reading list detail tab not having tabs wired up.
  • Fixed: Fixed series/chapter rating always returning 0 if you had rated it.
  • Fixed: Fixed bookmarks not loading.
  • Fixed: Fixed text & image bookmarks being switched.
  • Fixed: Fixed long chapter names causing wrapping in activity overview.
  • Fixed: Fixed epub bookmarks not loading.
  • Fixed: Fixed text & image bookmarks being switched.
  • Fixed: Fixed long chapter names causing wrapping in activity overview.
  • Fixed: Fixed people not being removed from series if chapter metadata has none.
  • Fixed: Fixed series not being added to a collection under some circumstances.
  • Fixed: Fixed early reloading causing double K+ plus calls when matching on the series page.
  • Fixed: Fixed annotations duplicating & swallowing text under some circumstances.
  • Fixed: Fixed annotations not being shown under specific circumstances.
  • Fixed: Fixed external links containing sometimes being scoped out of a book.
  • Fixed: Fixed search being unreliable when searching with year metadata.
View originalPermalink
How v0.9.0.2 went
v0.9.0

v0.9.0 - Reading List Overhaul and Spring Cleaning

Added 13
  • Added ability to filter reading lists by multiple fields
  • Added user-defined tags to reading lists that can also come from CBL v2 lists
  • Made Smart Filters work with Reading Lists for binding to Side Nav and Dashboard
  • Added ability to export reading lists as CBL v1 or v2 format
  • Added ability to save matching decisions as Remap Rules for future CBL imports
  • Added ability to browse and import lists from the CBL Repository directly in Kavita
Changed 3
  • Redesigned Reading List screens to display more information
  • Rewrote CBL matching logic with multiple fallbacks to improve import accuracy
  • Implemented backoff system for version update modal dismissal
Fixed 4
  • Fixed excessive database writes that were noticeable on non-SSD setups
  • Fixed database is locked error by changing transaction creation and implementing extra waiting for concurrent writes
  • Scanner now clears metadata fields when they are cleared in the underlying metadata file
  • Genres and tags no longer normalize and merge during scanning
Security 1
  • Fixed security vulnerabilities and hardened API endpoints

It seems almost like a hard rule that the 2nd release of the year is always a spring cleaning release and this time, we've really put the new knowledge we've built up back into Kavita to clean up old systems, rebuild foundations, and then deliver some massive improvements on top of it. This release is packed with nearly 200 change log items and overhauled 2 major UI systems that have already allowed some amazing enhancements.

Highlights
Performance and Security

This is first and foremost. Kavita had a few security issues brought against it and we've ensured that we fixed those issues (CVEs will be requested after the release) but also hardened more of the API to ensure no other issues. These issues are likely not going to be abused, but I would encourage everyone to update.

In addition, we fixed one oversight around how often Kavita was writing to the DB (noticeable on non-SSD setups) and fixed the database is locked error (mostly) by changing how transactions are created in Kavita and implementing some extra waiting when concurrent writes are occurring. For me, I was seeing them a lot in the webtoon reader (which also got some nice love) and now I don't.

Reading List

There is a lot to cover but the long story short is, I redesigned the screens to bring forward more information, I added the ability to filter against reading lists by a number of fields, I added tags which are user-defined (or can come from CBL v2 lists), and I made Smart Filters work with Reading Lists, so you can bind them to your Side Nav/Dashboard. You can also export them as CBL (v1/v2) if you want to apply some arbitrary sorting in another program then re-import them.

CBL Import Manager

This has been on my mind since I first saw the v2 CBL spec and that is an overhaul to the CBL Import flow. Here's what I did:

  • Rewrote the matching logic with tons of fallbacks to always try to make the best match wiki
  • Allow the importer to make decisions and save those decisions as Remap Rules for future imports (admin's can promote so all users get the benefit)
  • Allow users to browse lists from the CBL Repo in Kavita and just import from there (or a file/url)
  • Auto-update lists for the users
  • And of course, v2 support (with tags)

Of course there is more to the story, but overall I feel like the Reading List and CBL Flow is in a great place.

Multi-download Support

This has been an item I've been wanting for 2 years now and I finally got to finish it off. You can now multi-select series, collections, chapters, volumes, whatever and Kavita will deconstruct down to the individual items, queue them up and process one by one. For me, a bit problem was FF on Android, I had to deal with a prompt on every download, but no more! The download manager is smart and remembers what you've downloaded and will show a mark on the card to let you know you've synced it to the device. We got retry and cancel support and just a ton of polish. I hope you'll enjoy this as much as me.

Misc

Mihon and Panels users rejoice, the reading session system now works with these apps out of the box. In addition, users that want to stay on older versions of Kavita can without the nagging version update modal popping up. I've overhauled the system to a) use a backoff system when you dismiss before it pops again and b) allow you to stay on an older version without Kavita pinging you again (but I don't recommend this due to security patches).

Lastly, the scanner got some bug fixes that might affect you:

  1. Whenever fields are cleared out in the underlying metadata file, Kavita used to ignore those changes. It will now clear those fields.
  2. Genres/Tags used to normalize and merge, but no longer. This may cause new genres to show up but should be better overall for users.
What's next

Next up, we will be focusing on Kavita+ and giving it it's own spring cleaning along with bringing some much needed provider changes (Hardcover, MangaBaka) and new features. While we don't have anything else planned, I'm sure something fun will come up for non-Kavita+ users.

I want to also extend a special thanks to @falo2k and @DieselTech from the CBL Group and @LegendaryLass for the massive amount of work designing and testing the Reading List Overhaul project.

Added

  • Added: Kavita now has a dedicated queue for downloads with auto-processing, series will now deconstruct to individual items, and it's persistent between reloads.
  • Added: Added ability to bulk download series/chapter/volumes via bulk operations bar
  • Added: Added the ability to download Reading Lists and Collections from Kavita
  • Added: Added a button to unlink your account from OIDC
  • Added: Added the ability to export a reading list to CBL v1 or v2 support
  • Added: Kavita now can store external metadata Ids for Series/Volume/Chapter entities for (AniList, MAL, MangaBaka, ComicVine, Metron, Hardcover).
  • Added: Kavita will try to fill in External Metadata ids from ComicInfo Notes tags based on tagger signatures and from Kavita+ when applicable. Inherit weblink from first chapter libraries will bubble up the metadata to Series.
  • Added: Series/Volumes/Chapters can now be marked as read, with the option to generate reading sessions (4 upvotes, FR #4400)
  • Added: Added support for a limited set of Korean End markers ( 완결, 완, 完 in () or [] exclusively ) that can be parsed from the filename and provide an alternative to ComicInfo.Count property, since ComicInfo isn't well known in Korea. (Thanks @aha-hyeong for inspiration, @daydreamrabbit for filenames and explanation)
  • Added: Added a dropdown to pick which AuthKey to use in your copy-able OPDS url. (FR #4555, 1 upvote)
  • Added: Added extra information for KOReader progress logging to help debug issues. (FR #3889, 2 upvotes)
  • Added: Added the ability to import a CBL File (v1/v2) via a URL, file, or Browse directly from the CBL Repo.
  • Added: Added the ability to designate a correction as a remap rule locked to your account. It will be used in future CBL Import/Update to ensure the correct issue/series is matched. For example, if you have Issue 12.5 instead of 12 for some reason, you can correct a CBL Import and save a rule to say, in future, always map this series and issue to 12.5 without manual effort.
  • Added: Emails can now be localized. By default, Kavita will use the target user's localization settings. Missing strings will fallback to English. Invite user will use the default admin's locale.
  • Added: The search input closing is now hooked up to the Escape keybind
  • Added: Added an activity tab to series page which displays your reading sessions for this series
  • Added: Added a reading profile option to disable bookmark icons altogether in the Epub reader (FR #4270, 3 upvotes)
  • Added: Added a loading indicator while Kavita checks if your OIDC authority is correct
  • Added: CBL Lists created via the network are now syncable. Kavita will check Github or the Url and compare the hash to see if any work is needed to consume updates. Kavita processes the lists behind the scenes. You can always force a sync manually either thru the manager screen or re-import flow. Bad matches will be skipped. It is your responsibility to build your rematch rules ahead of time.
  • Added: New background task (4am, daily) for the CBL Sync. Admins can customize on Tasks screen. Job processes lists every 3 days.
  • Added: Reading Lists now have persistent cover images. Previously on-the-fly, a temp reading list merged cover would be created. Now, Kavita will generate once at least 3 issues with covers exist. This will bring colorscape functionality to the reading list detail page.
  • Added: When importing CBLs from the reading list manager, Kavita will track the items the list SHOULD have vs how many you have and show you that on CBL Manager and Reading List design page. This does not include a migration, re-import your lists (you don't have to delete them) to get the field set.
  • Added: When images fail to load in webtooon mode, Kavita will set the height to prevent continuous scroller from triggering, set a border to help indicate the failed page and then try to resolve it 3 times in a background thread. This will help when there is fallout when reading on plane wifi.
  • Added: Added a client-side filter on reading list detail page when there is more than 10 items. It will sort against: title, series name, chapter number, volume number, issue's title, writer name, and penciller (first only).
  • Added: Added the ability to filter reading lists by Title, Release Year, Item Count and Writer/Artist. You can sort by Title, Release Year Start/End, and Item Count.
  • Added: Added a migration to ensure there are no readonly admin accounts
  • Added 4 new keybinds to the readers: First/Last Page, Previous/Next Chapter. PDF does not support Previous/Next Chapter loading currently. (FR #4585, 1 upvote)
  • Added: Added the ability to change your username on the server. An email will be sent to inform you if email is setup.
  • Added: Added Shortcut modal to PDF and Epub readers
  • Added: Added volume range support for a manga regex pattern
  • Added: Added unread chapter count sort option for series
  • Added: Added the ability to filter by libraries for Browse People page
  • Added: Added Is Not Empty comparison for all fields that have Is Empty (FR #4616, 1 upvote)
  • Added: You can now craft and save Smart Filters for Reading lists and bind them to your Side Nav/Dashboard as you would Series-based.
  • Added: Added Provider Equal/NotEqual and Missing Item Count filter support for Reading Lists
  • Added: Added an actionable menu to reading list on side nav to get to the manage cbl screen
  • Added: Added actions to add smart filters to your Dashboard & Side Nav from the smart filter screen.
  • Added: Added an action to regenerate reading list covers

Changed

  • Changed: Manga reader menu now uses a cubic-bezier easing for its animation (Thanks @kindlyfire)
  • Changed: Improved the UX of the Annotation drawer to allow large annotations to be fully viewable. (Thanks @Ark1369)
  • Changed: Version update checking has been drastically streamlined and made less annoying. Backoff support is implemented, after 5 prompts, Kavita will stop pestering you to update.
  • Changed: All tab titles in Kavita are now localizable and much cleaner
  • Changed: Kavita now respects prefers-reduce-motion and will slow animations down. Disabled animations will still affect, but is now applied with no-animations class on body.
  • Changed: Tweaked the card layout to try and squeeze more spacing out
  • Changed: Slightly widened the gap on carousels to align with spacing of the card grid
  • Changed: Properly ensure readonly users cannot trigger reorder on side nav
  • Changed: Series downloads no longer create a big zip, but deconstruct into individual items and are queued up.
  • Changed: While a download is in queue, the download indicator will show on the card.
  • Changed: (Performance) Entity size is in the DB, change the size checks to avoid touching the underlying disk
  • Changed: Updated dependencies, including security vulnerabilities
  • Changed: Errored out smart filters can now be deleted from the smart filter page
  • Changed: User preferences and keybinds will now be disabled for users with the Read Only role to avoid confusion (Thanks @IbrahimHamshari )
  • Changed: Allow Kavita+ to match against a series during a manual match always regardless if the library has automatic metadata matching off.
  • Changed: (Performance) Refactored UpdateUserAsActiveMiddleware to not write on every request and instead queue up and flush to the DB every 5 mins.
  • Changed: Added an ellipses on Profile activity tab when a session contains more than 5 chapters
  • Changed: Improved the UX of the Annotation drawer to allow large annotations to be fully viewable. (Thanks @Ark1369 )
  • Changed: Importing a CBL only updates/inserts. You no longer need to delete and reimport.
  • Changed: Drastically overhauled/improved the CBL matching logic.
  • Changed: Opening the OnDeck filter will now sort by last read instead of last chapter added
  • Changed: The reading session info popup will now show the closest time first as opposed to the last
  • Changed: Opening a chapter which has missing files will not clearly show an error and navigate back instead of silently failing
  • Changed: Kavita will prevent your device from going to sleep while downloading
  • Changed: External sources no longer require an api-key to be provided
  • Changed: The OIDC Authority check will now display more descriptive errors to help users debug
  • Changed: Setting items will now be forced into edit mode and display errors if they're invalid
  • Changed: The library page will now fully refresh after a scan has completed
  • Changed: Send To Actions will now be hidden if email has not been set up
  • Changed: Series names are now required to contain meaningful information (I.e. they cannot only be special characters). A media issue will be created if a file is ignored because of this
  • Changed: A media issue will now be created when a file is fully skipped after parsing
  • Changed: Improved security in a few APIs
  • Changed: Kavita will prompt to confirm delete before removing read items from a reading list (FR #4530, 1 upvote)
  • Changed: (UX) Reading List detail page will now use a list layout instead of cards. Based on feedback, reading list titles were much longer and thus the card was a poor experience (FR #4053, 3 upvotes)
  • Changed: (UX) Changed the reading list item cards to bring more information forward and more responsive. (Thanks to whomever supplied the original design for inspiration)
  • Changed: Removed the drag and drop ordering for reading list detail page. It didn't work well on mobile and was only used when < 100 items, but most reading lists are above that.
  • Changed: Read-only rule warning will now show on invite modal to prevent users from using it without fully understanding the repercussions.
  • Changed: Removed the forced sentence case for Tag/Genres. Kavita will still merge into the first for basic normalization.
  • Changed: Read-only rule warning will now show on invite modal to prevent users from using it without fully understanding the repercussions.
  • Changed: Webtoon Reader continuous reader now uses a pull to load (mobile) mechanism. When you get to the top or bottom, a small time out arms the component then the pulling will trigger a progress until the next/prev chapter loads. For PC users, it will be a scroll like normal. (FR #4590, 1 upvote)
  • Changed: Don't send progress events when we are on the same page. This should help reduce database is locked issues when reading.
  • Changed: Tab titles will now be Context (Kavita)
  • Changed: Reading List and Collection pages now use an Uppercase sorting
  • Changed: Changed the design of the Shortcut modal button
  • Changed: (Performance) Slightly improved the Progress API to avoid an extra read
  • Changed: (Performance) Webtoon reader no longer debounces but just sends unique page numbers
  • Changed: Ensure we clear out metadata from ComicInfo even if it's now empty
  • Changed: (Performance) Removed 2 joins on the scrobble code as it wasn't needed.
  • Changed: Fixed how Kavita creates transactions with SQLite to reduce the 'database is locked' issue. From my testing, database is locked which was happening during reading (webtoon) and from some concurrent scans were eliminated.
  • Changed: Kavita will now log when Hangfire (our task scheduling system) errors out and retain the stack trace
  • Changed: More in Genre is now removed from default dashboards. If you really loved it, raise a Feature Request about it.
  • Changed: All Smart Filters page now has a filter for the type of entity to display (Series/Reading List)
  • Changed: A revamped UX for details screen
  • Changed: Mihon will now generate reading sessions
  • Changed: Tweaked the search query so that we require the year to match if present, instead of matching all in that year
  • Changed: Allow reading overrides for logging levels for subsystems from appsettings.json
  • Changed: Search results will prioritize showing the series title over the localized title more

Fixed

  • Fixed: (Kavita+) Fixed a bug where the check license button only worked on the first load
  • Fixed: Bulk Actions on customize side nav wasn't showing the bulk operations bar
  • Fixed: Read only accounts were able to make changes to settings in the UI (Thanks @IbrahimHamshari)
  • Fixed: Fixed a bug where comic readers (like Chunky or Kybook 3 for example) could not read recently-updated feed (or read only first page - in Kybook 3 case) (Thanks @ghostxwheel )
  • Fixed: Fixed a bug where after adding a custom theme, the page was left in a half-broken state.
  • Fixed: Fixed an issue with apple-mobile-web-app-status-bar-style on iOS where we were passing incorrect values. Now we send black or default based on if the theme is dark or not.
  • Fixed: Fixed the spacing on the buttons on small screen in manga reader
  • Fixed: Fixed a localization bug where locale number positioning for chapter/book/volume numbers weren't taking into effect. For example Korean Volume was showing as 권 1 when locale specified 1 권
  • Fixed: Fixed a lot of endpoints missing access checks
  • Fixed: Fixed users not being able to upload collection covers unless they're admin
  • Fixed: Fixed schema in API docs for /api/Plugin/authkey-expires.
  • Fixed: Fixed recommendations always showing as unread for users with an admin account
  • Fixed: Fixed read progress not being included on the person page
  • Fixed: Fixed being unable to update a reading lists name if it matches itself.
  • Fixed: Fixed orphaned tags not being cleaned up
  • Fixed: Fixed paging back in the image reading opening chapters at the start
  • Fixed: Fixed the annotation drawer in the book reader hanging when a large amount of annotations are present
  • Fixed: Fixed smart filters with no results being completely hidden on the smart filter page
  • Fixed: Fixed reading sessions in which an epub chapter was finished not having a recorded word count
  • Fixed: Fixed epub reader not saving the correct reading position under specific circumstances (Thanks @vipin2310 )
  • Fixed: Fixed Known Issue parsing from Github using wrong header
  • Fixed: Fixed Markdown parsing not working on sub-nested lists
  • Fixed: Fixed an issue where specials weren't prioritizing title comicinfo
  • Fixed: Fixed the No Transitions setting not properly applying to all animations in the site
  • Fixed: Localization issues with Korean where chapter marker could still be in front of edge
  • Fixed: Ensure comic libraries prioritize volume tab over specials tab when no issues
  • Fixed: Fixed localization switching not updating the UI correctly
  • Fixed: Fixed a bug where card actionable menu wasn't properly closing the submenu after highlighting off it.
  • Fixed: The auth guard for the OPDS download endpoint was using the Download role instead of the policy. The original version was causing an error. (Thanks @jfenske89 )
  • Fixed: Fixed an off-by-1 issue which caused duplicate characters at the end of an annotation
  • Fixed: Fixed a migration failing to run if you had data during Daylight savings time jump.
  • Fixed: Fixed related series not having progress
  • Fixed: Fixed a few incorrect strings in emails (Auth Key expiring, Token expiring soon)
  • Fixed: Fixed using escape to close the search input not losing focussed and closing full screen
  • Fixed: Fixed reading session history (Activity tabs) being paginated weirdly
  • Fixed: Fixed reading estimates being wrong for EPUBs
  • Fixed: Fixed ToC in the book reader not displaying all chapters under some circumstances. (Thanks @DreamAvalon)
  • Fixed: Fixed chapters sometimes not being full read while reading in webtoon mode
  • Fixed: Fixed the scanner merging several series into one under specific circumstances
  • Fixed: Fixed a missing localization in import MAL stacks
  • Fixed: Fixed a bug where the manga reader could try and preload a chapter when we haven't resolved the next/prev chapter id yet.
  • Fixed: Fixed jumpbars being broken on Collection and Reading List page
  • Fixed: Ensure Weblinks from ComicInfo can be extracted when space separated
  • Fixed: Fixed regex for Korean Volume being recognized as Episode word (화)
  • Fixed: Fixed a few missed auth apis not returning auth keys correctly
  • Fixed: Fixed reading direction changes not being saved to implicit profiles
  • Fixed: Fixed fonts not being shown after uploading one
  • Fixed: Fixed series metadata failing to update under specific circumstances
  • Fixed: Fixed encode/decode errors for non-series entities
  • Fixed: Fixed a case where a Korean volume marker could trigger the wrong regex and recognize as a chapter as well
  • Fixed: Ensure annotation and bookmark uses the same selected text calculation method to ensure the full word is carried into the overlay form
  • Fixed: Fixed an edge case where Never showed for last active
  • Fixed: Fixed Volume progress tracking not working on Mihon (Thanks @Nedra1998 )
  • Fixed: Fixed a fallback in epub writer parsing not being guarded when valid, 3.2 role refinement is used (
  • Fixed: Fixed arrow keys not working without first clicking on the manga reader
  • Fixed: Fixed not being able to use arrow keys to scroll on FF in manage reader
  • Fixed: Fixed the cover image on detail pages being too large sometimes
  • Fixed: Fixed panels not properly working with the new reading sessions
  • Fixed: Fixed an edge case where ReadingHistory (table not used) could have an index exception

Theme

  • --card-image-height, --card-image-width are now usable
  • Converted the whole UI to use REM (except 2 cases where px is required)
  • Added theme variables for download indicator: --card-download-indicator-size, --card-download-indicator-icon-size, --card-download-indicator-icon-color, --card-download-indicator-box-shadow, --card-download-indicator-active-color, --card-download-indicator-active-track-color, --card-download-indicator-completed-color, --card-download-indicator-queued-color

API

  • Added: Added the ability for Kavita to expose how it parses information via plugin/parse and plugin/parse-bulk API.
  • Unknown or inaccessible resources will now return 404 Not Found when trying to be accessed
  • POST /volume/update is now available for updating metadata ids on the Volume itself
  • Fixed the enums not rendering out the description field with Swagger and fixed up some of the auth information.
  • Removed all Deprecated APIs (this was communicated last release, I reached out to the big app providers)
  • filter/encode and filter/decode have been replaced by entity-flavored variants.
  • Added a query parameter for reading sessions (generateSessions) for Mihon, defaults to true
View originalPermalink
How v0.9.0 went
v0.8.9.1

v0.8.9.1 Hotfix

Changed 1
  • The image reader will now always send a progress event for chapters with exactly one page
Fixed 5
  • Fixed re-read prompt not being disabled when setting is 0
  • Fixed empty re-read setting breaking saving flow
  • Fixed theme being reset
  • Fixed some tables not loading in the statistics page for admins, breaking the page
  • Fixed inconsistent behaviour with the /api/plugin/authkey-expires endpoint

We decided to issue a small hotfix, with minor fixes and some enhancements on a new endpoint related to Auth Keys, to ensure it's easy from the get-go for external app creators.

Changed

  • Changed: The image reader will now always send a progress event for chapters with exactly one page.

Fixed

  • Fixed: Fixed re-read prompt not being disabled when setting is 0
  • Fixed: Fixed empty re-read setting breaking saving flow
  • Fixed: Fixed theme being reset
  • Fixed: Fixed some tables not loading in the statistics page for admins, breaking the page.
  • Fixed: Fixed inconsistent behaviour with the /api/plugin/authkey-expires endpoint.
View originalPermalink
How v0.8.9.1 went
v0.8.9

v0.8.9 - New Stats pages, Journal Style reading, 50x Faster Scanner, and so much more!

Added 5
  • Auth Key system allowing users to create named API keys with configurable expiration and length (9-32 characters) as replacement for JWTs
  • Client Devices feature to track and manage different devices interacting with Kavita, with ability to rename and view mechanism type
  • Journal-style progress tracking to record reading sessions and re-read counts without overwriting previous progress
  • Double Reader page offset feature modeled off MangaDex
  • Device-bound Reading Profiles allowing reading profiles to be bound to specific client devices with precedence over library or series settings
Changed 4
  • Auth stack reworked to be driven completely in middleware layer, extracting key information from different authentication mechanisms and coalescing device from fingerprinting
  • Scanner is now multi-threaded with significant performance improvements achieving up to 112x faster scanning speeds
  • Cover generation moved to background async thread, occurring after series appear in Kavita rather than simultaneously
  • API authentication now works consistently across all authentication mechanisms with same interface for all APIs

Happy New Year! Every year, I hope to have a release at the end of December or the Start of January, but it never seems to happen; the scope of Kavita releases have just become too large. This release of Kavita is quite expansive and completes on of the core goals I laid out last year - Journal Style Progress. But it's not just that, it's 12 Feature Requests with a total of 98 upvotes, it's reworking a lot of foundational code now that we have multiple authentication mechanisms, improving Developer Experience working with Kavita (no more JWT management), a MASSIVE speed improvement to the scanner, and of course a brand new stats system for Kavita (with a lot of inspiration from Hardcover).

Since this is such a massive release, I wont be able to highlight all the large improvements, but I know you'll love it. Before I go some of the big hitters, I want to talk about what Amelia and I have planned for this year. Carrying over from last year, there are a few more areas of interest, then we plan to step back and start building an official, native mobile app experience for Kavita.

The key areas of focus:

  • Reading List Overhaul Project - I've worked closely with the CBL group to define some key improvements to Kavita's reading list experience along with the CBL import.
  • Kobo Sync - Another big one that most other servers have adapted. We have Progress Sync support already, but this is the icing on the cake.
  • Kavita+ Enhancements - Hardcover and MangaBaka (once it's stable) are still on my list, along with a slew of issues that have been piling up.

I look forward to your feedback on the new release. Before we go, I'd like to give a shout-out to @daydreamrabbit who has been very active in testing this release and opened a whopping 39 issues this release, of which we closed 26!

Highlights

First off, let's focus on the Foundations of Kavita with 3 key features:

Auth Stack

Last release, Kavita added OIDC into the mix of authentication. While not an issue, users started noticing inconsistency on when their last updated for the accounts were, asking for it on OPDS. Kavita has grown to be quite complex and I knew with this release, I wanted the concepts of Devices (something that has prevented binding reading settings per physical device).

The Auth stack has been reworked to be driven completely in the middleware (the code that runs between your browser making the request and Kavita's code actually handling it). This middleware stack extracts the key information from the different authentication mechanisms, coalesces a device from fingerprintint, and tracks it if needed. A lot of polish has gone into this layer to ensure speed. This also results in easier code for Amelia and I when building new APIs.

Developer Experience

Since we have this new Auth stack, it was finally time to move off the JWTs for external applications. JWTs were handy because they fit into the existing codebase seamlessly, but with the power of the new auth, it doesn't matter how you connect, Kavita will derive the same data and interface for all APIs to use. So now, any user can create a named Auth Key (replacing the hardcoded api key) with their own expiration (or never) and a configurable length (9-32 characters). Attach that as the header (x-api-key) and you will have the same benefit as using a JWT. If there is an expiration, use /api/plugin/authkey-expires.

Client Devices

Client devices are the last piece of the puzzle and a critical aspect of this release. A client device is any device that interacts with Kavita. Users can after the fact rename them, but as you see here, the mechanism (Web App, OPDS Client, KOReader) and user are present. This will help end users know how different external apps, but also drives the activity mechanism (like Plex has) to ensure you don't bounce your server while people are reading.

Journal-Style Progress

This is the main focus of the release and allows for Kavita to track how you read much more closely. With the new auth stack and devices as foundations, Kavita can now track reading sessions and re-read counts (more about this below). No longer will you have to overwrite progress when you re-read a book.

Massive Scanner Improvements

We got some big improvements thanks to @Fesaa (Amelia)'s smart thinking and some realizations we had around managing contexts in the scan loop. The scanner is now multi-threaded with none of that old FK issue to boot. To quote some of our big comic collectors:

14 days -> 3 hours over 141K files (112x faster) 10 days -> 4 hours over 50K files (60x faster) 3.5 hours for 96K archives with 32 threads

The only thing of note is that covers do not show up at the same time as the series in Kavita. They are now done on a background thread in a more async way. I think the improvements are worth the trade-off.

Double Reader Page Offset

This is a big hitter the community has been asking for (37 upvotes) since I redid the Double Reader experience and it's finally here. It's modeled off MangaDex and was contributed by @linkion.

Device-bound Reading Profiles

Another big one is binding of Reading Profiles to client devices. You can already do per-library/series, but now as well directly to a device (which takes precedence if you're using that device).

KOReader

KOReader got a ton of polish. In the last release, users reported the Progress Sync not working reliably. I went back in there (now with a much easier to type Auth Key) and polished everything. While I was doing this work, I decided to expand support to all files (Pdf, Epub, Archives). The progress syncing will work great with Kavita for all your reading needs.

New External Apps

Lastly, a few new apps have launched around Kavita. The first is Kamare, a Koreader plugin that uses Kavita's API (resulting in a much better experience) and a custom reader for consuming comics.

Inkita is an android app built for Kavita. It's still pretty early in development, but fully functional. I would highly recommend checking it out if our PWA doesn't work for you.

OPDS

I also spent a whole day reworking a lot of the OPDS code to make it MUCH faster and streamlined some of the naming code to avoid things like Chapter Chapter 1. Just in time as a few users brought up timing issues.

The Progress Overhaul

One thing that has bugged me is Kavita has no concept of reading time and no concept of reading count. Every time a new Nagatoro volume came out, I re-read the past few Volumes to refresh myself. The original progress events were lost and my stats got messed up. That's no longer a problem with the new system.

Re-read Prompts

First off, users can now configure (default 30 days) if they should be prompted to re-read the last chapter/volume. When you choose to re-read it, Kavita will track that it has already been fully read. You can see the counter of how many reads in the series detail page.

Profile

User stats are now in the Profile screen which can be accessed by clicking your name in the header. You can opt-in to share your stats with others on the server. We took a lot of inspiration from Hardcover's excellent designs and adapted to the generic nature that Kavita is, but I think it really turned out great. Here are a few snippets from the page.

Stats Page

Server stats also got reworked and some of the management graphs were moved to their own tab. Likewise, this was a massive overhaul, so here's a teaser.

Added

  • Added: Added a library setting to automatically copy weblinks from the first chapter in a series to the series. Defaults to false. (FR #3857, 2 upvotes)
  • Added: Volume and chapter detail pages will now show release years (FR #4145, 1 upvote)
  • Added: Added a library setting to set a default language for series when none is set in metadata (FR #4085, 1 upvote)
  • Added: Added custom keybinds, allowing users to remap, and add up to 5 keybinds per action. (FR #2563, 11 upvotes)
  • Added: Added some new custom keybinds for the site navigation.
  • Added: New settings for OPDS to allow a user to turn off Embedding the progress indicator in the title (great for KOReader, bad for Panels) and injection of a Continue Reading entry at the top. (FR #4131, 2 upvotes)
  • Added: sorting series by user rating (FR #4210, 1 upvote)
  • Added: Added the ability to create named Auth Keys with custom length (9-32 characters), expiration date per-user. Kavita will email users that the key is expiring soon or has expired if email is setup on the instance. (FR #3539, 3 upvotes)
  • Added: User LastActive will now be updated on any activity with Kavita
  • Added: Kavita now tracks all interactions with it for authenticated users/api/opds and will create a Client Device to represent interactions. Users can rename the devices or remove them. Devices contain some basic fingerprinting to avoid creating necessary noise.
  • Added: Kavita now allows admin's to see who is interacting with their server, on what device, and if they are active or not.
  • Added: Kavita now tracks reading sessions and will drive statistics from these. Reading sessions are created per-user on reading activity and expire after 30 minutes without further activity or at midnight. Reading sessions track what was read, how much, and total. Kavita will compact the data daily into a separate table for historical reasons with higher level aggregations.
  • Added: Kavita will now keep track of how many times you read a chapter/series (re-read count)
  • Added: Kavita will now prompt you if you haven't read a chapter after X days (configurable in settings) to either start over from the beginning, read incognito, or continue as-is. Reading over from the beginning will trigger a total read count increment.
  • Added: Added the ability to have a personalized profile screen to share with other users on the server. This is an opt-in feature. Profile screen will show information about what you do on the server, interesting facts about your reading habits, and reviews (a separate opt-in control).
  • Added: Users can now upload a profile image of themselves for their profile page and any other social interactions.
  • Added: Added the ability to filter annotations by likes
  • Added: Kavita now accepts an x-api-key header with an Auth Key for authentication. External apps no longer need to deal with JWTs. New API plugin/authkey-expires to check expiration on auth key.
  • Added: Profile pictures will sync with the picture claim if the user currently has no profile picture and OIDC sync is enabled.
  • Added: Added the ability to change the PDF renderer resolution (Mihon-apps) via a Server Setting. The admin can choose Default (1080x1920), High (1920x2560) or Ultra (2160x3840) (Thanks @StereotypicalCat)
  • Added: Massive overhaul to the server stats page. Focused into 2 tabs: Stats and Management. Stats gives you some unique insights into how your server is being read from with aggregate data. Management provides high level information like files added over time, spread of formats, publications statuses, etc.
  • Added: Reading profiles can now also be bound per device. Profiles with a device get precedence to profiles without. Each series can have at most one profiles for each device, and one without any. (FR #2929, 34 upvotes)
  • Added: Added stat collection for total pages/words/time read for users for an planned social badge feature
  • Added: Added the ability to sort by a user's own rating (FR #4210, 1 upvote) (Thanks @ToniKielo)
  • Added: Page offset toggle for double page manga reader mode to manually adjust page alignment for proper double-page spreads, including a keybind to toggle it. (FR #2660, 37 upvotes) (Thanks @linkion)
  • Added: Added the ability to read with Progress Sync for all files in Kavita (archives/pdf/epub) using Koreader (#4125, 3 upvotes)
  • Added: Added a 1am background job that ensures admins always have the appropriate side nav links for libraries. 2 users have reported an issue. I couldn't reproduce, this will fix just in case on their systems.

Changed

  • Changed: Highest count in series info will now show no data if it's an internal magic number.
  • Changed: People pages will now also show external links to MyAnimeList and Hardcover if their respective IDs are configured
  • Changed: External ID tooltips will now show the character link when the person is only a character
  • Changed: Changed the files at root warning during library creation to be a lot more obvious
  • Changed: Backup files will now use ISO 8601 to denote time. (FR #4012, 2 upvotes)
  • Changed: Updated the design of the tooltips across the app for better contrast
  • Changed: Run metadata saving, and extra work on separate threads during the scan loop
  • Changed: Show a progress bar in the UI for the scan
  • Changed: Cover UI updates will now have a progress bar with information in it
  • Changed: Massively improve the performance of updating a series during the scan loop
  • Changed: The backup service now uses the SQLite command VACUUM INTO to create a working copy of the database file at the time of backup. (Thanks @DieselTech )
  • Changed: Removed API Key from User
  • Changed: Streamlined LastActive for user accounts to be handled for any API activity
  • Changed: Opening the readers will no longer send a progress even immediately, you must paginate/scroll to send progress.
  • Changed: Email-based devices are now called Email Devices to not clash with new Client Devices.
  • Changed: Review cards username can be clicked to load their profile.
  • Changed: Updated to .NET 10
  • Changed: Remove default keybinds referencing meta keys (Windows Key)
  • Changed: Do not use OIDC Authentication scheme if OIDC failed to initialize. Extra fail safes in case users OIDC did not initialize successfully, to not auto redirect etc
  • Changed: (Kavita+) Don't block startup to check for K+ license, do it in a background thread instead.
  • Changed: OIDC roles are now case insensitive when syncing.
  • Changed: Cleaned up some UX around customize stream items settings page
  • Changed: All tables will now use card layout for mobile with full functionality.
  • Changed: (Performance) Improved the get continue point api
  • Changed: Removed progress tab on volume/chapter edit modals
  • Changed: On mobile, download actionable will be pushed to the top layer (aka it's not nested anymore)
  • Changed: OIDC cookies persist between restarts, removing the reauth flow each restart
  • Changed: Display a warning when the read only role is selected when selecting roles for a user to really drive home what it means
  • Changed: (Performance) Slight memory improvement in creating images from PDFs
  • Changed: Split left/right & up/down into different keybinds
  • Changed: Updated to Angular 21
  • Changed: Removed user stats page in favor of the profile page. Migrated the ability to click Total Comics/Books/etc to get historical data there as well.
  • Changed: All but Manage Users/Libraries tables will now turn into cards on mobile viewports
  • Changed: Marked a good amount of APIs as deprecated if they were no longer in use. These will be removed in v0.9.0 (next year).
  • Changed: A lot of polish overall on Profile and Server Stats page
  • Changed: Implicit profiles will now automatically be bound to the device you're using when they're created
  • Changed: Search now searches against aliases for People
  • Changed: (OIDC) Added a warning when auto save is required and a button to reset external Ids
  • Changed: (Stats) Stop reporting average time to open an archive to Kavita Stats after the instance has sent 2 reports.
  • Changed: Details page for volume/chapter will show the full file path and the koreader hash if present
  • Changed: Removed a lot of dead localization keys
  • Changed: Server Stats is now under Insights section
  • Changed: Large optimizations on OPDS APIs. Things should be more consistent and faster across the board.
  • Changed: Scan Folder API will now not force cover regeneration
  • Changed: Event widget now shows active readers, rather than online users.

Fixed

  • Fixed: Fixed not being able to change a person's name and use it as an alias in the same action.
  • Fixed: Fixed bulk bookmark actions, showing view series.
  • Fixed: Fixed logging out with OIDC throwing an exception when using Authelia
  • Fixed: Fixed some OIDC errors showing a json response rather than redirecting to the login screen
  • Fixed: Fixed a potential edge case in the match modal code, allowing the spinner to stay indefinitely
  • Fixed: Fixed broken link image being the wrong colour for light/dark themes
  • Fixed: Fixed chapter detail, always showing a link to Kavita
  • Fixed: Fixed character external AniList links being incorrect
  • Fixed: Fixed locations always being locked after changing any role.
  • Fixed: Fixed unused person cover images not being removed.
  • Fixed: Fixed publication date, not being localized
  • Fixed: Fixed chapters by role streams on person page, not sorting volumes correctly.
  • Fixed: Fixed sometimes not being able to upload person cover without resetting first.
  • Fixed: Fixed not being able to remove OIDC configuration once set
  • Fixed: Fixed magic numbers showing up in the publication status tooltip
  • Fixed: Fixed selected language not always showing up in edit modals after opening it
  • Fixed: Fixed KOReader Progress sync again
  • Fixed: Fixed a bug where lastReadDate wasn't being calculated correctly on multiple APIs
  • Fixed: Fixed recently updated not using pagination, causing the dashboard to become unresponsive when a large amount of series were recently added
  • Fixed: Fixed some library settings not saving on creation.
  • Fixed: Fixed the db being missing in backups rarely when it was already in use (Thanks @DieselTech )
  • Fixed: Fixed some flakiness with the keybind pickers
  • Fixed: Readonly role handling wasn't explicitly on the annotation code
  • Fixed: Some old migrations were running on each startup for no reason
  • Fixed: Some old app users (~4 years ago) didn't have createdUtc filled correctly for their User Table
  • Fixed: Some old migrations were missing date columns in AppUserRating
  • Fixed: Only show entity size on detail pages when the user is admin or has download role.
  • Fixed: Fix ChapterDto missing some locks
  • Fixed: Fixed webtoon reading mode icon being incorrect
  • Fixed: Fixed edit series relationship form not always rendering names
  • Fixed: Fixed not being able to remove the first series relationship
  • Fixed: Potential fix for bookmark image button in epub reader positioned poorly
  • Fixed: Fixed default language, Remove Sort Prefix, and Inherit web links from first chapter not saving on library creation
  • Fixed: Fixed Reading Profile action menu not working on library detail page
  • Fixed: Fixed OIDC not being enabled if the IDP is not reachable at startup. Must be reachable on the first request.
  • Fixed: Fixed container process ignoring signals, notably preventing cleanly stopping the container with docker stop or podman stop (Thanks @ZeroKnight )
  • Fixed: Fixed a bug where a readonly admin account could be valid
  • Fixed: Fixed how scheduling tasks with a random spread works to be more reliable.
  • Fixed: Fixed a bug where ASIN weren't allowed on Edit Person modal
  • Fixed: (Kavita+) Potential fix for Kavita refreshing metadata and loosing match on series
  • Fixed: Fixed a bug where bookmarks could be orphaned in the DB. You still will never lose the bookmarked files.
  • Fixed: Fixed issues where some PDFs wouldn't render correctly
  • Fixed: Fixed dropdowns having a black chevron in a dark theme.
  • Fixed: Fixed an issue where some cache profiles weren't being respected on Browsers
  • Fixed: (OIDC) Fixed being logged out when Kavita restarts with Docker
  • Fixed: Don't let users download a PDF within the reader via Ctrl+S without the download role
  • Fixed: Fixed Edit Chapter modal not having an Editors field
  • Fixed: Fixed some settings being reset to their default value when saving something in the general tab
  • Fixed: Fixed card items not aligning with width to cover images
  • Fixed: Fixed not being able to add External Sources
  • Fixed: Fixed not being able to edit your own Age Rating restriction even if you have the role
  • Fixed: Fixed Reading Profile names not updating due to some normalization issues
  • Fixed: Kavita is more lenient when deleting bookmarks.
  • Fixed: Fixed delete not working on chapter detail page
  • Fixed: Fixed OPDS recently-added not having pagination in the feed
  • Fixed: Fixed a few migrations that were running on each startup
  • Fixed: Fixed actionable modal being cutoff
  • Fixed: Fixed a bug with light novel libraries sometimes choosing the wrong starting location
  • Fixed: (Kavita+) Fixed a bug where check license button only worked the first load.
  • Fixed: Fixed a bug where after removing a theme, the old theme wasn't removed from the page and could result in some style bleed until refresh

API

  • GET /api/upload/reset-chapter-lock has been marked deprecated and will be removed in v0.9.0 (next release)
  • POST /api/want-to-read/ will be removed in v0.9.0, use v2 instead
  • POST /api/account/reset-api-key is removed, use /api/account/rotate-auth-key
  • GET /api/users/myself is now deprecated and will be removed in v0.9.0
  • GET /api/series/chapter-metadata, POST /api/series, POST /api/series/recently-added, POST /api/series/all, POST /api/upload/reset-chapter-lock, GET /api/stats/user/reading-history, GET /api/stats/server/top/years, GET /api/stats/reading-count-by-day, GET /api/server/count/year, GET /api/stats/server/top/users, GET /api/reader/all-chapter-progress, GET /api/recommended/quick-reads, GET /api/recommended/quick-catchup-reads, GET /api/recommended/highly-rated, GET /api/recommended/more-in, GET /api/recommended/rediscover will all be removed in v0.9.0 (next release)

Theme

  • Added css variables to style tooltips: --tooltip-caret-color, --tooltip-bg-color, --tooltip-outline-color
  • Added misc css variable --offwhite-text-color
  • New css variables --dropdown-icon-white and --dropdown-icon-black
  • Added --activity-card-client-platform-badge-bg-color, --activity-card-client-device-badge-bg-color for Activity card badges
View originalPermalink
How v0.8.9 went
v0.8.8.3

v0.8.8.3 - OIDC and OPDS Hotfix

Changed 2
  • Kavita will now filter out unsupported scopes before requesting them from your OIDC provider
  • OIDC providers are now required to use tls (https)
Fixed 7
  • Fixed a bug where announcements with images would scale weird
  • Fixed some OPDS feeds not including next markers (pagination) for certain total sizes
  • Fixed OIDC not working when a custom base URL is set
  • Fixed admin users having age restrictions applied when created with default permissions via OIDC
  • Fixed not being able to set default age restriction to Not Applicable once changed
  • Fixed a race condition when changing both metadata and cover image of an entity, where one of the changes could be lost
  • Fixed OPDS not working correctly when a base URL is set

Looks like there were a few issues with OIDC and a bug in OPDS Pagination that didn't surface during testing. If you want to help us avoid hotfixes, join our nightly program and expand our testing capability. See you in v0.8.9.

Changed

  • Changed: Kavita will now filter out unsupported scopes before requesting them from your OIDC provider
  • Changed: OIDC providers are now required to use tls (https)

Fixed

  • Fixed: Fixed a bug where announcements with images would scale weird
  • Fixed: Fixed some OPDS feeds not including next markers (pagination) for certain total sizes.
  • Fixed: Fixed OIDC not working when a custom base URL is set
  • Fixed: Fixed admin users having age restrictions applied when created with default permissions via OIDC
  • Fixed: Fixed not being able to set default age restriction to Not Applicable once changed
  • Fixed: Fixed a race condition when changing both metadata and cover image of an entity, where one of the changes could be lost
  • Fixed: Fixed OPDS not working correctly when a base URL is set
View originalPermalink
How v0.8.8.3 went
v0.8.8

v0.8.8 - Epub Reader Overhaul, an Annotation System and OIDC!

Added 13
  • OIDC/SSO integration allowing server admins to configure OpenID Connect authentication alongside or replacing native authentication
  • Custom font support for Epub reader with ability to upload font files or import from Google Fonts
  • Annotation system for Epub reader with highlighting, rich text comments, and five configurable highlight color slots
  • Ability to share annotations with other users on the server with opt-in privacy controls
  • Upvoting functionality for user annotations
  • All Annotations view accessible from user menu to see all highlights and notes across books
Changed 1
  • Epub reader UX and codebase completely refreshed after five years
Fixed 1
  • Text bleeding issue in Epub reader

This is a massive release that Amelia and I have been working on for the past 3 months non-stop. If you recall from the last release notes, I said I wanted to focus on Feature Requests and so we picked up a few of the most popular requests: OIDC (170+ upvotes), Custom fonts for Epub reader (25+ upvotes), and Highlight/Annotation system (40+ upvotes). This is a feature packed release, so buckle up.

Epub Reader Refresh

First off, let's start with the new Epub reader. When tackling Annotations, we took the opportunity to refresh the UX and the underlying codebase, since it has been 5 years from when I originally wrote it. While tackling a new UI, I thought to also tackle some long standing, hard to reproduce issues, like text bleeding. Text bleeding ended up eating 3 weeks of pure madness as Amelia and I tried to fix (or just reproduce reliably), until we opened a bug bounty and @privatestefans fixed it. Even with all the pain, we brought some requested features around bookmarking images in the reader as well.

Epub Fonts

This has been a constant ask from many users and we finally got it out. From the font management screen, any user can download fonts to use within their books. Either upload a font file or better, copy/paste a Google Fonts url. Fonts can then be assigned to books via reading profiles.

OIDC

This release introduces one of our most requested features to date: OpenID Connect (OIDC/SSO) integration. Server admins can now configure OIDC to work alongside or fully replace Kavita’s native authentication system. The setup is designed to be straightforward to get it up and running quickly, while still offering advanced configuration options for those who need more control.

Admins can choose to enable automatic account creation, allowing users to join the server without manual intervention. When active, newly created accounts inherit the configured default roles and age restrictions. For more fine-grained control, role syncing can be enabled—bypassing defaults in favor of permissions defined by the identity provider, so you can manage all user access centrally.

Read all about it on the wiki.

The Annotation System

Users have been asking for the ability to highlight text and add notes when they read and have expressed a strong need for a software in the self-hosting community to tackle this need. Since the start of the epub reader 5 years ago, I wanted this system (and even solved the implementation), but never had time to tackle it.

The annotation system is currently implemented for the epub reader and it will be for the foreseeable future. It offers a way to highlight any passage of text and to write a comment about that with rich text (bold, underline, lists, images, etc). You can see any annotation within the reader to jump around, you can view from the series page or the new All Annotations view (accessible from the user menu in the top right).

Annotations have an owner, a marker if there are spoilers in the comment, and a highlight slot. There are a fixed 5 highlight slots with predefined colors, but you can change them at any time. Since annotations are bound to the slot number, you can change the color system and all annotations will get that update.

Kavita also added some social aspects that are opt-in. You can opt-in to share your reviews with users on the server (with some extra restrictions on libraries and age ratings) and also opt-in to seeing other users' annotations. If you do opt-in to viewing, you can also upvote ones you agree with. Filtering and Sorting against these fields are planned for v0.8.8, due to a dependency on a feature in .NET 10.

Lastly, Annotations can be exported (either everything or a filtered set of Annotations) in JSON format. I took inspiration from other Obsidian plugins. While I am not going to write an Obsidian importer myself, if someone does, I'm open to working with you to get the best experience.

OPDS Love

OPDS has gotten a lot of polish and love from me this release. I had originally dived in to finally polish the Koreader sync experience, but caught swept up in polishing the experience, along with a few FRs from users that I think has brought a lot of UX to Kavita's implementation. First, pagination across the board. Not all apps support this unfortunately, which is where our next item shines: Continue From. This new item will be first and foremost if you have any reading progress in the feed. It is a shortcut to avoiding having to scroll hundreds of items. Kavita now also encoded progress icons into the titles to make it easier (since clients are also very loose with supporting metadata).

What's Next

This release was quite challenging with the epub reader overhaul, but extremely satisfying polish and fix many outstanding issues. I can't wait to hear the feedback on the new annotation system. I want to extend a huge thanks again to our nightly testers and those that provided feedback for the annotation system (and OIDC support).

Next release I want to continue with my original plan of tackling more of Kavita+ and it's integration in Kavita, along with the backend switching to MangaBaka, focusing on a new Progress system to allow for richer stats, and a few more Feature Requests that didn't make it this release.

Added

  • Added: Added OIDC Authentication support. Users can now log in with OIDC providers (Auth0, Keycloak, etc). Admins can set up default user profiles for OIDC-based accounts. (Thanks @Fesaa for tackling this)
  • Added: Added automatic account creation when logging in via OIDC.
  • Added: Allow admins to delegate user management to OIDC (Sync libraries, age restrictions, etc with OIDC roles)
  • Added support for requesting custom scopes from your OIDC provider
  • Added: Added the recent 'Enable Metadata' Library setting to KavitaStats reporting.
  • Added: Ability to export and import Metadata Settings
  • Added: Brought the manage metadata settings from Kavita+ exclusively to all of Kavita and thus the ability to have it work against file/api-based metadata. This allows for custom rules on how metadata is processed from file-based metadata (FR #3862, 1 upvote)
  • Added: Manga library type now supports Tome keywords for filename parsing
  • Added: Added a new library setting to remove common sort prefixes (The, A, An) from Sort titles. Disabled by default (FR #3037, 25 upvotes)
  • Added: Added the ability to upload your own fonts to Kavita and have any user use them in epub books. Admins can force delete. Read only users cannot add or remove. Google font urls and woff2/woff/tff/otf files are supported. (Closes FR #2550, ~40 upvotes)
  • Added: New user preference to enable/disable colorscapes. Will override theme settings when disabled.
  • Added: (OPDS) All feeds from OPDS now support pagination
  • Added: Added support for pagination in the Recently updated endpoint (OPDS and normal)
  • Added: (Epub Reader) Kavita's menu will now show progress and estimated time left to complete the book
  • Added: (Epub Reader) Added the ability to highlight text and add an annotation with rich text support.
  • Added: (Epub Reader) Added the ability to bookmark images. You can view and jump between bookmarked images within the reader or view them in the bookmark reader.
  • Added: Added the ability to create annotations around book text with rich text support.
  • Added: Added a basic search for annotation hook.
  • Added: Added the ability to export annotations into json format.
  • Added: Added a browse annotation page (from user menu) with filtering and sorting. Can export a filtered view or all annotations. Can also bulk delete.
  • Added: Added a file size filtering option for Series
  • Added: (Kavita+) Added the ability to resend the license/welcome email to your email from Kavita.
  • Added: Added social preferences to allow users to decide what, where, and when to share and view annotations and reviews
  • Added: Added the ability for users to like other users annotations (assuming appropriate opt-in settings)
  • Added: Total file size below series/volume/chapter title on the detail pages
  • Added: Added Folder path in the series details tab if you're an admin
  • Added: New user preference called Data Saver. Currently only disables prefetching on the PDF reader.

Changed

  • Changed: Cache Kavita locale as to not require the expensive operation
  • Changed: Auto disable double page mode on small screens in the epub reader
  • Changed: Blacklist and whitelist, age rating, and field mappings are now available without Kavita+
  • Changed: Blacklist and whitelist, age rating, and field mappings will now act on metadata data in your ComicInfo (Will require a scan) and via the API
  • Changed: Show a validation error in the UI for Edit Person - ASIN field, as it wasn't clear that a valid ISBN 10/13 code must be used
  • Changed: Don't allow users to save edit library modal without having at least one file type selected.
  • Changed: Optimized and cleaned up the PDF Metadata extraction code
  • Changed: When reading PDF metadata, if an encrypted pdf file is found, be more explicit when reporting to Media Errors
  • Changed: When there are files at the library folder root, warn the user that this is not supported in the Library Settings modal.
  • Changed: Update the dockerfile to use ubuntu noble base container image. Focal went EOL in May '25. Removed libssl 1.1 since it is no longer supported.
  • Changed: Renamed Comic (Legacy) to Comic (Flexible) and added subtitle explaining each library type more clearly (paired with a new wiki documentation)
  • Changed: Drawers in the epub reader are now resizable
  • Changed: Go to Page in the epub reader is now page 1 based, making everything consistent
  • Changed: Don't allow 2 column + vertical as Japanese readers told it makes no sense.
  • Changed: Added some basic hack support for epubs when they use ./ in the urls
  • Changed: (OPDS) If a user has reading progress on a Reading List/Series/Volume, inject a continue reading item at the top of the feed, to avoid needless scrolling.
  • Changed: (OPDS) Inject a unicode icon to showcase reading progress in the opds feed. (⭘◔◑◕⬤) (FR #4030, 2 upvotes)
  • Changed: (Kavita+) Added an extra warning to ensure users understand that Kavita is not Kavita+
  • Changed: (Kavita+) Added a dedicated Cancel Sub button on License page
  • Changed: (Kavita+) Prefill email for Manage/Cancel buttons
  • Changed: Added a loading animation for ToC drawer for slow connections
  • Changed: Added space as a keybind to toggle the action bars in the epub reader
  • Changed: Remove mentions of the analyze library option in the UI
  • Changed: Search results will now be sorted by length first to ensure short titles are always findable
  • Changed: Added an additional check to Manga volume/chapter parser to handle duplicate volume/chapter markers in the file: 'Series - Vol 1 Ch 2.5 - Vol 2 Omakes' This will now be parsed correctly as Volume 1 Chapter 2.5.
  • Changed: (Epub Reader) Removed the virtual page controls and now all pagination is around the actual pages. The old system led to a lot of confusion with little benefit.
  • Changed: (Epub Reader) Table of Contents is now in it's own drawer and separate from the reader settings
  • Changed: (Epub Reader) Personal Table of Contents (Text Bookmarks) is now in a separate drawer with the Image Bookmarks
  • Changed: (Kavita+) Only check for expired scrobbling token if there is an active license.
  • Changed: Bookmarks (epub or archive) now store chapter title
  • Changed: When a download is in progress, Kavita will keep the screen awake
  • Changed: Epub reader confirm dialog is now styled for book reader to match the book theme
  • Changed: Card detail layout will now also remember actual scroll position
  • Changed: Added a warning when no email has been setup on device screen
  • Changed: (OPDS) Any OPDS activity will now update LastActive on user's account
  • Changed: Removed duplicate information from series/volume/chapter details page
  • Changed: Review sharing is now linked to the newly introduced social preferences
  • Changed: Tweaked series detail page to move release year and size to the top section and thin out details tab.
  • Changed: Explicitly do not read metadata when disabled

Fixed

  • Fixed: Fixed not being returned to your last used page after being forcefully logged out
  • Fixed: Fixed field mappings not being normalized when matching
  • Fixed: Fixed cover image not saving for Edit Person modal
  • Fixed: Fixed initial create library flow not saving enable metadata setting
  • Fixed: (Kavita+) Fixes a warning showing up for expired AniList tokens while there is no active Kavita+ license
  • Fixed: Fixed overlapping buttons on non-English locales in Manage Library page (Thanks @fpammer )
  • Fixed: Fixed blank options in PDF reader due to ftl files not being supported
  • Fixed: (OPDS) Fixed an off-by-one bug on OPDS-PS with KOReader explicitly, as they don't follow the spec and send misleading numbers. (Thanks @fpammer for the help debugging)
  • Fixed: (OPDS) Fixed Open Search not sending total items in the feed.
  • Fixed: (Kavita+) Fixed a bug where Kavita+ was quitting early before checking for stale data in metadata matching
  • Fixed: (Kavita+) Ensure Kavita uses existing External Series Metadata over weblinks now that we have Match flow
  • Fixed: Fixed an issue where Koreader was not able to pull progress from Kavita
  • Fixed: Fixed bulk actions not being hooked up on the libraries settings page
  • Fixed: Fixed some internal metadata still being used when Enable Metadata is turned off
  • Fixed: Try to fix webtoon reader skipping chapters when opening fully read chapters
  • Fixed: Fixed an issue where Koreader was not able to pull progress from Kavita
  • Fixed: (Epub Reader) Fixed text bleeding issues with column-based layout
  • Fixed: Fixed some interaction weirdness with Yomitan
  • Fixed: (Epub Reader) Fixed an issue where if any DOM/UI layout changes happened outside the Kavita epub reader, it could break existing progress on books
  • Fixed: Fixed a bug when iframing was enabled, each api would log a warning statement.
  • Fixed: (Epub Reader) A lot of polish around reliability on column layout.
  • Fixed: (Epub Reader) Don't close the reader when the book line overlay was open and user hit Escape.
  • Fixed: (Epub Reader) Link rewiring for epubs now work with xhtml links
  • Fixed: (Epub Reader) Images could overflow in 2 column mode due to missing width calc
  • Fixed: Fixed a bug with K+ license message showing due to missing signal accessor.
  • Fixed: Fixed jump bar not properly using sort name instead of series name, which can throw it off if they differ.
  • Fixed: Fixed shift clicking not selecting all items from the last selection when switching entities on the series detail page
  • Fixed: Fixed missing keyword token in PDF Metadata parser
  • Fixed: Fixed a bug where primary buttons would sometimes render as blue
  • Fixed: Fixed a bug where the UI Jumpbar grouping didn't align with the backend one
  • Fixed: Request too large errors were getting grouped with a generic error.

API

  • Return 404 responses for api fallbacks
  • OPDS APIs will now start pagination at 1

Theme

  • Added CSS var for series detail title color, allowing themes to configure the color. Falls back to the default of white if color not supplied in theme. (Thanks @YodaDaCoda)
  • New CSS variables for better theming: (Thanks @gmahomarf) --card-title-text-color: Text color for card titles. --card-body-bg-color: Background color for card bodies (.card-body). --card-overlay-text-color: Text color in card overlays (e.g. the overlay when hovering over library entries). --side-nav-header-text-color: Text color of side navigation headers. --pref-side-nav-header-text-color: Text color of side navigation headers in the preferences page. --side-nav-item-color: The non-active counterpart to --side-nav-item-active-color, i.e. the color of the vertical bar to the left of side navigation items not currently active.
View originalPermalink
How v0.8.8 went
v0.8.7

v0.8.7 - Comic Metadata Downloading, Reading Profiles, Browse by Genre and More

Added 11
  • Add comic metadata for Kavita+ including publisher, imprint, people roles, issue-level reviews, release date, cover image, issue title, average rating, and summary from Comic Book Roundup
  • Add ability to browse and filter by people, genres, and tags
  • Add reading profiles feature to capture and manage reader settings bound to libraries and series
  • Add implicit reading profiles that capture changes made during reading sessions and persist between sessions
  • Add ability to promote implicit profiles into manageable profiles from the reader
  • Add Koreader sync support for epubs
Changed 4
  • Expand metadata system to work on any entity including people
  • Update Mihon extension with improved features and polish
  • Make actionables across the app smarter by only showing applicable options based on current status
  • Change libraries to not import collections and reading lists from ComicInfo by default, making it opt-in
Fixed 1
  • Fix multiple issues plaguing Kavita+ users with bugfixing and polish

This was supposed to be Scanner Improvements, but due to my 2 week holiday in the middle, then getting massively distracted when I got back, we ended up with some nice features instead. This release is feature packed with a ton of Feature Requests: Comic Metadata for Kavita+, Reading Profiles, Expanded Browse by support, Koreader Sync Support, Ability to disable metadata parsing (for those that want the old pdf parser), a revamped Mihon extension, and much more!

Before we get started, I first want to announce that @Fesaa has officially joined the Kavita team. She has been a strong and continuous contributor for the last few months, she's also is behind one of the most requested FRs (Reading Profiles). Really excited to continue our work together to make Kavita the best software out there.

Comic Metadata (Kavita+)

438843284-0fac5031-db71-48c6-9bde-0eaae1a2fb1c Can you believe everything you see is issue metadata from Kavita+? In this release, I have expanded the metadata downloading functionality to Comics. You get Publisher, Imprint, People roles, Issue-level Reviews (Critic and User), Release Date, Cover Image, Issue Title, Average Rating, and summary. This metadata applies at the series and issue level. Data comes from Comic Book Roundup.

Kavtia+ Comic data also has weekly release data, which is a nice added bonus. I am currently exploring if metadata around TPBs is useful. If you think it is, please create/upvote a FR and provide discussion to validate the work. I look forward to hearing if the Comic metadata is bringing value to you.

Browse (and filter) People/Genre/Tags

455074614-d22a39a1-f92e-443b-aa58-27968d8ccf7a

455074644-6c1d2cfa-d92c-40aa-b77b-36a442b3457b

In this release, I've also expanded the metadata system to People and provided what I thought was valuable items. Surprisingly, this took me about 40 hours to do, but now, the metadata system can work on any entity, so my plans for an issue/chapter page seem more feasible. In addition to this, you can now browse by Genre/Tags. Do note, anything with 0 series will not be further filterable by as there is no issue listing page yet. (You can reach the browse genre/tag screens from your user menu in top right of screen)

Reading Profiles

452782185-0fe8ac41-ecd5-42ef-aabf-2b5b49c09ab2

This is a massive feature delivering on a highly request Feature Request (100 upvotes). I want to thank Amelia for implementing it while I was on my holiday.

Reading Profiles capture your reader settings (image, pdf, epub) into an entity that can be bound to a set of Libraries and Series. With the new system, you can bind a reading profile to a library (say double page to your comic library). Now, whenever you read in that library, the double page reader will be applied. Likewise, you can bind a Reading Profile to a Series as well.

In addition, there are Implicit profiles. These aren't visual in the UI, but instead capture any changes that are made mid-reading session. Going forward, any changes made during reading will persist between reading sessions for that series itself. From the readers, you can 'promote' the implicit profile into a manageable (shows in the manage screen). You can also optionally skip the implicit and save to the parent profile (aka the series/library bound profile).

The wiki has a great overview on how the new system works. See here.

An Updated Mihon Extension

Our Mihon extension has been updated. The original plugin was written by @ThePromidius, but hasn't been active for some time. @dear-clouds took it upon themselves to update the extension and bring some much needed polish. Here is a bit of a sneak peak to the changes, this is not an extensive list of changes. There is more to come, drop by the discord to share feedback.

Mihon compatible
  • Introduced a new filter: Special Lists — view your Want to Read or Reading lists.
  • Custom Detail Page for Reading Lists
  • Option to automatically update the cover to match the latest volume.
Fork Only
  • [Komikku] Suggestions display all related titles first.
  • [Komikku] Reading List suggestions now show all the list's items first.
  • Options to use GroupTags with multiple categories when available: Type (Library name) ; Demographic ; Genres ; Tags (works only on Forks that support this)

image

Koreader Sync Support

We finally were able to get the Koreader Sync Support PR merged. A huge shoutout to the developers and testers that helped get this ready for Stable. This is enabled by default and currently works on epubs (if you need archives, raise a FR). You can read up about this feature on the wiki.

The Misc Stuff

There were a ton of smaller changes that I wanted to make sure I call out.

  1. Actionables across the app are now smarter. Instead of showing add and remove from collection, it will check the status and only present options that are applicable.
  2. Libraries by default will not import collections/reading lists from ComicInfo (Manage Collections/Reading Lists). Many support issues arose and since most of the community recommends using the CBL project, it makes sense to make this opt-in.
  3. There was a lot of bugfixing and polish around Kavita+ this release. Hopefully most issues plaguing users are solved.
  4. Again, if you want to get to the browse genre/tag screens, you can get to it here:

image

With all that said, next release we are not working on the Scanner improvements. Instead, we have decided to take inspiration from this release and focus primarily on Feature Requests and take another look at how Kavita+ integrates into Kavita along with switching to MangaBaka as a data source for metadata.

Added

  • Added: Users can now use the shortcut Ctrl+K to open the search window
  • Added: Users can now add ratings and reviews at a per-issue/chapter level. For Volumes that are 1 file (books), any rating/review will transfer to the underlying chapter and be seemless). Book and Comic users are the primary audience.
  • Added: Kavita+ can now download ratings and reviews for individual comic issues (CBR). Ratings and Reviews for Comics come in Critic and User reviews and will show appropriately in the UI.
  • Added: (Kavita+) Kavita can now download series and issue metadata from ComicBookRoundup. New settings for each Chapter-level item.
  • Added: (Kavita+) New ratings from ComicBookRoundup on Series Detail page
  • Added: Added the ability to browse all Genres and Tags in the Server (FR #3173, 5 votes)
  • Added: Updated Matched Metadata to have a library type filter, given that a user might want to do just Comics or Manga at a time.
  • Added: Added a page to browse all Genres/Tags. Currently accessible from user menu until I find a good linking location.
  • Added: Added the ability to perform metadata filtering on Browse People (prev Browse Authors) page. Can filter by Role, Name, Series Count, and Chapter Count. Can Sort on Role, Name, Series Count, and Chapter Count.
  • Added: Added the ability to have custom Reading Profiles and bind them per Library or Series. (FR #2537, 102 votes) (Thanks @Fesaa for delivering this beast)
  • Added: Added an implicit Reading Profile system so changes made during a reading session will persist reloads but not affect the bound Reading Profile.
  • Added: Added a setting to disable the width override when reaching specific breakpoints (uses the new theme variables)
  • Added: (Kavita+) Scrobbling items can now be deleted in case you accidentally created one
  • Added: Added a new library setting to disable metadata parsing. This setting, when off, will ensure Kavita only uses filename parsing. (FR #3695, 4 votes)
  • Added: Added the ability for Kavita and Koreader to sync progress (Thanks @tgkenney for driving it home and @MFDeAngelo for doing 80% of the feature).

Changed

  • Changed: Reading lists will now only show one of promote & unpromote
  • Changed: Removed the opacity from tooltips
  • Changed: Go to Page prompts on book/manga reader now use a custom styled window
  • Changed: The ToC in the EPUB reader will now mark a chapter as current until the next chapter is reached
  • Changed: The reset password form will now be disabled if you do not have permissions to change your password
  • Changed: Collections will now only show one of promote & unpromote
  • Changed: Reading lists will now only show one of promote & unpromote
  • Changed: Actionables are more context aware. For example, a fully read Series wont show Mark as Read in the actionable. Does not yet apply to Add To submenu.
  • Changed: Slight changes to the UX around promoted Reading lists and Collections on the detail pages
  • Changed: (Security) Ensure the remote IP address is correct when behind a Reverse Proxy for Security log
  • Changed: Updated dependencies
  • Changed: On first startup (non-docker), rename appsettings-init -> appsettings to avoid users overwriting their appsettings.json (FR #3678, 2 votes)
  • Changed: (Kavita+) Ensure all people metadata from Kavita+ are trimmed of spaces
  • Changed: (Kavita+) Switched to a more optimized and better mechanism to choose a 'better' image to avoid switching to a lower res image from Kavita+
  • Changed: Optimized code for checking similarity for Person Cover image against known placeholders from AniList.
  • Changed: Smart Filters page now shows a preview of the smart filter
  • Changed: Disable Library settings to manage (create) Collections and Reading Lists from ComicInfo tags by default.
  • Changed: Made the cutoff before the More on the side nav to be slightly larger
  • Changed: When opening a Genre, Tag, Person, etc, the title of all series page will show a nicer message, like 'Written by {{name}}' (FR #3825, 1 vote)
  • Changed: Browse Authors/Artists is now a Browse People page with filtering and sorting. (Closes FR #2556, 39 votes)
  • Changed: Width override can now be saved to a reading profile
  • Changed: (Kavita+) Changed how Kavita+ decides if a series is completed to be more lenient
  • Changed: Known For section on a person detail page will now take all roles into account
  • Changed: (Kavita+) Kavita+ will now sync scrobble at a random minute instead of at the start of the hour
  • Changed: Carry over incognito between chapter loads (in the reader's url)
  • Changed: (Kavita+) Throw a toastr on matched metadata page when there is a rate limit issue.

Fixed

  • Fixed: Fixed an exception occurring when using Kavita over an insecure connection, causing some settings pages to not show up
  • Fixed: Fixed being unable to disable/enable automatic webtoon detection
  • Fixed: Fixed the volume modal missing the word count header
  • Fixed: Fixed preferences not displaying until locale took too long to load in
  • Fixed: Fixed the section jumper in the EPUB reader using the wrong terms
  • Fixed: Fixed download actionable missing for Admins in some cases
  • Fixed: Fixed the null cover image issue
  • Fixed: (Kavita+) Fixed the first chapter in a series not having a cover if K+ replaces the series cover
  • Fixed: When upgrading Kavita, clear out existing Github cache
  • Fixed: Fixed a lot of missing localization string (a never ending battle)
  • Fixed: Fixed a bug where series detail could show a default value when no localized name was present
  • Fixed: (Kavita+) Fixed a few bugs around choosing better images that broke for Series/chapters from Kavita+
  • Fixed: Fix an edge case bug where cache directory can get stuck existing but empty, preventing reading.
  • Fixed: Fixed a bug where body-level classes weren't being transferred to Kavita's epub html in some cases
  • Fixed: Fixed Match item showing Comic (Legacy)
  • Fixed: Fixed a bug where publisher images would fail to download
  • Fixed: Fixed some minor issues around the rendering of the sidenav items (Thanks @MrRobotjs)
  • Fixed: Fixed a rare bug with crypto.UUID by providing a fallback.
  • Fixed: Fixed a bug where updating the name of a person in the UI wasn't updating their normalized name, potentially breaking the flow.
  • Fixed: Fixed import menu (Import CBL) in pref side nav missing.
  • Fixed: (Image Reader) Fixed ReadingDirection impacting what clicking does when using UpDown ReadingMode
  • Fixed: Fixed a bug where book reader had poorly colored text/inputs from a recent bootstrap update.
  • Fixed: (Kavita+) This should fix the anilist token needing to be regenerated bug.
  • Fixed: (Kavita+) Fixed exception while trying to assign average rating when Kavita+ returned no ratings
  • Fixed: (Kavita+) Fixed Kavita+ publication status being removed after the series is scanned, Kavita+ now locks the field
  • Fixed: (Kavita+) Fixed Kavita+ publication status being wrong for EPUBs
  • Fixed: (Kavita+) Fixed Kavita+ publication status using volume count when series do not have any volumes
  • Fixed: (Kavita+) Fixed destination values autofilling the first letter of the source value (Genre/Tag mappings)
  • Fixed: Fixed the Known For filter sometimes not returning any results
  • Fixed: Fixed Genres, Tags not being restricted to Library
  • Fixed: Fixed People not being age, or library restricted
  • Fixed: Fixed scrobble history on mobile devices not being readable
  • Fixed: Removed 회 as a volume parsing marker per request
  • Fixed: Fixed reading list delete button not working

Theme

  • Added --input-hint-border-color, --input-hint-text-color added for the new shortcut hint on Search input
  • Added --setting-mobile-breakpoint, --setting-tablet-breakpoint, --setting-desktop-breakpoint theme variables
View originalPermalink
How v0.8.7 went
v0.8.6.2

v0.8.6.2 - General Settings Hotfix

Fixed 2
  • Fixed a bug where General settings changes would not save when IP Address was empty (default)
  • IP Address will now show the default value when empty

One more super small hotfix for an issue where some users were unable to update General Settings due to IP Address not being correctly set on Startup. Thanks to those on the Github Issue that joined discord. It was not easy to reproduce.

This will be the last hotfix.

Fixed

  • Fixed: Finally fixed a bug where when IP Address was empty (default), the General settings changes would not save
  • Fixed: IP Address will now show the default value when empty.
View originalPermalink
How v0.8.6.2 went
v0.8.6.1

v0.8.6.1 - A few small issues Hotfix

Fixed 6
  • Fixed a bug where Docker users could see the download button on change log component
  • Fixed settings not saving when using a docker install
  • Fixed not being able to delete volumes from the series detail view in bulk
  • Fixed UI visually not removing volumes in series detail view when they're deleted
  • Fixed some volumes having empty title hovers
  • Fixed Reading List with some medium sized lists getting stuck in the infinite scroller

A few bugs slipped through, major thanks to Amelia for driving them home.

Fixed

  • Fixed: Fixed a bug where Docker users could see the download button on change log component.
  • Fixed: Fixed settings not saving when using a docker install
  • Fixed: Fixed not being able to delete volumes from the series detail view in bulk
  • Fixed: Fixed UI visually not removing volumes in series detail view when they're deleted
  • Fixed: Fixed some volumes having empty title hovers
  • Fixed: Fixed Reading List with some medium sized lists getting stuck in the infinite scroller
View originalPermalink
How v0.8.6.1 went
v0.8.6

v0.8.6 - Spring Cleaning

Added 7
  • Ability to delete Smart filter streams from Customize Side Nav and Dashboard
  • Ability to rename Smart Filters in Customize settings
  • Ability to reorder the side nav without using customize screen by clicking the actionable on Home -> Reorder
  • New cleanup task that scans media errors and clears them out if they are ingested fine into Kavita
  • New preference option for allowing Kavita to automatically switch into webtoon reader mode based on image resolution
  • Ability to see all people across a reading list, the time it would take to read, and age rating
  • Support for partial (0.5) volumes for Korean filename parsing
Changed 10
  • Allow volume title card overlay for more than just book libraries
  • Updated hostname tooltip text to be more clear
  • Added a toast message for backfilling events on scrobble page
  • Button on Scrobbling Errors to a match button which can directly fix the issue, rather than the old edit and add weblink
  • Improved the tooltip for the scrobbling button to be clearer if it is on or off
  • Overhauled the reading list detail page to be more aligned with series detail page
Fixed 3
  • Webtoon reader now tracks the last page read when using the continuous reader
  • Non-English locales now work properly across Kavita
  • EPUB reader scrolling issues, especially on iOS

v0.8.6 is here and it's only fair to call this the Spring-Cleaning release as over the past 3 weeks, Amelia (@Fesaa) and I have closed out 65 issues from Github and polished a ton of the app. This release is packed with a lot of OLD issues finally being tackled and a few of them are quite annoying, so let's get started with the breakdown.

First, let's talk about the few enhancements that made it into the release. One of these enhancements was around Smart Filters and removing them from your customize list or renaming them. Both are features that weren't thought about in the initial implementation and just kept slipping through the cracks. Amelia took it upon herself to not only implement but also add some drag and drop reordering on the side nav for those that don't want to go into customize screen.

Another nice enhancement is around Media Errors. I implemented Media Errors after being inspired by Komga feature, but never gave it much more thought after that. You know what's annoying? Having 300 media errors that aren't actually reflective of the state of your media. The original thought was manually clearing the alerts, but why can't Kavita just do most of those checks for you? So that's what this feature brings. Kavita will check if files were successfully imported with at least 1 page or 1 word and clear out the issue for you.

The last big enhancement is around Reading Lists. I'm not a huge reading list user, but the folks over in CBL project have been discussing some polish that is needed and raised a great Feature Request. Some of these were no-brainers, so I took a few days and implemented some much-needed polish and exposed more metadata around the reading list. My favorite is not being in edit mode by default. If you have ideas on how to make the Reading List experience better, please add your ideas to the Feature Request. I have already confirmed I will be doing a big overhaul once I have a good picture of the features user's want and need.

With the enhancements out of the way, let's focus on the meat of this release, the bugfixes and polish. I'll open with one I know many readers are going to enjoy--the webtoon reader finally tracks the last page read when using the continuous reader 100% of the time. The nightly users and I tested this by reading a combined 700 chapters (500 of those were just @duplaja, go figures). Shoutout to @reinar for providing some code that helped me get the needed fix.

Another major fix, with the help yet again of Amelia, is the localization fix. Non-English locales have been having issues with Kavita for the last few releases and due to me not being able to reproduce the issues, I used a shotgun approach to fixing the issue. Luckily Amelia has such a setup and was able to fix it. Docker users can now remove the DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true from their compose file and Kavita should work across the board.

Docker users

Remove DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true from your compose files. It is no longer needed.

Lastly, Amelia polished a lot of the UI for the epub reader, closing out some annoying issues around scrolling, especially on iOS (which I cannot test against) and I focused on the backend, allowing for loosened parsing requirements, but still reporting the issue to Media Errors (Thanks to @vers-one for enhancing their library).

This overall feels like a great release with a lot of polish and stability. Many other issues were fixed, and I feel very confident in this release. The next release is planned to focus on the Scanner and see if some more instability can be ironed out and apply some more performance improvements. Amelia and I have been brainstorming and doing some research to see what overhauls we can make.

Lastly I want to end with an update that my time is still extremely constrained and will likely be this way going forward, so expect longer windows between releases.

Added

  • Added: Ability to delete Smart filter steams from Customize Side Nav and Dashboard
  • Added: Ability to rename Smart Filters in Customize settings
  • Added: Added the ability to reorder the side nav without using customize screen by clicking the actionable on Home -> Reorder (Thanks @Fesaa)
  • Added: Added a new cleanup task that scans media errors and clears them out if they are ingested fine into Kavita
  • Added: Added a new preference option for allowing Kavita to automatically switch into webtoon reader mode based on image resolution. Defaults to on.
  • Added: Added the ability to see all people across a reading list, the time it would take to read, and age rating.
  • Added: Updated many areas of Kavita to bring even better localization support. Everything in the UI should be fully localized now
  • Added: Added support for partial (0.5) volumes for Korean filename parsing

Changed

  • Changed: Allow volume title card overlay for more than just book libraries
  • Changed: Updated hostname tooltip text to be more clear
  • Changed: Added a toast message for backfilling events on scrobble page.
  • Changed: (Kavita+) Changed button on Scrobbling Errors to a match button which can directly fix the issue, rather than the old edit and add weblink.
  • Changed: Improved the tooltip for the scrobbling button to be clearer if it is on/off.
  • Changed: Overhauled the reading list detail page to be more aligned with series detail page
  • Changed: Reading lists will be in non-edit mode by default. A new edit button can toggle edit mode and bring drag handles and other controls.
  • Changed: Added a warning when in edit mode about when drag handles are suppressed
  • Changed: PDFs will now fall back to the Title in metadata for series
  • Changed: Updated Angular to 19
  • Changed: (Kavita+) Don't create scrobble events for specials as they will never match on AniList
  • Changed: Updated wording and some styling to make the first impression better
  • Changed: Changed how series downloads work to include the individual archives instead of unpacking them first (for non-image based series)
  • Changed: Reworked the version update logic so that we don't pop the new version update so often. It will now pop once and if no action is taken, it will wait a week to pop again. The same logic applies to the you are X releases behind, etc (but longer windows).
  • Changed: Updated dependencies and Security issues from downstream libraries
  • Changed: Enhanced parsing code for (back cover) falsely being recognized as a cover image.
  • Changed: Cleaned up how specials are parsed to allow supporting periods in the Title name
  • Changed: (Epub Reader) When reading in Double Column mode, Kavita will now prevent seeing the same text twice by added an empty page when needed
  • Changed: Allow users to type both localized name and series name to find a match on Related Series
  • Changed: Made Library type and Sort options dropdowns alphabetical (localized)
  • Changed: Removed the analyze task as it shouldn't be needed anymore
  • Changed: Renamed Comic -> Comic (Legacy) and Comic (Comic Vine) -> Comic. The new comic library should be the primary.
  • Changed: Moved the reset button for API Key to the right side, which renders much nicer.
  • Changed: Aligned and corrected some styling for the Edit/Close button on setting items to be consistent
  • Changed: Setting items that are not editable won't show the pointer cursor
  • Changed: Setting switch items have the label appropriately wired and thus when you click the label, the switch will update.
  • Changed: Details tab will show genre/tags expanded by default
  • Changed: (Kavita+) Updated how JWT looks at expiration time for AniList Token.
  • Changed: Moved Skipped scheduling ScanFolder log message to Trace as it's noisy
  • Changed: Tweaked how localization cache busting is handled to try and get Transloco to respect cache busting
  • Changed: For Admins (or users with access to all libraries), under Manage Users, sharing now shows 'All Libraries'
  • Changed: Changed how epubs are parsed. Now, Kavita will try to open it expecting a valid epub structure (which isn't common without user intervention) then allow falling back to a non-correct epub (with degraded experience within Kavita). Kavita will record issue in the Media Issues tab.
  • Changed: Ensure all switch elements link up with a label element for accessibility.
  • Changed: (Kavita+) Switched Last modified to Created for when the scrobble reading event took place.
  • Changed: Reading lists' age rating will now update when a series age rating is updated via the UI
  • Changed: Moved Gmail/Outlook auto fill buttons from Host Name to Host setting
  • Changed: Setting items will auto focus when switching into edit mode

Fixed

  • Fixed: Fixed an issue with non-American date and number parsing
  • Fixed: Fixed an initial blank page on settings due to a slow locale cache load
  • Fixed: Fixes the environment variable for invariant globalization still being set in the Dockerfile
  • Fixed: Fixed a bug where cbl import wouldn't allow importing due to the name clashing with another user, when it should have only checked your account
  • Fixed: Fixed a lot of styling across the app and overall polish
  • Fixed: Fixed a bug when updating email settings, it can error out after 2 changes
  • Fixed: Fixed an issue where chapter ranges (1-3) could get an incorrect sort order
  • Fixed: Fixed an issue with Mihon over-extracting image files (Thanks @arition)
  • Fixed: Fixed a missing action handler for delete chapter from series detail page.
  • Fixed: Fixed issues with selection on mobile devices in the epub reader causing pages to skip
  • Fixed: Fixed TitleSort being used instead of SeriesSort for Series Sort field (Thanks @joshuaavalon for the help)
  • Fixed: Moved loading icon up so it's visible even when having a lot of cards on library detail page
  • Fixed: Improved the webtoon reader's ability to ensure chapters are marked as read from continuous reader which caused the last page to not get marked as read. (Thanks @reinar for the spur)
  • Fixed: Fixed a bug in edit list that would break the UI when any comma separated values were used.
  • Fixed: Fixed read more for chinese text
  • Fixed: Fixed tooltips on series card getting overlapped (Thanks @therobbiedavis )
  • Fixed: (Kavita+) Fixed an issue where some people's metadata could have broken urls due to an @ symbol in the url for their description
  • Fixed: Fixed up the webtoon detection algorithm to be more robust
  • Fixed: Fixed the scrobbling page not having working sorting
  • Fixed: Fixed locale response being empty on first load (Thanks @nevivurn)
  • Fixed: Fixed PDF specials using filename instead of embedded metadata as title
  • Fixed: Stats charts shouldn't overlap anymore
  • Fixed: Fixed the changelog for API/Removed having an extra -
  • Fixed: Fixed a bug in the update series metadata where you wouldn't be able to clear out people field.
  • Fixed: Updated chapter update API to allow ability to clear out people fields, genres, and tags.
  • Fixed: Fixed reading list items overflowing (Thanks @therobbiedavis )
  • Fixed: Fixed missing scrollbars in some dropdowns
  • Fixed: Fixed an out-of-bounds from a reading list when reordering
  • Fixed: Fixed Epub table of contents, when all under one node didn't show as active.
  • Fixed: Fixed the inability to update server settings
  • Fixed: Fixed release date not displaying correctly in the edit chapter model
  • Fixed: Fixed 'never' being displayed in a bunch of places on certain locales
  • Fixed: Fixed the incorrect date layout being used on certain locales
  • Fixed: Fixed a bug where Top Readers on Stats page wasn't rendering the numbers correctly
  • Fixed: (Epub Reader) Fixed chapter not always scrolling to the top. Was not able to reproduce but used a community fed fix. (Thanks @joonhuiwong)
  • Fixed: Don't throw an exception when downloading a theme that is already downloaded but just let the user re-download it.
  • Fixed: Fixed some padding on a few setting screens that got missed last release.
  • Fixed: Fixed flashing no result message during loading of MAL Stacks
  • Fixed: Fixed an issue on edit series/chapter detail page where language input would not show the language reliably.
  • Fixed: Fixed issues with selection on mobile devices in the epub reader causing pages to skip
  • Fixed: Fixed a bad url to the wiki page
  • Fixed: Fixed an issue where search could not be selectable and would also close the pdf reader on ESC.
  • Fixed: Fixed a bug where some fields weren't being ingested from ComicInfo due to a bug from last release
  • Fixed: Fixed edit chapter modal, tag options weren't rendering
  • Fixed: Fixed edit chapter modal not being able to have some metadata fields persist
  • Fixed: Fixed an issue on edit series/chapter modal where adding data to a typeahead field, then switching to another tab would blank out the field.
  • Fixed: Fixed a bug where Send to Email/Kindle was not properly sending the filename of the file.
  • Fixed: (Kavita+) Fixed a missing blacklist path for Kavita+ background fetch
  • Fixed: Fixed 'add to reading list' not working in volume detail
  • Fixed: Fixed users being unable to open promoted reading lists via OPDS
  • Fixed: Fixed reading lists, adding an unnecessary volume marker for EPUB specials
  • Fixed: Fixed a bug where registration form was telling the user the email was required when it wasn't.
  • Fixed: Fixed change email so that multiple toasts don't popup telling the user that email was updated successfully but also wasn't and link needed.
  • Fixed: Fixed change email and change password not switching to view mode after save.
  • Fixed: Fixed a bug where UI was not reflecting that an Admin cannot change their age restriction settings.
  • Fixed: Fixed a bug where filter IsEmpty wasn't hiding the value input.
  • Fixed: IsEmpty wasn't working for Collection Tags and Tags
  • Fixed: Fixed a bug where Genres/Tags from ComicInfo.xml were being normalized
  • Fixed: Detail page actionables were being hidden on mobile.
View originalPermalink
How v0.8.6 went
View all

Discussion