Si vous savez écrire ceci, vous maîtrisez 80% de Markdown :
## Titre
Texte **gras**, *italique*, `code inline`.
- Liste item 1- Liste item 2
> Citation importante
[Lien](https://exemple.com)
```bashecho "bloc de code"```Ce guide vous apprend la syntaxe complète, les différences entre variantes (CommonMark, GFM, Pandoc), et les pièges fréquents qui cassent votre mise en forme.
Aller à : C’est quoi ? · Cheatsheet · Pièges · Docs-as-code
C’est quoi Markdown ?
Section intitulée « C’est quoi Markdown ? »Imaginons que vous écrivez un email. Vous voulez mettre un mot en gras ou
créer une liste. Dans Word, vous cliquez sur des boutons. En HTML, vous écrivez
des balises <strong> ou <ul>. C’est lourd.
Markdown résout ce problème : vous écrivez du texte quasi-normal, et il se transforme automatiquement en page web formatée.
Avant/après : la différence visuelle
Section intitulée « Avant/après : la différence visuelle »| Ce que vous écrivez (Markdown) | Ce que vous voyez (rendu) |
|---|---|
**important** | important |
*italique* | italique |
- item | • item |
[lien](https://blog.stephane-robert.info) | lien |
`code` | code |
Pourquoi Markdown a été inventé ?
Section intitulée « Pourquoi Markdown a été inventé ? »En 2004, John Gruber (avec les contributions d’Aaron Swartz) crée Markdown avec un objectif simple : écrire pour le web sans connaître HTML.
L’idée géniale : le texte source doit être lisible tel quel, même sans rendu. Comparez :
| HTML (illisible) | Markdown (lisible) |
|---|---|
<h2>Titre</h2> | ## Titre |
<strong>gras</strong> | **gras** |
<a href="url">lien</a> | [lien](url) |
<ul><li>item</li></ul> | - item |
Où utilise-t-on Markdown aujourd’hui ?
Section intitulée « Où utilise-t-on Markdown aujourd’hui ? »Markdown est devenu le standard de facto pour la documentation technique :
| Contexte | Exemples |
|---|---|
| Développement | README, CHANGELOG, documentation de code |
| Plateformes | GitHub, GitLab, Stack Overflow, Reddit |
| Blogs techniques | Dev.to, Hashnode, ce blog |
| Notes personnelles | Obsidian, Notion, Logseq |
| Documentation | Docusaurus, Starlight, MkDocs |
Markdown vs autres formats
Section intitulée « Markdown vs autres formats »| Format | Avantages | Inconvénients |
|---|---|---|
| Markdown | Simple, portable, versionnable | Limité pour mise en page complexe |
| HTML | Contrôle total | Verbeux, difficile à lire |
| Word/Google Docs | WYSIWYG, familier | Binaire, pas versionnable, vendor lock-in |
| LaTeX | Parfait pour maths/publications | Courbe d’apprentissage raide |
Règle simple : si votre contenu est du texte structuré (documentation, articles, notes), Markdown est probablement le meilleur choix.
Quelle variante de Markdown utilisez-vous ?
Section intitulée « Quelle variante de Markdown utilisez-vous ? »Markdown a un “problème” : il existe plusieurs variantes. Le Markdown original de 2004 était volontairement minimaliste. Depuis, chaque plateforme a ajouté ses propres extensions.
Conséquence pratique : une syntaxe qui marche sur GitHub peut ne pas fonctionner ailleurs. Avant d’écrire, identifiez votre contexte.
| Variante | Où l’utiliser | Spécificités |
|---|---|---|
| CommonMark | Standard portable | Base stricte, sans ambiguïté |
| GFM (GitHub Flavored) | GitHub | Tables, task lists, autolinks, footnotes |
| GLFM (GitLab Flavored) | GitLab | Similar à GFM + extensions GitLab |
| Pandoc | Conversion multi-formats | Extensions riches (citations, métadonnées) |
| MDX | Astro, Next.js, Docusaurus | Composants JSX dans Markdown |
CommonMark vs GFM : ce qui change vraiment
Section intitulée « CommonMark vs GFM : ce qui change vraiment »Pensez à CommonMark comme le Markdown de base (le socle commun), et à GFM comme une version enrichie avec des bonus.
Analogie : CommonMark = français standard. GFM = français + argot parisien. Tout le monde comprend le français standard, mais certaines expressions ne marchent qu’à Paris.
| Fonctionnalité | CommonMark | GFM | GLFM |
|---|---|---|---|
| Titres, emphase, listes | ✅ | ✅ | ✅ |
| Blocs de code avec langage | ✅ | ✅ | ✅ |
| Liens et images | ✅ | ✅ | ✅ |
| Tableaux | ❌ | ✅ | ✅ |
Task lists - [x] | ❌ | ✅ | ✅ |
Strikethrough ~~texte~~ | ❌ | ✅ | ✅ |
| Autolinks (URLs cliquables) | ❌ | ✅ | ✅ |
Footnotes [^1] | ❌ | ✅ | ✅ |
| Mermaid diagrams | ❌ | ✅ | ✅ |
Math LaTeX $x^2$ | ❌ | ✅ | ✅ |
Cheatsheet : les 12 syntaxes essentielles
Section intitulée « Cheatsheet : les 12 syntaxes essentielles »Voici les 12 syntaxes que vous utiliserez 90% du temps. Apprenez-les dans l’ordre : les premières sont les plus fréquentes.
1. Titres (niveaux 1 à 6)
Section intitulée « 1. Titres (niveaux 1 à 6) »# Titre niveau 1 (h1)## Titre niveau 2 (h2)### Titre niveau 3 (h3)#### Titre niveau 4 (h4)2. Emphase (gras, italique, barré)
Section intitulée « 2. Emphase (gras, italique, barré) »| Syntaxe | Rendu | Compatibilité |
|---|---|---|
**gras** ou __gras__ | gras | ✅ Universel |
*italique* ou _italique_ | italique | ✅ Universel |
~~barré~~ | GFM/GLFM | |
***gras italique*** | gras italique | ✅ Universel |
3. Liens et images
Section intitulée « 3. Liens et images »[Texte du lien](https://url.com)[Texte du lien](https://url.com "Titre au survol")
Exemple : [Documentation Git](/docs/developper/version/git/) crée un lien
interne.
4. Listes à puces
Section intitulée « 4. Listes à puces »- Premier élément- Deuxième élément - Sous-élément (indentation cohérente) - Autre sous-élément- Troisième élémentRendu :
- Premier élément
- Deuxième élément
- Sous-élément (indentation cohérente)
- Autre sous-élément
- Troisième élément
5. Listes numérotées
Section intitulée « 5. Listes numérotées »1. Premier2. Deuxième3. TroisièmeAstuce : vous pouvez utiliser 1. partout, Markdown renumérote
automatiquement :
1. Premier1. Deuxième1. Troisième6. Task lists (GFM/GLFM)
Section intitulée « 6. Task lists (GFM/GLFM) »- [x] Tâche terminée- [ ] Tâche à faire- [ ] Autre tâcheRendu (sur GitHub/GitLab) :
- Tâche terminée
- Tâche à faire
- Autre tâche
7. Code inline et blocs de code
Section intitulée « 7. Code inline et blocs de code »Code inline : entourez de backticks simples.
Utilisez la commande `kubectl get pods` pour lister les pods.Bloc de code : utilisez trois backticks avec le langage.
```bash#!/bin/bashecho "Hello DevOps"kubectl get pods -n production```8. Tableaux (GFM/GLFM)
Section intitulée « 8. Tableaux (GFM/GLFM) »| Colonne 1 | Colonne 2 | Colonne 3 ||-----------|:---------:|----------:|| Gauche | Centré | Droite || Données | Données | Données |Rendu :
| Colonne 1 | Colonne 2 | Colonne 3 |
|---|---|---|
| Gauche | Centré | Droite |
| Données | Données | Données |
Alignement :
:---aligné à gauche (défaut):---:centré---:aligné à droite
9. Citations (blockquotes)
Section intitulée « 9. Citations (blockquotes) »> Ceci est une citation.> Elle peut s'étendre sur plusieurs lignes.>> > Et même être imbriquée.Rendu :
Ceci est une citation. Elle peut s’étendre sur plusieurs lignes.
Et même être imbriquée.
10. Séparateurs horizontaux
Section intitulée « 10. Séparateurs horizontaux »Trois tirets, astérisques ou underscores créent une ligne horizontale :
---***___11. Échappement des caractères spéciaux
Section intitulée « 11. Échappement des caractères spéciaux »Pour afficher un caractère Markdown littéralement, préfixez-le d’un backslash :
\*Ceci n'est pas en italique\*\# Ceci n'est pas un titreCaractères à échapper : \ ` * _ { } [ ] ( ) # + - .
! |
12. Notes de bas de page
Section intitulée « 12. Notes de bas de page »Voici une affirmation importante[^1].
[^1]: Source de l'affirmation avec lien.Rendu : Voici une affirmation importante[^1].
Pièges fréquents et solutions
Section intitulée « Pièges fréquents et solutions »Même les développeurs expérimentés tombent dans ces pièges. La bonne nouvelle : une fois que vous les connaissez, vous ne vous ferez plus avoir.
Piège 1 : le retour à la ligne ne fonctionne pas
Section intitulée « Piège 1 : le retour à la ligne ne fonctionne pas »Problème : vous appuyez sur Entrée, mais le texte reste sur la même ligne.
Première ligneDeuxième ligneRendu (collé) : Première ligne Deuxième ligne
Solutions :
Ajoutez deux espaces à la fin de la ligne :
Première ligne··Deuxième ligne(Les ·· représentent deux espaces invisibles)
Utilisez <br> explicitement :
Première ligne<br>Deuxième ligneSéparez par une ligne vide (crée un nouveau paragraphe) :
Première ligne
Deuxième lignePiège 2 : la liste imbriquée casse
Section intitulée « Piège 2 : la liste imbriquée casse »Problème : votre sous-liste ne s’affiche pas correctement.
- Item 1 - Sous-item (indentation insuffisante)Solution : indentez de façon cohérente. La sous-liste doit être plus à droite que le texte de l’item parent. Utilisez 2 ou 4 espaces selon votre convention :
- Item 1 - Sous-item (aligné correctement)Piège 3 : le bloc de code sort de la liste
Section intitulée « Piège 3 : le bloc de code sort de la liste »Problème : le code apparaît en dehors de la liste.
1. Étape 1```bashecho "code"```Solution : ajoutez une ligne vide après l’item, puis indentez le bloc de code pour qu’il soit visuellement aligné sous le texte de l’item :
1. Étape 1
```bash echo "code" ```Piège 4 : le tableau ne rend pas
Section intitulée « Piège 4 : le tableau ne rend pas »Causes possibles :
| Symptôme | Cause | Solution |
|---|---|---|
| Tableau en texte brut | Moteur non-GFM | Vérifier la compatibilité |
| Colonnes décalées | Pipes ` | ` manquants |
| Pas de ligne d’en-tête | Ligne ` | --- |
Structure minimale obligatoire :
| Col1 | Col2 ||------|------|| A | B |Piège 5 : les caractères spéciaux cassent le rendu
Section intitulée « Piège 5 : les caractères spéciaux cassent le rendu »Problème : *, _, #, [ interprétés comme syntaxe.
Solution : échappez avec \ :
Le fichier \*.log contient les erreurs.Prix : 10\$ (pas 10$)Markdown pour la documentation DevOps
Section intitulée « Markdown pour la documentation DevOps »En tant que professionnel DevOps/DevSecOps, vous écrirez énormément en Markdown. Voici les cas d’usage principaux.
README de projet
Section intitulée « README de projet »Structure type d’un bon README :
# Nom du projet
Description en une phrase.
## Installation
```bashpip install mon-projet```
## Utilisation
```bashmon-projet --help```
## Configuration
| Variable | Description | Défaut ||----------|-------------|--------|| `API_KEY` | Clé d'API | - |
## Contribuer
Voir [CONTRIBUTING.md](CONTRIBUTING.md).Runbooks et procédures
Section intitulée « Runbooks et procédures »## Procédure : restart service en production
### Prérequis
- Accès SSH au serveur- Droits sudo
### Étapes
1. Vérifier l'état actuel :
```bash systemctl status mon-service ```
2. Redémarrer :
```bash sudo systemctl restart mon-service ```
3. Valider :
```bash curl -I https://mon-service.local/health ```
### Rollback
Si le service ne répond pas après 2 min, restaurer la version précédente.Docs-as-Code : versionner sa documentation
Section intitulée « Docs-as-Code : versionner sa documentation »L’approche docs-as-code traite la documentation comme du code :
- Stockée dans Git (versionnée, historique, branches)
- Revue en Pull Request (relecture, commentaires)
- Lintée automatiquement (markdownlint, vale)
- Déployée en CI/CD (preview, publication)
# Installer markdownlint pour valider votre Markdown# https://www.npmjs.com/package/markdownlint-clinpm install -g markdownlint-cli
# Linter un fichiermarkdownlint README.md
# Linter tout un dossiermarkdownlint docs/Checklist docs-as-code :
- README structuré (Installation, Usage, Configuration)
- Linter Markdown en CI (markdownlint, vale)
- Preview automatique en PR
- Déploiement automatique au merge
Outils et éditeurs recommandés
Section intitulée « Outils et éditeurs recommandés »| Catégorie | Exemples |
|---|---|
| Éditeur avec preview | VS Code, Zed, Obsidian, Typora |
| Linter | markdownlint-cli, vale |
| Convertisseur | Pandoc (vers PDF, DOCX, HTML) |
| Diagrammes | Mermaid, Excalidraw, PlantUML |
À retenir
Section intitulée « À retenir »-
Markdown = texte lisible même sans rendu, idéal pour la documentation versionnée.
-
Identifiez votre variante : CommonMark (portable), GFM (GitHub), GLFM (GitLab), MDX (sites modernes).
-
Les 5 syntaxes les plus utilisées : titres
##, emphase**gras**, listes-, code```, liens[]() -
Pièges majeurs : retours à la ligne, indentation des listes, blocs de code dans les listes.
-
Spécifiez toujours le langage des blocs de code pour la coloration syntaxique.
-
Docs-as-code : versionnez votre documentation dans Git, lintez avec markdownlint, reviewez en PR.
Prochaines étapes
Section intitulée « Prochaines étapes »FAQ - Questions Fréquemment Posées
Section intitulée « FAQ - Questions Fréquemment Posées »Définition
Markdown est un langage de balisage léger créé en 2004 par John Gruber (avec les contributions d'Aaron Swartz). Son objectif : écrire pour le web sans connaître HTML.Avantages
| Avantage | Détail |
|---|---|
| Lisible | Le texte source est compréhensible même sans rendu |
| Simple | Syntaxe minimaliste à apprendre en 5 minutes |
| Portable | Fichier .md = simple fichier texte |
| Versionnable | Compatible Git (diff, merge, historique) |
Cas d'usage
- README de projets GitHub/GitLab
- Documentation technique (Docusaurus, MkDocs, Starlight)
- Blogs (Dev.to, Hashnode)
- Notes personnelles (Obsidian, Notion)
Les trois variantes principales
| Variante | Plateforme | Spécificités |
|---|---|---|
| CommonMark | Standard portable | Base stricte, sans ambiguïté |
| GFM | GitHub | Tables, task lists, footnotes, Mermaid |
| GLFM | GitLab | Similar à GFM + extensions GitLab |
Ce que GFM/GLFM ajoutent à CommonMark
| Fonctionnalité | CommonMark | GFM/GLFM |
|---|---|---|
| Tableaux | ❌ | ✅ |
Task lists - [x] |
❌ | ✅ |
Strikethrough ~~texte~~ |
❌ | ✅ |
Footnotes [^1] |
❌ | ✅ |
| Diagrammes Mermaid | ❌ | ✅ |
Quelle variante choisir ?
- GitHub → GFM
- GitLab → GLFM
- Documentation portable → CommonMark
- Sites modernes (Astro, Next.js) → MDX
Le problème
En Markdown, appuyer sur Entrée ne crée pas de saut de ligne visible. Le texte reste collé.Première ligne
Deuxième ligne
Rendu : Première ligne Deuxième ligne (collé !)Solutions
| Méthode | Syntaxe | Résultat |
|---|---|---|
| Deux espaces | Ligne 1·· (espaces invisibles) |
Saut de ligne |
| Balise BR | Ligne 1<br> |
Saut de ligne |
| Ligne vide | Ligne vide entre les deux | Nouveau paragraphe |
Exemple avec deux espaces
Première ligne··
Deuxième ligne
(Les ·· représentent deux espaces en fin de ligne)Syntaxe de base
| Colonne 1 | Colonne 2 | Colonne 3 |
|-----------|:---------:|----------:|
| Gauche | Centré | Droite |
| Données | Données | Données |
Rendu
| Colonne 1 | Colonne 2 | Colonne 3 |
|---|---|---|
| Gauche | Centré | Droite |
Alignement
| Syntaxe | Alignement |
|---|---|
:--- |
Gauche (défaut) |
:---: |
Centré |
---: |
Droite |
Compatibilité
⚠️ Les tableaux ne font pas partie de CommonMark. Ils nécessitent GFM (GitHub) ou GLFM (GitLab).Si le tableau ne s'affiche pas
- Vérifier que le moteur supporte GFM
- Vérifier la ligne séparatrice
|---|---| - Vérifier que toutes les colonnes ont des pipes
|
Le problème
Sans indentation correcte, le bloc de code sort de la liste :1. Étape 1
```bash
echo "code"
### La solution
Ajoutez une **ligne vide** après l'item, puis **indentez** le bloc de code :
```markdown
1. Étape 1
```bash
echo "code"
```
2. Étape 2
Règle d'indentation
Le bloc de code doit être visuellement aligné sous le texte de l'item parent. Généralement 4 espaces d'indentation.Exemple complet
1. Vérifier l'état :
```bash
systemctl status nginx
```
2. Redémarrer si nécessaire :
```bash
sudo systemctl restart nginx
```
Éditeurs avec preview
| Outil | Type | Avantage |
|---|---|---|
| VS Code | IDE | Extensions riches, gratuit |
| Obsidian | Notes | Liens bidirectionnels |
| Typora | WYSIWYG | Rendu temps réel |
| Zed | IDE | Rapide, moderne |
Linter (validation)
# Installation
npm install -g markdownlint-cli
# Valider un fichier
markdownlint README.md
# Valider un dossier
markdownlint docs/
Convertisseur
Pandoc convertit Markdown vers de nombreux formats :# Markdown vers PDF
pandoc README.md -o README.pdf
# Markdown vers DOCX
pandoc README.md -o README.docx
# Markdown vers HTML
pandoc README.md -o README.html
Diagrammes
- Mermaid : diagrammes dans le code (supporté GitHub/GitLab)
- Excalidraw : schémas à la main, export SVG
- PlantUML : diagrammes UML
Le problème
Certains caractères ont une signification spéciale en Markdown :*et_→ italique/gras#→ titre[et]→ liens`→ code
La solution : le backslash
Préfixez le caractère avec\ :\*Ceci n'est pas en italique\*
\# Ceci n'est pas un titre
Le fichier \*.log contient les erreurs
Prix : 10\$
Caractères à échapper
| Caractère | Signification normale |
|---|---|
\ |
Échappement |
` |
Code inline |
* |
Emphase |
_ |
Emphase |
{ } |
Extensions |
[ ] |
Liens |
( ) |
Liens |
# |
Titres |
+ - |
Listes |
. |
Listes numérotées |
! |
Images |
| |
Tableaux |