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.

JavaAGPL-3.010.3k54591516 open issues
Created Dec 13, 2024Last commit Feb 20, 2026Last human commit Feb 20, 2026
angularbook-managementebooksjavalibrary-management-systemmetadata-managementoidcopdsself-hostedspring-boot
Embed Badge
Play on Codakey
Markdown
[![Play on Codakey](https://codakey.io/badge.svg)](https://codakey.io/projects/booklore)
HTML
<a href="https://codakey.io/projects/booklore"><img src="https://codakey.io/badge.svg" alt="Play on Codakey" height="28" /></a>

Daily Activity

Monthly Activity

Star History

README

BookLore

Your books deserve a home. This is it.

BookLore is a self-hosted app that brings your entire book collection under one roof.
Organize, read, annotate, sync across devices, and share, all without relying on third-party services.

Release License Docker Pulls Stars Discord Open Collective Translate

๐ŸŒ Website ยท ๐Ÿ“– Docs ยท ๐ŸŽฎ Demo ยท ๐Ÿš€ Quick Start ยท ๐Ÿ’ฌ Discord

BookLore Demo


โœจ Features

FeatureDescription
๐Ÿ“šSmart ShelvesCustom and dynamic shelves that organize themselves with rule-based Magic Shelves, filters, and full-text search
๐Ÿ”Automatic MetadataCovers, descriptions, reviews, and ratings pulled from Google Books, Open Library, and Amazon, all editable
๐Ÿ“–Built-in ReaderOpen PDFs, EPUBs, and comics right in the browser with annotations, highlights, and reading progress
๐Ÿ”„Device SyncConnect your Kobo, use any OPDS-compatible app, or sync progress with KOReader. Your library follows you everywhere
๐Ÿ‘ฅMulti-User ReadyIndividual shelves, progress, and preferences per user with local or OIDC authentication
๐Ÿ“ฅBookDropDrop files into a watched folder and BookLore detects, enriches, and queues them for import automatically
๐Ÿ“งOne-Click SharingSend any book to a Kindle, an email address, or a friend instantly

๐Ÿš€ Quick Start

[!TIP] Looking for OIDC setup, advanced config, or upgrade guides? See the full documentation.

All you need is Docker and Docker Compose.

๐Ÿ“ฆ Image Repositories
RegistryImage
Docker Hubbooklore/booklore
GitHub Container Registryghcr.io/booklore-app/booklore

Legacy images at ghcr.io/adityachandelgit/booklore-app remain available but won't receive updates.

Step 1: Environment Configuration

Create a .env file:

# Application
APP_USER_ID=1000
APP_GROUP_ID=1000
TZ=Etc/UTC

# Database
DATABASE_URL=jdbc:mariadb://mariadb:3306/booklore
DB_USER=booklore
DB_PASSWORD=ChangeMe_BookLoreApp_2025!

# Storage: LOCAL (default) or NETWORK (for NFS/SMB, disables file reorganization)
DISK_TYPE=LOCAL

# MariaDB
DB_USER_ID=1000
DB_GROUP_ID=1000
MYSQL_ROOT_PASSWORD=ChangeMe_MariaDBRoot_2025!
MYSQL_DATABASE=booklore

Step 2: Docker Compose

Create a docker-compose.yml:

services:
  booklore:
    image: booklore/booklore:latest
    # Alternative: 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}
    depends_on:
      mariadb:
        condition: service_healthy
    ports:
      - "6060:6060"
    volumes:
      - ./data:/app/data
      - ./books:/books
      - ./bookdrop:/bookdrop
    healthcheck:
      test: wget -q -O - http://localhost:6060/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

docker compose up -d

Open http://localhost:6060, create your admin account, and start building your library.


๐ŸŽฎ Live Demo

See BookLore in action before deploying your own instance.

๐ŸŒ URLdemo.booklore.org
๐Ÿ‘ค Usernamebooklore
๐Ÿ”‘ Password9HC20PGGfitvWaZ1

[!NOTE] This is a standard user account. Admin features like library creation, user management, and system settings are only available on your own instance.


๐Ÿ“ฅ BookDrop: Zero-Effort Import

Drop book files into a folder. BookLore picks them up, pulls metadata, and queues everything for your review.

graph LR
    A[๐Ÿ“ Drop Files] --> B[๐Ÿ” Auto-Detect]
    B --> C[๐Ÿ“Š Extract Metadata]
    C --> D[โœ… Review & Import]
StepWhat Happens
1. WatchBookLore monitors the BookDrop folder around the clock
2. DetectNew files are picked up and parsed automatically
3. EnrichMetadata is fetched from Google Books and Open Library
4. ImportYou review, tweak if needed, and add to your library

Mount the volume in docker-compose.yml:

volumes:
  - ./bookdrop:/bookdrop

๐Ÿค Community & Support

๐Ÿž Something not working?Report a Bug
๐Ÿ’ก Got an idea?Request a Feature
๐Ÿ› ๏ธ Want to help build?Contributing Guide
๐Ÿ’ฌ Come hang outDiscord Server

[!WARNING] Before opening a PR: Open an issue first and get maintainer approval. PRs without a linked issue, without screenshots/video proof, or without pasted test output will be closed. AI-assisted contributions are welcome, but you must run, test, and understand every line you submit. See the Contributing Guide for full details.


๐Ÿ’œ Support BookLore

BookLore is free, open source, and built with care. Here's how you can give back:

ActionHow
โญ Star this repoIt's the simplest way to help others find BookLore
๐Ÿ’ฐ Sponsor developmentOpen Collective funds hosting, testing, and new features
๐Ÿ“ข Tell someoneShare BookLore with a friend, a subreddit, or your local book club

[!IMPORTANT] We're raising funds for a Kobo device to build and test native Kobo sync support. Contribute to the Kobo Bounty โ†’


๐ŸŒ Translations

BookLore is used by readers around the world. Help make it accessible in your language on Weblate.

Translation status

๐Ÿ“Š Project Analytics

Repository Activity

โญ Star History

Star History Chart

๐Ÿ‘ฅ Contributors

Contributors

Every contribution matters. See how you can help โ†’


๐ŸŒŸ Sponsors & Partners

Run on PikaPods

PikaPods

ElfHosted

ElfHosted

JetBrains

JetBrains

Want your logo here? Become a sponsor โ†’


โš–๏ธ License

GNU Affero General Public License v3.0

Copyright 2024โ€“2026 BookLore

License: AGPL v3

Related Projects