---
title: Inkheart
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, books, pdf, reader, rust, svelte, bibliotheque]
confidence: medium
contested: false
sources: [https://selfh.st/apps/?tag=books, https://gitlab.com/Nystik/inkheart]
---

# 📖 Inkheart

> **Lecteur et indexeur PDF minimaliste auto-hébergé** : parcourez, recherchez en plein texte, annotez et partagez vos PDFs en deep-link direct vers une page précise.

| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [gitlab.com/Nystik/inkheart](https://gitlab.com/Nystik/inkheart) |
| **GitLab** | [Nystik/inkheart](https://gitlab.com/Nystik/inkheart) |
| **License** | MIT |
| **Langage** | Rust (backend), Svelte (frontend), PDF.js |
| **Étoiles** | ~150 ⭐ (GitLab) |
| **Dernière MAJ** | 2026-05 (v1.3.0) |
| **Catégorie** | [[cat-books]] |

## Description

Inkheart est né d'un constat simple : la plupart des lecteurs PDF auto-hébergeables (Paperless-ngx, Calibre, etc.) sont **trop lourds** quand on veut juste **browsing + lecture + lien direct vers une page**. Le mainteneur Nystik voulait pouvoir **lier une page précise d'un PDF depuis Notion** et lire des PDF trop gros pour Google Drive — Inkheart est exactement ce petit outil chirurgical.

L'indexation est **filesystem-based** (pas de base de données à gérer) avec un index full-text gardé en mémoire et persisté sur disque. Le rendu utilise **PDF.js** côté navigateur, ce qui garantit la compatibilité avec n'importe quel viewer moderne. Le tout en **Rust pour le backend** (performances, binaire unique) et **Svelte pour le frontend** (SPA légère).

Inkheart supporte les **collections** (regroupements自定义), les **pinned folders** (raccourcis sidebar), la **recherche full-text** sur l'ensemble du contenu extrait de chaque PDF, le **deep-linking** vers une page précise (`/pdf/123#page=42`), le **sauvegarde de progression** automatique par fichier, et un **mode de visualisation configurable** (page simple, spreads pairs, spreads impairs). Authentification optionnelle via Firebase Auth avec whitelist.

**Points forts** : binaire Rust très rapide, image Docker multi-arch (amd64 + arm64 pour Raspberry Pi), lecteur PDF.js fluide, recherche full-text, deep-linking utile, configuration TOML simple, telemetry Plausible désactivable.

**Points faibles** : **PDF uniquement** (pas d'ePub, pas de Mobi), index full-text **en mémoire** donc à éviter au-delà de quelques milliers de PDFs, pas de métadonnées stockées (tout est filesystem), **bus factor 1** (un seul mainteneur), interface jeune.

## Installation

### Via Docker (recommandé)

Image officielle `nobbe/inkheart` sur Docker Hub, multi-architecture (x86_64 + aarch64).

```yaml
# docker-compose.yml
services:
  inkheart:
    image: nobbe/inkheart:latest
    container_name: inkheart
    restart: unless-stopped
    network_mode: bridge
    ports:
      - "8080:8080"
    volumes:
      - /chemin/vers/pdfs:/media
      - ./covers:/covers
      - ./thumbnails:/thumbnails
      - ./config:/config
    environment:
      - MEDIA_DIR=/media
      - CONFIG_PATH=/config/inkheart.toml
      - BIND_ADDR=0.0.0.0
      - TELEMETRY_ENABLED=false
```

> Créez les répertoires `covers/`, `thumbnails/` et `config/` **avant** le premier démarrage.

### Installation manuelle

Voir `https://gitlab.com/Nystik/inkheart` : cloner, `cargo build --release --no-default-features` (sans telemetry), configurer `inkheart.toml`, lancer le binaire.

## Configuration

1. Monter vos PDFs dans `/media`.
2. Démarrer le conteneur ; le **premier scan** extrait le texte de chaque page (peut être long sur de grosses bibliothèques).
3. Accéder à `http://IP:8080`, créer la première collection.
4. Activer l'auth Firebase si vous voulez restreindre l'accès (whitelist par email).
5. Pour servir derrière un sous-chemin : `BASE_PATH=/pdfs` + reverse-proxy Nginx/Caddy.
6. Désactiver la télémétrie Plausible via `TELEMETRY_ENABLED=false` (sinon un ping anonymisé par page d'index).

## Alternatives

### Open source
- [[app-stump]] — Comics/manga/LN, plus large mais aussi plus lourd
- **Paperless-ngx** — GED complète (OCR, tags, correspondants) — surdimensionné pour juste lire
- **Calibre** — Le monstre, EPUB/MOBI/PDF mais stack Python lourde
- **Hammond** — Lecteur PDF auto-hébergé, plus minimal qu'Inkheart
- **Docspell** — Idem Paperless, plus orienté archivage

### Propriétaires
- **Google Drive** — Viewer PDF intégré, pas de deep-link public stable
- **Readwise Reader** — Outil de lecture highlight multi-formats, freemium, pas self-hostable
- **Zotero** — Gestionnaire biblio avec lecteur PDF intégré, freemium

## Sécurité

- ⚠️ **Bus factor 1** : un seul mainteneur (Nystik), pas de roadmap publique large
- ✅ **Auth optionnelle** via Firebase Auth (whitelist)
- ⚠️ **Telemetry Plausible activée par défaut** — bien lire ce qui est collecté (compteur d'installations, version, taille de biblio bucketisée, pays) ; désactiver via env
- ✅ Pas d'auth native = à mettre derrière un [[app-caddy]] + basic auth ou [[app-authentik]] si exposé
- ⚠️ Index full-text **en RAM** : prévoir de la RAM proportionnelle à la taille de la bibliothèque
- ⚠️ PDF peut contenir du JavaScript embarqué : PDF.js est sandboxé mais restez prudent

## Ressources

- [GitLab Nystik/inkheart](https://gitlab.com/Nystik/inkheart)
- [Docker Hub nobbe/inkheart](https://hub.docker.com/r/nobbe/inkheart)
- [selfh.st Books](https://selfh.st/apps/?tag=books)

## Pages Liées

- [[cat-books]] — Catégorie Books
- [[app-stump]] — Lecteur comics/manga OPDS plus large
- [[app-calibre]] — Géant EPUB/PDF, plus complet mais plus lourd
- [[recettes-docker-compose]] — Templates Docker
- [[app-caddy]] — Reverse-proxy HTTPS recommandé
