Skip to content

📚 MyBibliotheca

MyBibliotheca is a self-hosted personal library and reading tracker web app built with Flask. It lets you log, organize, and visualize your reading journey. Add books by ISBN, track reading progress, log daily reading, and generate monthly wrap-up images of your finished titles.

🆕 Multi-User Features
Multi-user authentication, user data isolation, admin management, and secure password handling.

Join us on Discord!


✨ Features

  • 📖 Add Books
    Add books quickly by ISBN with automatic cover and metadata fetching. Now featuring bulk-import from Goodreads and other CSV files!
  • Track Progress
    Mark books as Currently Reading, Want to Read, Finished, or Library Only.
  • 📅 Reading Logs
    Log daily reading activity and maintain streaks.
  • 🖼️ Monthly Wrap-Ups
    Generate shareable image collages of books completed each month.
  • 🔎 Search
    Find and import books using the Google Books API.
  • 📱 Responsive UI
    Clean, mobile-friendly interface built with Bootstrap.
  • 🔐 Multi-User Support
    Secure authentication with user data isolation.
  • 👤 Admin Management
    Administrative tools and user management.

🚀 Getting Started

📦 Run with Docker

MyBibliotheca can be run completely in Docker — no need to install Python or dependencies on your machine.

✅ Prerequisites

    • Docker installed
    • Docker Compose installed

    🔁 Option 1: One-liner (Docker only)

    docker run -d \
      --name mybibliotheca \
      -p 5054:5054 \
      -v /path/to/data:/app/data \
      -e TIMEZONE=America/Chicago \
      -e WORKERS=6 \
      --restart unless-stopped \
      pickles4evaaaa/MyBibliotheca:latest
    

    Warning

    You may need to restart the container after an initial run to ensure that existing books are transferred over. See https://github.com/pickles4evaaaa/mybibliotheca/issues/44

    🔁 Option 2: Docker Compose

    Create a docker-compose.yml file:

    version: '3.8'
    
    services:
      MyBibliotheca:
        image: pickles4evaaaa/mybibliotheca:latest
        container_name: mybibliotheca
        ports:
          - "5054:5054"
        volumes:
          - /path/to/data:/app/data      # ← bind-mount host
        restart: unless-stopped
        environment:
          - TIMEZONE=America/Chicago  # ✅ Set your preferred timezone here
          - WORKERS=6  # Change to the number of Gunicorn workers you want
    

    Then run:

    docker compose up -d
    

    Warning

    You may need to restart the container after an initial run to ensure that existing books are transferred over. See https://github.com/pickles4evaaaa/mybibliotheca/issues/44

    🔧 Configurable Environment Variables

    Variable Description Default / Example
    SECRET_KEY Flask secret key for sessions auto-generated
    SECURITY_PASSWORD_SALT Password hashing salt auto-generated
    TIMEZONE Sets the app's timezone America/Chicago
    WORKERS Number of Gunicorn worker processes 6