Open source · Go · auto-hébergé

Votre bibliothèque eBook,
maintenue par une IA

Edda est un serveur de bibliothèque numérique personnel : catalogue OPDS 1.2 & 2.0, interface Vue 3, lecteur EPUB intégré, un seul binaire. Kvasir est l'agent IA qui enrichit ce catalogue tout seul, et Muninn et Huginn sont les applications qui le mettent entre vos mains, sur liseuse e-ink comme sur tablette.

Les quatre projets

Un écosystème, quatre briques

Mimisbrunnr — le puits de savoir. Un serveur, son agent, et deux applications de lecture. Chacune s'utilise seule.

Edda

La bibliothèque · serveur Go

Serveur eBook léger : catalogue OPDS 1.2/2.0, interface web Vue 3, lecteur EPUB intégré, le tout en un binaire statique avec frontend embarqué.

  • Catalogue OPDS 1.2 (/opds) et 2.0 (/opds/v2)
  • Upload EPUB/PDF, métadonnées extraites, doublons détectés (SHA-256)
  • Multi-utilisateurs, profils enfants, classification d'âge
  • Liens de partage révocables, pile à lire, souhaits, statistiques
  • Serveur MCP et kosync (progression KOReader)
Go 1.24Vue 3Tailwind SQLiteOPDSMCPPWA

Kvasir

L'assistant · agent IA

Agent Go autonome qui pilote une ou plusieurs bibliothèques Edda via leur serveur MCP : enrichissement des métadonnées, chat sur le catalogue, maintenance en lot.

  • Enrichissement auto : tags, résumés, classification d'âge, séries
  • Assistant conversationnel branché sur votre catalogue
  • Passe de cohérence globale (audit) : fusionne séries et auteurs mal orthographiés
  • Maintenance en lot (batch) résiliente aux quotas LLM
  • Appairage par code one-time, sans copier-coller de secrets
GoClient MCPAnthropic OllamaDocker ~25 MoDaemon

Muninn

La liseuse e-ink · Android

Application Kotlin/Compose taillée pour les liseuses Boox : le catalogue OPDS 2.0 d'Edda, en noir sur blanc, sans animation, avec de grandes cibles tactiles.

  • Navigation du flux OPDS 2.0 : auteurs, tags, éditeurs, séries, non lus
  • Recherche dans le catalogue
  • Téléchargement des EPUB et ouverture dans NeoReader
  • Interface pensée e-ink : contraste franc, zéro mouvement
KotlinComposeOPDS 2.0 BooxAPK

Huginn

La tablette · Android

Le frère moderne de Muninn — Hugin & Munin, les corbeaux d'Odin. Même catalogue, style Material 3 pour tablette, et un lecteur EPUB intégré.

  • Catalogue OPDS 2.0 : carrousels, facettes, pagination
  • Bibliothèque locale : tri, filtres, progression
  • Lecteur Readium intégré : sommaire, notes, typographie par livre
  • Synchronisation entre appareils : progression, notes, « lu », pile à lire
  • Mises à jour in-app depuis la forge
Kotlin 2.1Material 3Readium minSdk 26APK
Où lire ses livres

Les applications de lecture

Edda parle OPDS : tout lecteur compatible peut s'y brancher. Deux applications maison vont plus loin — téléchargement, lecteur intégré, synchronisation — et le lecteur web d'Edda reste toujours là, sans rien installer.

Muninn

Liseuses e-ink Boox · Android

Lire sur une Boox voulait dire naviguer la web UI dans un navigateur e-ink poussif, télécharger, puis retrouver le fichier. Muninn est un client de catalogue natif, pensé e-ink d'abord : chercher, toucher, télécharger, lire.

  • Connexion à un serveur Edda par jeton OPDS (par utilisateur ou partagé)
  • Flux de navigation OPDS 2.0 complet et recherche
  • Téléchargement EPUB, ouverture dans NeoReader (lecteur natif Boox)
  • Compose optimisé e-ink : noir sur blanc, aucune animation
  • Marquer un livre « lu » depuis la liseuse

Huginn

Tablettes Android · Material 3

La même bibliothèque sur un écran couleur : carrousels, couleur dynamique Material You, mode sombre, navigation adaptative — et cette fois le livre s'ouvre dans l'application.

  • Catalogue OPDS 2.0 : sections, facettes, pagination, recherche plein texte
  • Fiche détaillée deux colonnes sur grand écran
  • Lecteur Readium intégré : pagination, sommaire, notes, typographie par livre
  • Synchronisation cross-device : progression, notes, « lu », pile à lire
  • Mise à jour de l'APK depuis l'application
Et avec le reste du monde

Lecteurs OPDS compatibles

Aucune exclusivité : le catalogue est un flux OPDS standard. Voici les clients éprouvés, par plateforme.

KOReader

Kobo · Kindle · PocketBook · Android · Linux

Catalogue OPDS intégré, et surtout la seule application tierce qui synchronise sa progression avec Edda via l'endpoint kosync.

Synchronisation kosync

Moon+ Reader

Android

Gestionnaire de catalogues OPDS classique ; ajoutez l'URL /opds avec le jeton en paramètre.

Librera Reader

Android

Lecteur multi-formats (EPUB, PDF, CBZ…) avec navigation des catalogues OPDS.

FBReader

Android · iOS · Windows · macOS · Linux

Ses « catalogues réseau » acceptent un flux OPDS personnalisé, sur mobile comme sur bureau.

Thorium Reader

Windows · macOS · Linux

Lecteur EPUB de bureau signé Readium, avec navigation des flux OPDS 1.x et 2.x.

Foliate

Linux (GNOME)

Lecteur EPUB léger capable d'ouvrir un catalogue OPDS distant.

KyBook 3

iOS · iPadOS

Le vétéran OPDS sur iOS : ajout de catalogues, téléchargement et lecture dans l'app.

Panels

iOS · iPadOS

Pour la bande dessinée et les comics : monte un catalogue OPDS comme source de séries.

calibre

Windows · macOS · Linux

Via le plugin OPDS Client : récupère les nouveautés du catalogue dans la bibliothèque calibre locale.

Le navigateur

Partout · rien à installer

Le lecteur EPUB d'Edda tourne dans l'onglet, avec swipe et raccourcis clavier ; l'interface est aussi une PWA installable, service worker hors-ligne inclus.

Brancher un lecteur OPDS

  1. Récupérez votre jeton OPDS dans la page de compte d'Edda.
  2. Ajoutez le catalogue : https://votre-serveur/opds (OPDS 1.2) ou /opds/v2 (OPDS 2.0, JSON).
  3. Authentifiez-vous par en-tête Authorization: Bearer, ou en ?token= pour les lecteurs qui ne savent pas envoyer d'en-tête.
# OPDS 1.2 — en-tête Bearer
curl -H "Authorization: Bearer VOTRE_JETON" \
     https://votre-serveur/opds

# OPDS 2.0 — jeton en paramètre d'URL
curl "https://votre-serveur/opds/v2?token=VOTRE_JETON"

Synchroniser KOReader (kosync)

Edda expose un serveur kosync compatible KOReader : la position de lecture suit l'appareil, sans service tiers. Le pourcentage est partagé avec le lecteur web d'Edda, on passe donc de la liseuse au navigateur sans perdre sa page.

  1. Dans KOReader : Outils → Progress sync → Custom sync server.
  2. Serveur : l'URL de base de votre instance Edda (pas le chemin /opds).
  3. Identifiant : votre nom d'utilisateur Edda. Mot de passe : votre jeton OPDS.
Comment ça s'articule

Un catalogue au centre, MCP sur le côté

Les lecteurs consomment un flux OPDS standard. Kvasir, lui, entre par le serveur MCP après un appairage par code one-time.

Lecteurs

Muninn, Huginn, KOReader, navigateur — OPDS 1.2 / 2.0

OPDS
+ kosync

Edda

Catalogue, métadonnées, utilisateurs — expose un serveur MCP

MCP
+ webhooks

Kvasir

Client MCP qui lit et écrit le catalogue via un LLM

API

LLM

Anthropic, Ollama Cloud… pour raisonner sur chaque livre

Edda en détail

Tout ce qu'il faut pour une bibliothèque

Un binaire statique, frontend embarqué, prêt à l'emploi.

🔖

OPDS 1.2 & 2.0

Flux de navigation et d'acquisition compatibles avec tous les lecteurs OPDS.

⬆️

Upload & métadonnées

Extraction instantanée (titre, auteurs, couverture, série, tags) et refus des doublons par hachage SHA-256.

👨‍👩‍👧

Profils & âge

Profils enfants, filtres par âge (3+ à 18+), plafond d'âge par profil.

🔗

Liens de partage

Une URL pour un livre, une série, un tag ou un auteur : aperçu HTML, OPDS 1.2 ou 2.0, sans compte, révocable.

📊

Statistiques

Tableau de bord par utilisateur : totaux, notes, top auteurs/tags/séries, graphe sur 12 mois.

📚

Pile à lire & souhaits

File de lecture ordonnée, liste de souhaits et recommandations entre utilisateurs, exposées en OPDS.

📰

Lecteur EPUB

Lecteur intégré avec navigation entre livres, swipe et raccourcis clavier.

🔄

Sync KOReader

Endpoint kosync natif : la progression suit l'appareil et rejoint le lecteur web.

🔌

Serveur MCP

Accès des agents IA au catalogue via le Model Context Protocol.

📲

PWA hors-ligne

Installable comme application, service worker pour la consultation hors connexion.

🪝

Webhooks & sauvegardes

Callbacks HTTP sur le cycle de vie des livres, sauvegardes SQLite nocturnes avec rétention.

⬇️

Mise à jour en un clic

Le binaire se met à jour depuis les releases de la forge, directement depuis l'interface.

Démarrage rapide

En route en quelques minutes

Lancez le serveur, branchez un lecteur, puis appairez l'agent.

1 · Lancer Edda

# Build (Go 1.24+)
go build -o edda .

# Démarrer avec le backend SQLite
AUTH_PASSWORD=secret \
BACKEND=sqlite ./edda

# Web   : http://localhost:8080
# OPDS  : http://localhost:8080/opds
# OPDS2 : http://localhost:8080/opds/v2

Ou en conteneur : AUTH_PASSWORD=secret docker compose up -d, le dossier books/ est monté sur /data/books.

2 · Installer une application de lecture

# Boox / e-ink : Muninn
adb install muninn-vX.Y.apk

# Tablette Android : Huginn
adb install huginn-vX.Y.apk

# Puis dans l'app : URL du serveur
# + jeton OPDS (page de compte Edda)

Les APK sont attachés à chaque release de muninn-eink et huginn-tablet — ou lisez simplement dans le navigateur.

3 · Appairer Kvasir

# Installer
go install git.helheim.net/mimisbrunnr/\
  kvasir-agent/cmd/kvasir@latest

# Appairer (code généré dans l'admin Edda)
kvasir pair \
  --nxt-opds https://books.example.com \
  --code     K4Q9-PN2X \
  --name     example

# Enrichir toute la bibliothèque
kvasir batch --instance example

Le flag --nxt-opds garde l'ancien nom du serveur, avant qu'il ne devienne Edda.

Questions fréquentes

FAQ

L'essentiel sur Edda, Kvasir et les applications de lecture.

Qu'est-ce qu'Edda ?

Edda est un serveur de bibliothèque eBook personnel et auto-hébergé écrit en Go. Il expose un catalogue OPDS 1.2 (/opds) et OPDS 2.0 (/opds/v2) consultable depuis n'importe quel lecteur OPDS, fournit une interface web Vue 3 avec lecteur EPUB intégré, et se distribue en un seul binaire statique avec frontend embarqué.

Avec quelles applications lire sa bibliothèque ?

Trois voies. Le lecteur web d'Edda, installable comme PWA, ne demande rien à installer. Les deux applications maison — Muninn pour les liseuses e-ink Boox, Huginn pour les tablettes Android — ajoutent le téléchargement, un lecteur Readium intégré (Huginn) et la synchronisation. Enfin, n'importe quel lecteur OPDS tiers fonctionne : KOReader, Moon+ Reader, Librera, FBReader, Thorium, Foliate, KyBook 3, Panels.

Comment brancher un lecteur OPDS ?

Ajoutez le catalogue https://votre-serveur/opds (OPDS 1.2) ou /opds/v2 (OPDS 2.0) dans le lecteur, puis authentifiez-vous avec le jeton OPDS de l'utilisateur : en-tête Authorization: Bearer, ou paramètre ?token= pour les lecteurs qui ne gèrent pas les en-têtes.

KOReader peut-il synchroniser sa progression ?

Oui, sans service tiers : Edda expose un serveur kosync. Dans KOReader, Outils → Progress sync → Custom sync server = l'URL de votre instance, identifiant = votre nom d'utilisateur Edda, mot de passe = votre jeton OPDS. Le pourcentage de progression est partagé avec le lecteur web d'Edda.

Qu'est-ce que Kvasir ?

Kvasir est un agent IA autonome écrit en Go qui se connecte à une ou plusieurs instances Edda via leur serveur MCP. Il enrichit automatiquement les métadonnées (tags, résumés, classification d'âge, séries), fusionne les séries et auteurs mal orthographiés lors d'une passe audit, répond à des questions sur le catalogue et exécute des batches de maintenance. Il fonctionne avec plusieurs backends LLM comme Anthropic ou Ollama Cloud.

Comment Edda et Kvasir communiquent-ils ?

Edda expose un serveur MCP (Model Context Protocol). Kvasir s'y connecte comme client après un appairage par code one-time : les secrets sont négociés entre les deux services, rien ne transite par la ligne de commande. L'agent lit et écrit ensuite le catalogue en s'appuyant sur un LLM pour raisonner sur chaque livre.

Est-ce gratuit et open-source ?

Oui. Edda, Kvasir, Muninn et Huginn sont quatre projets open-source publiés sur la forge git.helheim.net sous l'organisation Mimisbrunnr. Edda se lance via un binaire Go ou Docker ; Kvasir s'installe avec go install ou via une image Docker d'environ 25 Mo ; Muninn et Huginn se sideloadent depuis les APK des releases.