CounterClops/booklore

BookLore: A self-hosted, multi-user digital library with smart shelves, auto metadata, Kobo & KOReader sync, BookDrop imports, OPDS support, and a built-in reader for EPUB, PDF, and comics.

โ˜… 0Forks 0JavaGitHub โ†—Compare

Project website โ†—

README

๐Ÿ“š BookLore

Your Personal Library, Beautifully Organized

๐ŸŒ Official Website: https://booklore.org

BookLore Demo

Release License Stars Docker Pulls

Discord Open Collective


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.

๐Ÿš€ Get Started โ€ข ๐Ÿ“– Documentation โ€ข ๐ŸŽฎ Try Demo โ€ข ๐Ÿ’ฌ Community


โœจ Features That Make BookLore Shine

๐Ÿ“– Library Management

  • Smart Organization: Custom shelves with powerful filters
  • Magic Shelves: Dynamic, auto-updating collections
  • Auto Metadata: Rich details from multiple sources
  • Advanced Search: Find any book instantly

๐ŸŒ Connectivity

  • Kobo Integration: Seamless device sync
  • OPDS Support: Connect any reading app
  • KOReader Sync: Cross-platform progress tracking
  • Email Sharing: One-click book sending

๐Ÿ‘ฅ User Experience

  • Multi-User Support: Granular permissions
  • Flexible Auth: Local or OIDC providers
  • Mobile Ready: Responsive on all devices
  • Built-in Reader: PDFs, EPUBs, comics

๐Ÿš€ Smart Features

  • BookDrop Import: Auto-detect bulk files
  • Private Notes: Personal reading annotations
  • Community Reviews: Enriched book data
  • Progress Tracking: Reading statistics

๐Ÿ’– Support the Project

Your support helps BookLore grow and improve! ๐ŸŒฑ

โญ Star Us

Give us a star to show your support and help others discover BookLore!

Star this repo

๐Ÿ’ฐ Sponsor

Support development, hosting, and testing costs

Open Collective

๐Ÿ“ข Spread the Word

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 โ†’


๐ŸŽฎ Live Demo: Explore BookLore in Action

Experience BookLore's features in a live environment before deploying your own instance!

๐ŸŒ Demo URL ๐Ÿ‘ค Username ๐Ÿ”‘ Password
demo.booklore.org booklore 9HC20PGGfitvWaZ1

โš ๏ธ Note: Demo account has standard user permissions only.
Admin features (user management, library setup) require a self-hosted instance.


๐Ÿš€ Getting Started with BookLore

Choose Your Path

๐Ÿ“˜ Documentation

Guides for installation, setup, features, and more

Read the Docs

Contribute to the docs at: booklore-docs

๐Ÿณ Quick Deploy

Get up and running in minutes with Docker

Deploy with Docker

Easiest way to self-host BookLore


๐Ÿณ Deploy with Docker

Prerequisites

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-app remain available but won't receive updates.

Step 1๏ธโƒฃ: Create Environment Configuration

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=booklore

Step 2๏ธโƒฃ: Create Docker Compose File

Create 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
    healthcheck:
      test: wget -q -O - http://localhost:${BOOKLORE_PORT}/api/v1/healthcheck
      interval: 60s
      retries: 5
      start_period: 60s
      timeout: 10s
    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: 10

Step 3๏ธโƒฃ: Launch BookLore

docker compose up -d

Step 4๏ธโƒฃ: Access Your Library

Open your browser and navigate to:

๐ŸŒ http://localhost:6060

๐ŸŽ‰ Welcome to your personal library!


๐Ÿ“ฅ BookDrop: Automatic Import

Drop Files, Import Automatically

BookLore's BookDrop feature automatically detects and processes book files dropped into a designated folder.

How It Works

graph LR
    A[๐Ÿ“ Drop Files] --> B[๐Ÿ” Auto-Detect]
    B --> C[๐Ÿ“Š Extract Metadata]
    C --> D[โœ… Review & Import]
Loading
  1. File Watcher: Monitors the BookDrop folder continuously
  2. Auto-Detection: Processes new files and extracts metadata
  3. Metadata Enrichment: Fetches details from Google Books, Open Library
  4. Review & Finalize: Review, edit, and import to your library

Docker Configuration

Add the BookDrop volume to your docker-compose.yml:

services:
  booklore:
    volumes:
      - ./data:/app/data
      - ./books:/books
      - ./bookdrop:/bookdrop  # ๐Ÿ‘ˆ BookDrop magic happens here

๐Ÿค Community & Support

๐Ÿž Bug Reports

Found an issue?

Open Issue

๐Ÿ’ก Feature Req

Have an idea?

Request Feature

๐Ÿค Contribute

Join development!

Contributing

๐Ÿ’ฌ Chat

Join community!

Discord


๐Ÿ“Š Project Analytics

Repository Activity

Repository Activity

โญ Star History

Star History Chart

๐Ÿ‘จโ€๐Ÿ’ป Contributors

Thanks to all our amazing contributors! ๐Ÿ™

Contributors

Want to see your face here? Start contributing today!


๐ŸŒŸ Sponsors

Thank you to our amazing sponsors!

Run on PikaPods

Become a sponsor and get your logo here! Support us on Open Collective


โš–๏ธ License

GNU General Public License v3.0

Copyright ยฉ 2024-2025 BookLore

License: GPL v3


Made with โค๏ธ by the BookLore community

โฌ† Back to Top

Contributors

acx10balazs-szucsMuppetteerwerwolfbyiamntzCounterClopsastappievrenovate[bot]rubengarciambeedaddyastrodadcjdWorldTeacherafairgiantmgulyas42prasy-loyolaMaheshBabu11vhqkzejustmilesjduarfarfromrefugdanblu3cwartwsouthwickmochaMightyHalfGingerMBaliverboludo00dcoffin88heyitsbench

Issues