Skip to main content

A Django app for storing, cataloguing, and reading e-Books (PDF, EPUB, CBZ)

Project description

django-bookkeeper

A Django app for storing, cataloguing, and reading e-Books (PDF, EPUB, CBZ).

Features

  • Upload PDF, EPUB, and CBZ files (drag-and-drop or browse)
  • Automatic metadata extraction — title, author, publisher, cover image
  • Deduplication by SHA-256 hash
  • Modern reader with:
    • EPUB rendering via epub.js
    • PDF rendering via PDF.js
    • CBZ page-by-page comic reader
    • Keyboard navigation (arrow keys)
  • Reader settings: light/sepia/dark themes, font family & size, line height, column width
  • Highlights in five colours with optional notes
  • Bookmarks with titles and notes
  • Reading progress — auto-saved position and percentage
  • 5-star ratings per user
  • Favourites and finished-book tracking
  • Extensible hook signals for recent-books lists, activity feeds, etc.
  • Django best-practices: django-storages compatible, AUTH_USER_MODEL aware, namespaced URLs

Try the demo

The fastest way to see Bookkeeper in action — one command downloads five public-domain classics from Project Gutenberg and starts a local server:

git clone https://github.com/ehwio/django-bookkeeper
cd django-bookkeeper
uv sync
make demo

Then open http://127.0.0.1:8000/ and sign in as demo / demo.

Or with Docker:

docker compose up

The demo ships with:

  • Pride and Prejudice — Jane Austen
  • Twenty Thousand Leagues Under the Seas — Jules Verne
  • The Time Machine — H.G. Wells
  • Alice's Adventures in Wonderland — Lewis Carroll
  • Frankenstein — Mary Wollstonecraft Shelley

Books are downloaded from Project Gutenberg on first run. They are public domain and freely distributable.


Installation

pip install django-bookkeeper
# or
uv add django-bookkeeper

Add to INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    "bookkeeper",
]

Include URLs:

# urls.py
from django.urls import include, path

urlpatterns = [
    path("books/", include("bookkeeper.urls", namespace="bookkeeper")),
]

Run migrations:

python manage.py migrate

Optional dependencies

Feature Package
Social login django-social-auth-app-django
Cloud storage django-storages

Hooks

Connect to Bookkeeper signals to extend behaviour:

from bookkeeper.hooks import book_opened, book_finished, progress_updated

@book_opened.connect
def track_recent(sender, user, book, **kwargs):
    RecentBook.objects.update_or_create(user=user, defaults={"book": book})

Available signals: book_opened, progress_updated, book_finished, book_rated, book_uploaded, highlight_created, bookmark_created.

Development

git clone https://github.com/ehwio/django-bookkeeper
cd django-bookkeeper
uv sync --extra dev
uv run pytest
uv run ruff check src/ tests/

GitFlow

  • main — stable releases
  • develop — integration branch
  • feature/* — new features
  • fix/* — bug fixes
  • release/* — release prep

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_bookkeeper-0.2.1.tar.gz (112.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_bookkeeper-0.2.1-py3-none-any.whl (48.4 kB view details)

Uploaded Python 3

File details

Details for the file django_bookkeeper-0.2.1.tar.gz.

File metadata

  • Download URL: django_bookkeeper-0.2.1.tar.gz
  • Upload date:
  • Size: 112.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for django_bookkeeper-0.2.1.tar.gz
Algorithm Hash digest
SHA256 9e7dd57a7364178d70d95123baa14de478b789572e530a7993763f3ea88bac35
MD5 1d037c52a6b1c943665742b47aafa2ec
BLAKE2b-256 73296a8e23c3f0b1b3382ebd1bf3de9a4138d1a81ef6f20cd704276aab13a632

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_bookkeeper-0.2.1.tar.gz:

Publisher: publish-pypi.yml on ehwio/django-bookkeeper

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_bookkeeper-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_bookkeeper-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 57250d53a8bf3b2b195f3298cc6de3a0aaed2b89ac628d64cdb5e1df91801da7
MD5 2336c2ab810644b3c7b5a14702e4b94c
BLAKE2b-256 6f11ec5bdbde6de8108868148d6d4bc5662c4d62298b10382729ba220dab5ce2

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_bookkeeper-0.2.1-py3-none-any.whl:

Publisher: publish-pypi.yml on ehwio/django-bookkeeper

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page