github Kareadita/Kavita v0.8.8
v0.8.8 - Epub Reader Overhaul, an Annotation System and OIDC!

12 hours ago

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

image

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

login screen with OIDC enable

some of the OIDC configuration options

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

edit-annotation-drawer annotation-drawer

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.

Don't miss a new Kavita release

NewReleases is sending notifications on new releases.