BookLore is a web app for hosting, managing, and exploring books, with support for PDFs, eBooks, reading progress, metadata, and stats.
BookLore is a self-hosted web app for organizing and managing your personal book collection. It provides an intuitive interface to browse, read, and track your progress across PDFs and eBooks. With robust metadata management, multi-user support, and a sleek, modern UI, BookLore makes it easy to build and explore your personal library.
Kick off your BookLore journey with our official documentation and helpful video guides.
π BookLore Documentation: Getting Started
Our up-to-date docs walk you through installation, setup, configuration, and key features, everything you need to get up and running smoothly.
π₯ BookLore Tutorials: YouTube
These older videos provide useful walkthroughs and visual guidance, but note that some content may be outdated compared to the current docs.
You can quickly set up and run BookLore using Docker.
Ensure you have Docker and Docker Compose installed.
Create a docker-compose.yml
file with content:
services:
booklore:
image: ghcr.io/adityachandelgit/booklore-app:latest
container_name: booklore
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- DATABASE_URL=jdbc:mariadb://mariadb:3306/booklore # Only modify this if you're familiar with JDBC and your database setup
- DATABASE_USERNAME=booklore # Must match MYSQL_USER defined in the mariadb container
- DATABASE_PASSWORD=your_secure_password # Use a strong password; must match MYSQL_PASSWORD defined in the mariadb container
- SWAGGER_ENABLED=false # Enable or disable Swagger UI (API docs). Set to 'true' to allow access; 'false' to block access (recommended for production).
depends_on:
mariadb:
condition: service_healthy
ports:
- "6060:6060"
volumes:
- /your/local/path/to/booklore/data:/app/data # Internal app data (settings, metadata, cache)
- /your/local/path/to/booklore/books1:/books1 # Book library folder β point to one of your collections
- /your/local/path/to/booklore/books2:/books2 # Another book library β you can mount multiple library folders this way
- /your/local/path/to/booklore/bookdrop:/bookdrop # Bookdrop folder β drop new files here for automatic import into libraries
restart: unless-stopped
mariadb:
image: lscr.io/linuxserver/mariadb:11.4.5
container_name: mariadb
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- MYSQL_ROOT_PASSWORD=super_secure_password # Use a strong password for the database's root user, should be different from MYSQL_PASSWORD
- MYSQL_DATABASE=booklore
- MYSQL_USER=booklore # Must match DATABASE_USERNAME defined in the booklore container
- MYSQL_PASSWORD=your_secure_password # Use a strong password; must match DATABASE_PASSWORD defined in the booklore container
volumes:
- /your/local/path/to/mariadb/config:/config
restart: unless-stopped
healthcheck:
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost"]
interval: 5s
timeout: 5s
retries: 10
Note: You can find the latest BookLore image tag BOOKLORE_IMAGE_TAG
(e.g. v.0.x.x) from the Releases section:
π¦ Latest Image Tag β GitHub Releases
Run the following command to start the services:
docker compose up -d
Once the containers are up, access BookLore in your browser at:
http://localhost:6060
BookLore now supports a Bookdrop folder, a special directory where you can drop your book files (.pdf
, .epub
, .cbz
, etc.), and BookLore will automatically detect, process, and prepare them for import. This makes it easy to bulk add new books without manually uploading each one.
To enable the Bookdrop feature in Docker:
services:
booklore:
...
volumes:
- /your/local/path/to/booklore/data:/app/data
- /your/local/path/to/booklore/books:/books
- /your/local/path/to/booklore/bookdrop:/bookdrop # π Bookdrop directory
BookLore supports optional OIDC/OAuth2 authentication for secure access. This feature allows you to integrate external authentication providers for a seamless login experience.
While the integration has been tested with Authentik and Pocket ID, it should work with other OIDC providers like Authelia as well. The setup allows you to use either JWT-based local authentication or external providers, giving users the flexibility to choose their preferred method.
For detailed instructions on setting up OIDC authentication:
Thanks to all the amazing people who contribute to Booklore.
If you find BookLore helpful, consider β starring the repo!
Or support the project via Venmo: