* Navigate users to library page instead of home to prevent history block. * Cleaned up the Contributing to describe new code structure * Fixed a critical bug for how we find files for a chapter download (use ChapterId for lookup, not MangaFile.Id). Refactored how downloading works on the UI side to use the backend's filename whenever possible, else provide a custom name (and use backend's extension) for bundled downloads. * Fixed a bug where scroll intersection wasn't working on books without a table of content, even though it should have. * If user is using a direct url and hits an authentication guard, cache the url, allow authentication, then redirect them to said url * Added a transaction for bookmarking due to a rare case (in dev machines) where bookmark progress can duplicate * Re-enabled webtoon preference in reader settings. Refactored gotopage into it's own, dedicated handler to simplify logic. * Moved the prefetching code to occur whenever the page number within infinite scroller changes. This results in an easier to understand functioning. * Fixed isElementVisible() which was not properly calculating element visibility * GoToPage going forwards is working as expected, going backwards is completly broken * After performing a gotopage, make sure we update the scrolling direction based on the delta. * Removed some stuff thats not used, split the prefetching code up into separate functions to prepare for a rewrite. * Reworked prefetching to ensure we have a buffer of pages around ourselves. It is not fully tested, but working much better than previous implementation. Will be enhanced with DOM Pruning. * Cleaned up some old cruft from the backend code * Cleaned up the webtoon page change handler to use setPageNum, which will handle the correct prefetching of next/prev chapter * More cleanup around the codebase * Refactored the code to use a map to keep track of what is loaded or not, which works better than max/min in cases where you jump to a page that doesn't have anything preloaded and loads images out of order * Fixed a bad placement of code for when you are unauthenticated, the code will now redirect to the original location you requested before you had to login. * Some cleanup. Fixed the scrolling issue with prev page, spec seems to not work on intersection observer. using 0.01 instead of 0.0.
Kavita
Kavita is a fast, feature rich, cross platform reading server. Built with a focus for manga, and the goal of being a full solution for all your reading needs. Setup your own server and share your reading collection with your friends and family!
Goals
- Serve up Manga/Webtoons/Comics (cbr, cbz, zip/rar, 7zip, raw images) and Books (epub, mobi, azw, djvu, pdf)
- First class responsive readers that work great on any device (phone, tablet, desktop)
- Dark and Light themes
- Provide hooks into metadata providers to fetch metadata for Comics, Manga, and Books
- Metadata should allow for collections, want to read integration from 3rd party services, genres.
- Ability to manage users, access, and ratings
- Ability to sync ratings and reviews to external services
- Fully Accessible with active accessibility audits
- Dedicated webtoon reader (in beta testing)
- And so much more...
Support
Demo
If you want to try out Kavita, we have a demo up: https://demo.kavitareader.com/
Username: demouser
Password: Demouser64
Setup
Non-Docker
- Unzip the archive for your target OS
- Place in a directory that is writable. If on windows, do not place in Program Files
- Linux users must ensure the directory & kavita.db is writable by Kavita (might require starting server once)
- Run Kavita
- If you are updating, do not copy appsettings.json from the new version over. It will override your TokenKey and you will have to reauthenticate on your devices.
Docker
Running your Kavita server in docker is super easy! Barely an inconvenience. You can run it with this command:
docker run --name kavita -p 5000:5000 \
-v /your/manga/directory:/manga \
-v /kavita/data/directory:/kavita/data \
--restart unless-stopped \
-d kizaing/kavita:latest
You can also run it via the docker-compose file:
version: '3.9'
services:
kavita:
image: kizaing/kavita:latest
volumes:
- ./manga:/manga
- ./data:/kavita/data
ports:
- "5000:5000"
restart: unless-stopped
Note: Kavita is under heavy development and is being updated all the time, so the tag for current builds is :nightly
. The :latest
tag will be the latest stable release. There is also the :alpine
tag if you want a smaller image, but it is only available for x64 systems.
Feature Requests
Got a great idea? Throw it up on the FeatHub or vote on another idea. Please check the Project Board first for a list of planned features.
Contributors
This project exists thanks to all the people who contribute. Contribute.
Donate
If you like Kavita, have gotten good use out of it or feel like you want to say thanks with a few bucks, feel free to donate. Money will go towards expenses related to Kavita. Back us through OpenCollective.
Backers
Thank you to all our backers! 🙏 Become a backer
Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. Become a sponsor
Mega Sponsors
JetBrains
Thank you to JetBrains for providing us with free licenses to their great tools.
Sentry
Thank you to for providing us with free license to their software.
License
- GNU GPL v3
- Copyright 2010-2021