Créer un site web facilement avec MkDocs

PyLadiesCon 2025 - 6 décembre 2025

Françoise CONIL, Ingénieure d’études CNRS, Laboratoire LIRIS Lyon

MkDocs

MkDocs est un générateur de sites statiques orientés documentation de projet.

Présentation

MkDocs créé par Tom Christie pour la documentation de Django REST Framework

  • générer la documentation à partir de sources Markdown
  • bénéficier des capacités de visualisation des éditeurs comme SublimeText
  • projet indépendant depuis 2014 1
  • documentation claire
  • très largement utilisé 2

Facilité de mise en oeuvre

Installer MkDocs dans un environnement virtuel, isolé des packages systèmes.

  1. pip install mkdocs
  2. mkdocs new my-site
  3. cd my-site
  4. mkdocs serve

Fonctions intégrées

  • greffon de recherche (lunr.js)
  • serveur web avec rechargement automatique

Structure générée

Le contenu du projet généré est simple.

Fichier de configuration : mkdocs.yml


site_name: My Docs

Dossier docs pour les fichiers sources

$ tree -a
.
├── docs
│   └── index.md
└── mkdocs.yml

1 directory, 2 files

Page d’accueil : index.md

# Welcome to MkDocs

For full documentation visit [mkdocs.org](https://www.mkdocs.org).

## Commands

* `mkdocs new [dir-name]` - Create a new project.
* `mkdocs serve` - Start the live-reloading docs server.
* `mkdocs build` - Build the documentation site.
* `mkdocs -h` - Print help message and exit.

## Project layout

    mkdocs.yml    # The configuration file.
    docs/
        index.md  # The documentation homepage.
        ...       # Other markdown pages, images and other files.

Ajout de pages

Ajouter de nouvelles pages et créer un menu de navigation qui sera affiché dans l’en-tête du site.

Configurer ce menu avec le paramètre nav dans le fichier mkdocs.yml :

site_name: My Docs
nav:
  - Accueil: index.md
  - Conférences:
    - Conférence PyLadiesCon: conferences/pyladiescon.md
    - Conférence PyConFR: conferences/pyconfr.md

Syntaxes Markdown

Note

One of the most confusing aspects of using Markdown is that practically every Markdown application implements a slightly different version of Markdown. 1

MkDocs utilise la librairie Python-Markdown qui dispose de plusieurs extensions de syntaxe 2

2 thèmes intégrés

  1. thème par défaut : thème mkdocs
    basé sur Bootstrap

  2. clone du thème par défaut du service
    Read the Docs

Déclaration du thème Read the Docs dans le fichier mkdocs.yml

site_name: My Docs

theme: readthedocs

Publication

Publication sur un serveur dédié

La commande mkdocs build génère les fichiers statiques à publier dans le dossier site :

$ mkdocs build
INFO    -  Cleaning site directory
INFO    -  Building documentation to directory: /home/.../my-site/site
INFO    -  Documentation built in 0.13 seconds

Copier les fichiers générés vers votre serveur dédié 1 :

# Exemple de déploiement
$ scp -r ./site/* user@host:/path/to/my-mkdocs-site/
site
├── 404.html
├── conferences
│   ├── logo-pyconfr-2025.svg
│   ├── logo-pyladiescon.svg
│   ├── pyconfr
│   │   └── index.html
│   └── pyladiescon
│       └── index.html
├── css
│   ├── fonts
│   │   ├── fontawesome-webfont.eot
│   │   ├── fontawesome-webfont.svg
│   │   ├── …
│   │   └── Roboto-Slab-Regular.woff2
│   ├── theme.css
│   └── theme_extra.css
├── img
│   └── favicon.ico
├── index.html
├── js
│   ├── html5shiv.min.js
│   ├── jquery-3.6.0.min.js
│   ├── theme_extra.js
│   └── theme.js
├── search
│   ├── lunr.js
│   ├── main.js
│   ├── search_index.json
│   └── worker.js
├── search.html
├── sitemap.xml
└── sitemap.xml.gz

8 directories, 37 files

Publication sur Read the Docs

Read the Docs est la plateforme d’hébergement de référence des documentations Python.

  • version communauté : gratuite pour les projets libres et les communautés
  • hébergement de multiples versions de la documentation, en plusieurs langues
  • plusieurs outils de documentation utilisables : MkDocs, Sphinx, Jupyter Book, …
  • suivre le tutoriel Read the Docs

Quelques informations

Créée en 2010, le code de la plateforme est open source avec ~460 contributeurices.

Read the Docs héberge 80 000 projets open source, sert 55 millions de pages et 40 TB de documentation par mois. Il a 100 000 utilisateurs avec une équipe salariée de seulement 4 personnes.

Voir les comparaisons de Read the Docs avec d’autres plateformes : GitHub Pages, GitBook, Cloudflare Pages et Netlify

Read the Docs : import de projet

Read the Docs recommande de s’authentifier à partir d’une plateforme d’hébergement de code (GitHub, GitLab, Bitbucket) pour faciliter l’import et la configuration des projets.

Read the Docs : fichier de configuration

Vous devez placer un fichier de configuration, nommé .readthedocs.yaml, à la racine de votre dépôt git pour configurer la génération de la documentation sur la plateforme.

# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details

# Required
version: 2

# Set the OS, Python version, and other tools you might need
build:
  os: ubuntu-24.04
  tools:
    python: "3.13"

# Build documentation with Mkdocs
mkdocs:
   configuration: mkdocs.yml

# Optionally, but recommended,
# declare the Python requirements required to build your documentation
# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
python:
   install:
   - requirements: docs/requirements.txt
# Fichier docs/requirements.txt

mkdocs

Read the Docs : tableau de bord

Une fois importée vous avez le tableau de bord suivant pour votre projet :

Publication sur GitHub Pages

Déploiement sur GitHub Pages en tant que site “Project Pages”.

La commande mkdocs gh-deploy

  1. génère le site
  2. crée un commit sur la branche gh-pages, uniquement avec les fichiers générés
  3. pousse le commit sur le remote (GitHub)
  4. les pages sont mise en ligne : https://fconil.github.io/my-mkdocs-site-on-ghpages/
$ mkdocs gh-deploy
INFO    -  Cleaning site directory
INFO    -  Building documentation to directory: /home/fconil/Progs/python/mkdocs-uv/my-mkdocs-site-on-ghpages/site
INFO    -  Documentation built in 0.11 seconds
INFO    -  Copying '/home/fconil/Progs/python/mkdocs-uv/my-mkdocs-site-on-ghpages/site' to 'gh-pages' branch and pushing to GitHub.
Énumération des objets: 52, fait.
Décompte des objets: 100% (52/52), fait.
Compression par delta en utilisant jusqu'à 4 fils d'exécution
Compression des objets: 100% (35/35), fait.
Écriture des objets: 100% (38/38), 802.00 Kio | 4.92 Mio/s, fait.
Total 38 (delta 7), réutilisés 0 (delta 0), réutilisés du pack 0
remote: Resolving deltas: 100% (7/7), completed with 3 local objects.
To github.com:fconil/my-mkdocs-site-on-ghpages.git
   c88cc7b..9104959  gh-pages -> gh-pages
INFO    -  Your documentation should shortly be available at: https://fconil.github.io/my-mkdocs-site-on-ghpages/

GitHub Pages : branches

Material for MkDocs

Présentation du thème Material for MkDocs

Material for MkDocs est construit sur MkDocs.

  • le thème apporte un aspect moderne, adaptatif 1, inspiré de Material Design 2

  • excellent tutoriel de James Willett

  • documentation claire

    • getting started
    • setup : comment structurer et changer l’apparence de votre site (palettes de couleurs, fontes, internationalisation, navigation, …), ainsi que les différentes extensions Markdown disponibles
    • plugins : les plugins indiqués par un COEUR sont réservés aux “sponsors”
    • reference détaille les éléments qui peuvent être utilisés les pages Markdown et la configuration nécessaire

Mise en place aussi simple

  1. Remplacer : pip install mkdocs par : pip install mkdocs-material

Installation

pip install mkdocs-material installe les dépendances nécessaires : MkDocs, Markdown, Pygments et Python Markdown Extensions : (une collection d’extensions de Python Markdown)

  1. Changer la déclaration du thème et ajouter le paramètre site_url dans mkdocs.yml :
site_name: Mon site MkDocs sur GitHub Pages
site_url: https://fconil.github.io/my-mkdocs-site-on-ghpages/
nav:
  - Accueil: index.md
  - Conférences:
    -
theme:
  name: material

site_url

Material for MkDocs recommande de définir site_url car MkDocs fait l’hypothèse que le site est hébergé à la racine du domaine. Certains plugins nécessitent que la propriété soit définie, donc il faut toujours la spécifier.

Apparence de base

Setup : Navigation

Quelques options de configuration de la navigation :

  • navigation.tabs : afficher les titres de premier niveau dans le bandeau 1
  • toc.integrate : intégrer la table des matières à la barre de navigation de gauche
  • navigation.instant : chargement instantané → les clics sur les liens internes sont interceptés et gérés via XHR 2 pour éviter de recharger toute la page
  • navigation.tracking : ajouter l’ancre courante du document à l’URL de la barre d’adresse
  • navigation.top : affichage d’un bouton “back-to-top”

Setup : Fontes

theme:
  font:
    text: Audiowide
    code: Source Code Pro

Possibilité de choisir parmi les 1000 fontes Google ou d’utiliser une fonte hébergée localement, voir Changing the fonts

Setup : Couleurs et mode

theme:
  palette:
    # Palette toggle for light mode (default)
    - scheme: default
      primary: light blue
      accent: pink
      toggle:
        icon: material/weather-night
        name: Dark mode

    # Palette toggle for dark mode (slate)
    - scheme: slate
      primary: teal
      accent: deep orange
      toggle:
        icon: material/weather-sunny
        name: Light mode

Exemple :

  • changer la palette de couleurs avec les paramètres primary et accent
  • afficher un bouton (configurable) pour passer du mode clair au mode sombre

Mode clair

Mode sombre

Setup : lien vers dépôt git

site_name: Mon site MkDocs sur GitHub Pages
site_url: https://fconil.github.io/my-mkdocs-site-on-ghpages/
repo_url: https://github.com/fconil/my-mkdocs-site-on-ghpages

Ajout d’un lien vers le dépôt git avec des informations (versions, stars, forks) dans le header :

Voir Adding a git repository

Reference : Icons, Emojis

Material for MkDocs permet d’utiliser plus de 10 000 icônes et emojis.

Dans mkdocs.yml, déclarer :

  1. attr_list (extension Python Mardown)
  2. pymdownx.emoji (extension Python Mardown Extensions)
markdown_extensions:
  - attr_list
  - pymdownx.emoji:
      emoji_index: !!python/name:material.extensions.emoji.twemoji
      emoji_generator: !!python/name:material.extensions.emoji.to_svg

Dans la page Markdown insérer le shortcode à afficher :

## Icônes et Emojis

- :simple-markdown: : documenter en Markdown
- :simple-materialformkdocs: : avec Material for MkDocs
- :mermaid: : utiliser Mermaid
- :simple-sphinx: : habituée à Sphinx

Rendu :

Reference : Grids

Dans mkdocs.yml, déclarer 2 extensions Python Mardown :

markdown_extensions:
  - attr_list
  - md_in_html

Dans la page Markdown :

<div class="grid cards" markdown>

-   :material-clock-fast:{ .lg .middle } __Set up in 5 minutes__

    ---

    Install [`mkdocs-material`](#) with [`pip`](#) and get up
    and running in minutes
    
-   :fontawesome-brands-markdown:{ .lg .middle } __It's just Markdown__

    ---

    Focus on your content and generate a responsive and searchable static site

</div>  

Reference : Mermaid

Dans mkdocs.yml, déclarer l’extension Python Mardown Extensions suivante :

markdown_extensions:
  - pymdownx.superfences:
      custom_fences:
        - name: mermaid
          class: mermaid
          format: !!python/name:pymdownx.superfences.fence_code_format

Dans la page Markdown, déclarer le diagramme Mermaid :

    ``` mermaid
    ---
    title: Déploiement MkDocs sur GitHub Pages
    ---
    gitGraph
       commit
       commit
       commit
       branch gh-pages
       commit
       switch main
       commit
       commit
       switch gh-pages
       commit
    ```

 

Conclusion

MkDocs et Material : un ensemble simple et efficace

  1. Installez MkDocs et Material for MkDocs dans un environnement virtuel
  2. Générez la structure du projet avec mkdocs new my-site
  3. Ajoutez du contenu
  4. Donnez une apparence moderne à votre site avec Material for MkDocs
  5. Visualisez le rendu localement avec mkdocs serve
  6. Publiez simplement votre documentation avec mkdocs build et mkdocs gh-deploy

Annexes

Installation dans un environnement virtuel

Avec pip et venv

  1. Création et activation du virtualenv
$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install --upgrade pip setuptools wheel
  1. Installation de MkDocs
$ pip install mkdocs

Avec uv

  1. Création et activation du virtualenv
$ uv venv
Using CPython 3.13.5
Creating virtual environment at: .venv
$ source .venv/bin/activate
  1. Installation de MkDocs
$ uv pip install mkdocs

Important

La version de MkDocs qui sera installée par pip sera beaucoup plus récente que la version disponible dans vos paquets système.