Skip to content

Grimmory

Description / nameInput element
Container Registry
Container Configuration Root Path
Global /books Path
Timezone
User ID
Group ID

Build Status Last Commit

Self-hosted digital library with smart shelves, metadata lookup, built-in reader, Kobo/KOReader sync, OPDS support, and multi-user support. Successor to BookLore.

Port 6060
Registry ghcr.io/daemonless/grimmory
Source https://github.com/grimmory-tools/grimmory
Website https://github.com/grimmory-tools/grimmory

Version Tags

Tag Description Best For
latest FreeBSD Port. Built from latest FreeBSD packages. Most users. Matches Linux Docker behavior.

Root Privileges Required

Podman on FreeBSD currently requires root. All commands must be run as root (or via doas/sudo).

Before deploying, ensure your host environment is ready. See the Quick Start Guide for host setup instructions.

Deployment

services:
  grimmory:
    image: ghcr.io/daemonless/grimmory:latest
    container_name: grimmory
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=UTC
      - SPRING_DATASOURCE_URL=jdbc:mariadb://grimmory-mariadb:3306/grimmory
      - SPRING_DATASOURCE_USERNAME=grimmory
      - SPRING_DATASOURCE_PASSWORD=changeme
    volumes:
      - "/path/to/containers/@GRIMMORY_APP_DATA_PATH@:/app/data"
      - "/path/to//path/to/books:/books"
      - "/path/to/containers/@GRIMMORY_BOOKDROP_PATH@:/bookdrop"
    ports:
      - @GRIMMORY_PORT@:6060
    healthcheck:
      test: ["CMD", "{'port': 6060, 'path': '/api/v1/healthcheck'}"]
    restart: unless-stopped
podman run -d --name grimmory \
  -p @GRIMMORY_PORT@:6060 \
  --health-cmd {'port': 6060, 'path': '/api/v1/healthcheck'} \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=UTC \
  -e SPRING_DATASOURCE_URL=jdbc:mariadb://grimmory-mariadb:3306/grimmory \
  -e SPRING_DATASOURCE_USERNAME=grimmory \
  -e SPRING_DATASOURCE_PASSWORD=changeme \
  -v /path/to/containers/@GRIMMORY_APP_DATA_PATH@:/app/data \
  -v /path/to//path/to/books:/books \
  -v /path/to/containers/@GRIMMORY_BOOKDROP_PATH@:/bookdrop \
  ghcr.io/daemonless/grimmory:latest
- name: Deploy grimmory
  containers.podman.podman_container:
    name: grimmory
    image: ghcr.io/daemonless/grimmory:latest
    state: started
    restart_policy: always
    env:
      PUID: "1000"
      PGID: "1000"
      TZ: "UTC"
      SPRING_DATASOURCE_URL: "jdbc:mariadb://grimmory-mariadb:3306/grimmory"
      SPRING_DATASOURCE_USERNAME: "grimmory"
      SPRING_DATASOURCE_PASSWORD: "changeme"
    ports:
      - "@GRIMMORY_PORT@:6060"
    volumes:
      - "/path/to/containers/@GRIMMORY_APP_DATA_PATH@:/app/data"
      - "/path/to//path/to/books:/books"
      - "/path/to/containers/@GRIMMORY_BOOKDROP_PATH@:/bookdrop"

Access at: http://localhost:@GRIMMORY_PORT@

Interactive Configuration

Parameters

Environment Variables

Variable Default Description
PUID 1000
PGID 1000
TZ Etc/UTC
SPRING_DATASOURCE_URL jdbc:mariadb://grimmory-mariadb:3306/grimmory MariaDB JDBC URL (e.g., jdbc:mariadb://127.0.0.1:3306/grimmory)
SPRING_DATASOURCE_USERNAME grimmory Database username
SPRING_DATASOURCE_PASSWORD changeme Database password

Volumes

Path Description
/app/data Configuration and application data
/books Book library directory
/bookdrop Drop folder for automatic imports

Ports

Port Protocol Description
6060 TCP Web interface

Networking

This compose uses network_mode: host so services communicate via 127.0.0.1.

For isolated networking, use bridge mode:

services:
  grimmory:
    ports:
      - "6060:6060"
    environment:
      SPRING_DATASOURCE_URL: "jdbc:mariadb://mariadb:3306/grimmory"

  mariadb:
    # container name becomes DNS hostname

Migration from BookLore

Grimmory is the successor to BookLore and can migrate existing data:

  1. Stop BookLore containers
  2. Copy /containers/booklore/ to /containers/grimmory/
  3. Start Grimmory — it will migrate the database automatically

Implementation Details

  • Architectures: amd64
  • User: bsd (UID/GID set via PUID/PGID). Defaults to 1000:1000.
  • Base: Built on ghcr.io/daemonless/base (FreeBSD 15.0).

Need help? Join our Discord community.