Files
2026-06-09 18:40:21 +02:00

117 lines
5.7 KiB
Markdown

---
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é