La première révélation, en abordant EPUB, est presque décevante de simplicité : un fichier .epub est une archive ZIP. Rien de plus. Renommez mon-livre.epub en mon-livre.zip, double-cliquez, et votre explorateur de fichiers vous ouvrira l'arborescence du livre comme celle d'un dossier ordinaire.

Cette simplicité n'est pas une paresse d'ingénieur : c'est un choix délibéré. Le ZIP est un format universel, implémenté partout, robuste, et déjà compris par toutes les piles logicielles. Bâtir dessus permet à EPUB de concentrer ses règles sur le contenu plutôt que sur la compression ou l'emballage.

Anatomie en 3D d'un fichier EPUB

L'arborescence canonique

Voici à quoi ressemble, une fois décompressé, un EPUB bien formé :

mimetype # doit être le premier fichier, non compressé META-INF/ ├─ container.xml # point d'entrée, pointe vers l'OPF ├─ encryption.xml # optionnel : chiffrement / DRM ├─ signatures.xml # optionnel : signatures numériques ├─ metadata.xml # optionnel : métadonnées hors OPF └─ rights.xml # optionnel : droits d'usage OEBPS/ # nom conventionnel (peut varier) ├─ content.opf # manifest + spine + metadata ├─ toc.ncx # TOC héritée EPUB 2 (optionnelle en 3) ├─ nav.xhtml # TOC EPUB 3 ├─ text/ │ ├─ cover.xhtml │ ├─ chapitre-01.xhtml │ └─ chapitre-02.xhtml ├─ styles/ │ └─ main.css ├─ images/ │ ├─ cover.jpg │ └─ figure-01.png └─ fonts/ └─ Crimson-Regular.woff2

Deux dossiers sont obligatoires et nommés : META-INF/ et, hors archive, le fichier mimetype. Le reste est libre — on voit fréquemment OEBPS/, OPS/, EPUB/, ou même content/. Seule la référence exacte dans container.xml compte.

Le fichier mimetype

Premier dans l'archive, jamais compressé : c'est la signature du format. Son contenu tient en une ligne :

application/epub+zip

Règle non négociable

Le fichier mimetype doit être :
— le premier fichier de l'archive ZIP (offset 0) ;
— stocké sans compression (méthode STORE, pas DEFLATE) ;
— sans extra field ni BOM.

Cela permet à n'importe quel lecteur de reconnaître un EPUB en lisant les 30 premiers octets du fichier, sans même avoir à parser l'archive. La plupart des outils de création (Sigil, Calibre) le placent correctement par défaut ; zip -X0 livre.epub mimetype suivi de zip -Xr livre.epub * le fait à la main.

Le dossier META-INF/

C'est le panneau indicateur de l'archive : il dit au lecteur où trouver le fichier principal. Un seul document y est obligatoire, les autres sont tous optionnels.

container.xml (obligatoire)

META-INF/container.xml<?xml version="1.0" encoding="UTF-8"?>
<container
  xmlns="urn:oasis:names:tc:opendocument:xmlns:container"
  version="1.0">
  <rootfiles>
    <rootfile
      full-path="OEBPS/content.opf"
      media-type="application/oebps-package+xml"/>
  </rootfiles>
</container>

Un rootfile unique suffit en pratique : il pointe vers le fichier OPF. La spécification autorise plusieurs rootfiles (différentes versions linguistiques, par exemple), mais c'est rarissime.

Les autres fichiers de META-INF/

FichierRôleCas d'usage
encryption.xmlListe les ressources chiffrées de l'archiveDRM Adobe ADEPT, Readium LCP, polices obfusquées
signatures.xmlSignatures XMLDSig du packagePreuve d'intégrité éditoriale
metadata.xmlMétadonnées hors packageRare, réservé à des cas industriels
rights.xmlInformations sur les droits et usagesDRM, licence Creative Commons, ONIX
manifest.xmlManifeste alternatifExtension très peu utilisée

Le dossier de contenu

Appelé traditionnellement OEBPS/ — pour Open EBook Publication Structure — il contient tout ce qui fait le livre : le fichier OPF (décrit au chapitre suivant), la table des matières, les documents XHTML de chaque chapitre, les feuilles de style, les images, les polices, les éventuels fichiers audio ou vidéo.

L'organisation en sous-dossiers (text/, images/, styles/) est une convention, non une obligation. Certains EPUB mettent tout à plat, d'autres adoptent une arborescence fine. Ce qui compte, c'est que chaque ressource soit déclarée dans le manifest du fichier OPF.

Tout fichier non déclaré dans le manifest est invisible au lecteur, même s'il est physiquement présent dans l'archive.

Chemins, encodage, casse

Taille, compression, limites

La spécification n'impose aucune limite de taille absolue. En pratique :

Démonstration : créer un EPUB à la main

Par curiosité, voici les commandes brutes pour fabriquer un EPUB minimal depuis un dossier contenant mimetype, META-INF/, et OEBPS/ :

shell# 1. le mimetype doit entrer en premier, sans compression
zip -X0 mon-livre.epub mimetype

# 2. puis le reste, compressé normalement
zip -Xr9D mon-livre.epub META-INF OEBPS

# 3. validation
java -jar epubcheck.jar mon-livre.epub

Inspecter un EPUB existant

Pour fouiller n'importe quel EPUB, renommez simplement en .zip ou utilisez unzip -l mon-livre.epub. C'est l'un des plus puissants outils d'apprentissage : lire des fichiers OPF produits par des éditeurs professionnels vous apprend plus qu'une centaine de tutoriels.


L'archive est décortiquée. Passons maintenant à son cerveau : le fichier OPF qui orchestre tout l'ensemble.