Axolotl Reader is a self-hosted web app to organize, browse, and read your comics, manga, or manhwa collection.
Create directories that will be used to store the database and the books:
mkdir -p data/
mkdir data/covers
touch data/comics.db
Create a .env
file in the root of the project with the following content:
# JWT secret used to sign the JWT token (change it to something else)
JWT_SECRET=your_jwt_secret
# The host of your APP
API_HOST=https://axolotl.bastiengrisvard.com
# Environment variables
ENV=production
GIN_MODE=release
Run the lastest version of the docker image:
docker run -d \
--env-file .env \
-p 8888:8080 \
-v $(pwd)/data:/app/data \
--restart always \
--name axolotl-reader \
ghcr.io/bastien2203/axolotl-reader:latest
This project is split into two folders:
api/
for the Go backend
app/
for the React frontend
// TODO : Add a real dev environment
mkdir -p api/data
mkdir api/covers
touch api/comics.db
- Go 1.23.0
- Sqlite 3
cd api
go mod tidy
go run main.go
- Node >=22.15.0
cd app
npm install
npm run dev
- Remove facets route when frontend finished removing the usage
- Add reading progress in the API (should be also available offline in the app)
- Currently series cover is the first book cover, we should add a dedicated field for it
- Add Bulk import for series
- Currently its possible to add a book that is not part of a series, do we want to keep this ? (it needs to be fixed in the frontend too)
- When registering book cover convert it to webp
- Convert all images in cbz to webp ?
-
Add delete modal for series
-
Refacto ImportBook :
- Instead of using facets routes, get all tags/seriesNames/authors from the REST Api routes
- Use a bulk post instead of a post for each book
-
Fix the PWA (doesnt work offline for now)
-
Add possibility download a book (or an entire series) in the app
-
Add pagination in
<SeriesTable />
-
Reader : Virtual scroll glitch when scrolling up
- Build time for arm64 is too long
- Add tags for release
// In series page -> if page != 1, there is a 404 err when selecting a book => cause in page loader (router) page number is missing
MIT © 2025 Bastien Grisvard