v0.4.7 - Comic Rework
Published on October 12, 2021 by Joseph Milazzo

v0.4.7 is here with a large rework on how Kavita handles comics. Working with our community and some heavy comic rack users, we went to work building out the most common naming conventions. From testing for release, nearly all comics out of the box were matching correctly.

In addition, as is custom, quite a few other features made it into the release as well. The most important is a complete rewrite in how Kavita performs database updates in the Scan Loop. As mentioned in the last release, the performance improvements for memory was split into two parts, this release sees the completion of the second part. Kavita now breaks up work into smaller chunks and processes them. In addition, more pages will respond to updates from the Server, rather than making you refresh.

To wrap up, I want to highlight a few enhancements made that I think deserve a shout-out. First, we have support for half-volumes, a feathub request. Now you can have Volume 1.5 and Kavita will properly recognize and order it. Second, the book reader got some extra love and the resume feature that restores your last scroll position is now accurate to the line. Lastly, another feathub request has been implemented which is the ability to disable authentication for Kavita. You can disable the need to have passwords on your account for non-admins and login directly with your account.

Next up is an overhaul to the Search code to make it more flexible and cleanup a few bugs. Next release will be the last bite sized release before the first pass of metadata support.

You can find the release here.


  • When a library scan is in progress, show a spinner on the Manage Libraries page in admin dashboard (#607 )
  • Added Last Scan on manage libraries screen to show when the last scan occurred.
  • Collection Detail page will now automatically load series that are added in other screens without manual refreshing
  • New setting to disable authentication on your Kavita instance. This opens you up to potential hacking or users logging into accounts they shouldn't. Use at your own risk. (#465)
  • Login page will automatically fill in username based on last login on device
  • (Parser) Added support for comics-downloader's default naming convention to parser: seriesname-chapterpadded.cbz (ex: spawn-023.cbz or spawn-chapter-023.cbz)
  • Added the ability to have decimal based volume numbers, which are common in ebooks or comics as interlude volumes. (#622 )
  • Manage Libraries tab in admin dashboard will now show a spinner when a library scan is in progress. Hovering over spinner shows when the scan started. Afterwards, the Last Updated will update. 
  • When an OPDS collection is empty, we now send an Entry saying 'Nothing here'
  • Added parsing for multiple keywords for comic specials (OneShot, Book, Compendium, Omnibus, TPB, FCBD, Absolute, Preview).
  • (Parser) Expanded parser for comics to include many more common naming conventions, including those used by ComicRack users.
  • Scan Series, Scan Library, and Refresh Metadata now all use chunking to perform the main work. Each series is still parallelized, but only X entities are loaded into memory at once, significantly reducing memory consumption (1GB (old) vs 200MB (new) on 12k files) (#167 and  #604)
  • UI will now show toasts when new series are added to Kavita
  • UI will now update on library detail view with new cards when they are added to library
  • We now publish some API docs on  api.kavitareader.com. These are read-only, to use and test with Swagger you still need to run a local instance.


  • When a user attempts to refresh metadata from UI, warn them that this is a heavy call and a scan library is likely the better option (#601)
  • Docnet has been updated to latest release, which includes our contributions for ARM support. Pi users no longer need to copy the library file in manually for PDF Support (#468)
  • Parser now uses culture invariant regex matching to hopefully help with very unique edge cases on Italian systems.
  • New design for the Login screen to support disabled authentication. Now the login screen will show all user names on your instance and you can click to login. If authentication is disabled, you do not have to type a password assuming it is a non-admin account. Admin accounts still require authentication. If authentication is enabled, the login screen will be similar to existing with just some UX changes.
  • Removed extra language binaries on build. This removes ca, fr, zh, etc folders reducing build size.
  • Usernames and library names on cards now use sentence case. Capitalizing at least the first character.
  • When flattening directory for caching, force the order of directories based on natural sort. Some users OS were giving different order in some rare cases.
  • Hashing for images now takes into account the last time it was modified, so browser doesn't cache old entries. This usually affects when files inside an archive are modified and re-read. (#631)
  • + is now allowed in normalization scheme. This allows series that use + as a way to denote sequels to not merge with their prequel series. (#632)
  • We can now parse the full comicInfo.xml to spec from archives and emulate the fields of comicinfo from epub files. (this is foundational work, does not change how Kavita works)
  • Removed Sentry from Kavita. It was no longer providing useful debug information (#629 )
  • Book reader now has pinpoint accuracy in remembering the last line you were reading.
  • Book reader's side drawer and action bars are now a darker shade of black to help them stand out from the reader (dark mode only)
  • Removed the ability to Save to User preferences your book settings. This was causing more confusion than benefit.
  • Cleaned up the book reader's UX by applying shadows around some of the menu components and buttons
  • Changed pages throughout the app to show 'Issue' instead of 'Chapter' for Comic libraries.
  • 'Volume/Chapters' to just be Chapters (or Issues if comic library, Books if Book library). This naming convention is applied throughout the application.
  • Removed parser support for '01 Spider-Man & Wolverine 01.cbr'. This is a poor naming convention and is conflicting with valid cases.
  • Changed Save to Defaults on light mode to be a primary button on Book reader side nav
  • On Book reader, inform the user that pressing save is not required for changes to take effect and that margin will be reset if they are on mobile.
  • Automatic Scaling on the Manga reader will now self-adjust after one image load occurs (non page spread) and will take into account image dimensions for choosing a better fitting option.
  • (Performance) Changed some code to avoid a byte[] copy for getting cover image of epubs
  • Scan Library and Refresh Metadata now saves to DB in Chunks meaning you don't have to wait for whole Library Scan to start using Kavita
  • Added more checks in the Scan Series loop to ensure that we never go above the library root for handling an edge case where files are super poorly named
  • Log messages in Scanner Service or Refresh Service will now have the service name in [] and are more verbose to give indication of what's happening.
  • Changed how selection works on mobile to be less eager to trigger on mobile devices. Mobile now will allow a certain amount of time to pass. If you change scroll at all, the selection code will not trigger. (#606)
  • Don't force title case for library name and user names. They will now capitalize the first letter and leave the rest as is. 


  • Fixed an issue where trying to read in incognito on a volume consisting of multiple chapters could grab the wrong chapter (ie chapter 3 instead of chapter 1)
  • Carousels should be back to normal now on mobile devices. Don't process touch events when selection is disabled. (#617)
  • Fixed an issue where marking multiple items as unread would render them as read on the UI.
  • User last active time now shows time
  • Manga Reader's Up/Down mode was having the wrong click direction. Up should go back a page, but in previous code was going forward.
  • Fixed a bug where we would reset dark mode on the book reader to dark mode if our site was on dark mode, despite user setting light mode. (#633)
  • Scan Series when nothing was updated in DB could skip kicking off a refresh metadata
  • After library scan, cleanup old Collection tags that have no series left
  • Fixed a small gap difference on the pagination bar in book reader drawer.
  • Next button doesn't properly show disabled state after no next chapter is found in book reader
  • Next button sometimes shows double arrows (load next chapter) when there are more pages to read in current chapter in book reader
  • Fixed padding issue causing the appearance of a block above the book reader's bottom navigation bar
  • Fixed a bug where the full file name (including file extension) was being considered for parsing as the series name for specials, rather than just the file name without the extensions
  • Implemented parser support for '2000 AD 0366' (#649 )
  • All tasks now reflect the user's timezone rather than in UTC (#651)
  • Fixed a bug where deleting items from a reading list would not actually delete them
  • Fixed a bug where we didn't save a file's last write time in the DB so we ended up opening files for page calculation each time.
  • Fixed a regression from last release where Scan Series could fall into scanning higher level folder (root folder) due to files being deleted rather than original case of files being really poorly named.
  • Fixed a concurrency issue with natural sorted when used in ArchiveService.