---
title: BookHaven
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, books, epub, reader, opds, python, oidc, rbac]
confidence: medium
contested: false
sources: [https://selfh.st/apps/?tag=books, https://github.com/HrBingR/BookHaven]
---

# 📚 BookHaven

> **Lecteur EPUB browser-based avec gestion de bibliothèque** : scannez votre dossier local d'EPUBs, lisez et téléchargez depuis n'importe quel device, avec support OPDS et OIDC.

| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [github.com/HrBingR/BookHaven](https://github.com/HrBingR/BookHaven) |
| **GitHub** | [HrBingR/BookHaven](https://github.com/HrBingR/BookHaven) |
| **License** | GPL-3.0 |
| **Langage** | Python (backend), TypeScript/Vue (frontend) |
| **Étoiles** | 115 ⭐ |
| **Dernière MAJ** | 2025-11 (v1.7.x) |
| **Catégorie** | [[cat-books]] |

## Description

BookHaven est un **gestionnaire/lecteur de bibliothèque EPUB** développé comme **alternative minimale** aux solutions type Calibre-Web ou Kavita. L'auteur (HrBingR) voulait quelque chose de plus simple à déployer et plus moderne côté UI. Le pari est tenu : stack légère (Python + Vue), DB au choix (SQLite/MySQL/PostgreSQL), cache Redis, image Docker officielle.

L'application **scanne automatiquement** un dossier local d'EPUBs (intervalle configurable + scan manuel), extrait les métadonnées (titre, auteur, série, couverture) **sans toucher aux fichiers originaux** — toutes les modifications sont stockées en base. C'est un choix architectural important : BookHaven est **non-destructif**.

Côté fonctionnalités : **lecteur EPUB dans le navigateur** (basé sur Readium ou epub.js), **téléchargement** direct, **recherche** plein texte (auteur, titre, série), **filtres** par statut (favoris, terminés, en cours), **page auteur** avec grille alphabétique, **uploads** utilisateurs (avec correction de métadonnées post-upload), **RBAC basique** (admin, editor, user), **requêtes de livres** (les users peuvent demander l'ajout d'un titre), **OIDC** pour l'authentification centralisée, **OPDS** pour la lecture depuis des apps e-reader (KOReader, Moon+ Reader, etc.), et **support Cloudflare Access** pour bypass le login.

**Points forts** : non-destructif (métadonnées en DB, fichiers intacts), OIDC + RBAC + Cloudflare Access prêts à l'emploi, OPDS fonctionnel, image Docker officielle, README clair, install Docker en 4 étapes.

**Points faibles** : **EPUB uniquement** (pas de PDF, MOBI, AZW3), **bus factor 1** (un seul mainteneur), rythme de release lent (~1 release majeure/an), stack Python + Node à maintenir pour le build frontend, projets plus complets et matures (Calibre-Web, Kavita) existent.

## Installation

### Via Docker (recommandé)

L'image `hrbingr/bookhaven` est sur Docker Hub. La stack officielle inclut MySQL + Redis (mais SQLite fonctionne aussi).

```yaml
# docker-compose.yml
services:
  bookhaven:
    image: hrbingr/bookhaven:latest
    container_name: bookhaven
    restart: unless-stopped
    ports:
      - "5000:5000"
    env_file: .env
    volumes:
      - ./data:/app/data
      - /chemin/vers/epubs:/library
    depends_on:
      - mysql
      - redis

  mysql:
    image: mysql:8-alpine
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: bookhaven
      MYSQL_USER: bookhaven
      MYSQL_PASSWORD: change-me
      MYSQL_ROOT_PASSWORD: change-me-root
    volumes:
      - bookhaven_db:/var/lib/mysql

  redis:
    image: redis:7-alpine
    restart: unless-stopped

volumes:
  bookhaven_db:
```

### Installation manuelle

Cloner le dépôt, `cp compose.exmaple.yml compose.yml` (sic, le repo contient une coquille), `cp .env.example .env`, lancer la stack.

## Configuration

1. Renommer `compose.yml.example` → `compose.yml` et `.env.example` → `.env`.
2. Choisir la base de données (`SQLITE`, `MYSQL` ou `POSTGRES` dans `.env`).
3. Définir `BASE_URL`, `APP_PORT` et un `SECRET_KEY` fort.
4. Configurer OIDC si vous avez un [[app-authentik]] ou Keycloak (sections dédiées dans `.env`).
5. Activer Cloudflare Access (`CF_ACCESS_ENABLED=true`) si vous êtes derriere un tunnel.
6. Premier démarrage : créer le compte admin, configurer le chemin de scan EPUB.
7. Activer OPDS via `OPDS_ENABLED=true` et donner l'URL à votre liseuse / app reader.

## Alternatives

### Open source
- [[app-calibre]] — Monstre sacré, EPUB/PDF/MOBI/AZW3, stack Python lourde
- **Calibre-Web** — Front web pour une DB Calibre existante, mature
- **Kavita** — Lecteur comics/manga/LN avec OPDS, interface moderne
- [[app-stump]] — Alternative Rust à Kavita
- **LibreShelves** — Outil minimaliste, EPUB/PDF, plus jeune que BookHaven

### Propriétaires
- **Calibre** (desktop, gratuit mais pas self-hostable en tant que serveur) — Le modèle historique
- **BookFusion** — Lecteur EPUB en ligne, freemium
- **Tolino** — Liseuse + écosystème cloud propriétaire

## Sécurité

- ✅ **OIDC** supporté (déléguer l'auth à Keycloak/Authentik)
- ✅ **RBAC** (admin/editor/user) — limiter qui peut uploader ou demander
- ⚠️ **Bus factor 1** : mainteneur unique, pas d'organisation derrière
- ✅ Pas d'auth native par défaut → mettre derrière HTTPS via [[app-caddy]] ou [[app-traefik]]
- ⚠️ **Uploads utilisateurs** : attention aux EPUB vérolés (XSS via EPUB malformé)
- ✅ Métadonnées stockées en DB = fichiers originaux intacts (rollback trivial)
- ⚠️ Releases peu fréquentes : rester attentif aux CVE Python/Node

## Ressources

- [GitHub HrBingR/BookHaven](https://github.com/HrBingR/BookHaven)
- [Reddit — présentation](https://www.reddit.com/r/selfhosted/comments/1ikog7v/bookhaven_a_selfhosted_epub_library_management/)
- [selfh.st Books](https://selfh.st/apps/?tag=books)

## Pages Liées

- [[cat-books]] — Catégorie Books
- [[app-calibre]] — Alternative plus complète (mais plus lourde)
- [[app-kavita]] — Lecteur moderne avec OPDS, EPUB/CBZ
- [[app-authentik]] — SSO/OIDC à brancher
- [[recettes-docker-compose]] — Templates Docker
