BookLore is a powerful, self-hosted web application designed to organize and manage your personal book collection with elegance and ease. Build your dream library with an intuitive interface, robust metadata management, and seamless multi-user support.
|
|
|
|
Your support helps BookLore grow and improve! 🌱
|
Give us a star to show your support and help others discover BookLore! |
Support development, hosting, and testing costs |
Share BookLore with fellow book lovers and developers! |
🎯 Current Goal: Raising funds for a Kobo device to implement native Kobo sync support
💡 Support the Kobo Sync Bounty →
Experience BookLore's features in a live environment before deploying your own instance!
| 🌐 Demo URL | 👤 Username | 🔑 Password |
|---|---|---|
| demo.booklore.dev | booklore |
9HC20PGGfitvWaZ1 |
⚠️ Note: Demo account has standard user permissions only.
Admin features (user management, library setup) require a self-hosted instance.
|
Guides for installation, setup, features, and more Contribute to the docs at: booklore-docs |
Get up and running in minutes with Docker Easiest way to self-host BookLore |
Ensure you have Docker and Docker Compose installed.
📦 Image Repositories
- 🐳 Docker Hub:
booklore/booklore - 📦 GitHub Container Registry:
ghcr.io/booklore-app/booklore
💡 Legacy images at
ghcr.io/adityachandelgit/booklore-appremain available but won't receive updates.
Create a .env file in your project directory:
# 🎯 BookLore Application Settings
APP_USER_ID=0
APP_GROUP_ID=0
TZ=Etc/UTC
BOOKLORE_PORT=6060
# 🗄️ Database Connection (BookLore)
DATABASE_URL=jdbc:mariadb://mariadb:3306/booklore
DB_USER=booklore
DB_PASSWORD=ChangeMe_BookLoreApp_2025!
# 🔧 MariaDB Container Settings
DB_USER_ID=1000
DB_GROUP_ID=1000
MYSQL_ROOT_PASSWORD=ChangeMe_MariaDBRoot_2025!
MYSQL_DATABASE=bookloreCreate a docker-compose.yml file:
services:
booklore:
image: booklore/booklore:latest
# Alternative: Use GitHub Container Registry
# image: ghcr.io/booklore-app/booklore:latest
container_name: booklore
environment:
- USER_ID=${APP_USER_ID}
- GROUP_ID=${APP_GROUP_ID}
- TZ=${TZ}
- DATABASE_URL=${DATABASE_URL}
- DATABASE_USERNAME=${DB_USER}
- DATABASE_PASSWORD=${DB_PASSWORD}
- BOOKLORE_PORT=${BOOKLORE_PORT}
depends_on:
mariadb:
condition: service_healthy
ports:
- "${BOOKLORE_PORT}:${BOOKLORE_PORT}"
volumes:
- ./data:/app/data
- ./books:/books
- ./bookdrop:/bookdrop
restart: unless-stopped
mariadb:
image: lscr.io/linuxserver/mariadb:11.4.5
container_name: mariadb
environment:
- PUID=${DB_USER_ID}
- PGID=${DB_GROUP_ID}
- TZ=${TZ}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASSWORD}
volumes:
- ./mariadb/config:/config
restart: unless-stopped
healthcheck:
test: [ "CMD", "mariadb-admin", "ping", "-h", "localhost" ]
interval: 5s
timeout: 5s
retries: 10docker compose up -dOpen your browser and navigate to:
🌐 http://localhost:6060
🎉 Welcome to your personal library!
BookLore's BookDrop feature automatically detects and processes book files dropped into a designated folder.
graph LR
A[📁 Drop Files] --> B[🔍 Auto-Detect]
B --> C[📊 Extract Metadata]
C --> D[✅ Review & Import]
- File Watcher: Monitors the BookDrop folder continuously
- Auto-Detection: Processes new files and extracts metadata
- Metadata Enrichment: Fetches details from Google Books, Open Library
- Review & Finalize: Review, edit, and import to your library
Add the BookDrop volume to your docker-compose.yml:
services:
booklore:
volumes:
- ./data:/app/data
- ./books:/books
- ./bookdrop:/bookdrop # 👈 BookDrop magic happens here|
Found an issue? |
Have an idea? |
Join development! |
Join community! |
Want to see your face here? Start contributing today!
GNU General Public License v3.0
Copyright © 2024-2025 BookLore
Made with ❤️ by the BookLore community
