En une phrase
Le Markdown est une syntaxe qui permet d'écrire du texte riche (comme du gras, des listes et des liens) en utilisant une ponctuation simple et lisible, au lieu de code complexe ou de boutons lourdingues.
Le problème qu'il résout
Rembobinons la cassette jusqu'au début des années 2000. Si vous vouliez écrire pour le web, vous aviez deux mauvaises options. Option A : écrire du HTML brut. Ça voulait dire taper à la main des <p>, <strong>, <ul>, <li>, et un milliard d'autres balises. C'était lent, source d'erreurs, et votre texte source ressemblait à un éternuement de robot. Option B : utiliser un éditeur « What You See Is What You Get » (WYSIWYG), comme ceux des premières plateformes de blog ou la fonction « Enregistrer en HTML » de Microsoft Word. Ceux-ci étaient connus pour cracher du HTML surchargé, bordélique et non standard qui plantait de manière mystérieuse.
Aucune de ces options n'était bonne pour le rédacteur.
En 2004, l'écrivain John Gruber, avec l'aide du regretté Aaron Swartz, a créé le Markdown pour résoudre ce dilemme. Leur philosophie de base était radicale : la version brute en texte brut d'un document devait être la plus lisible possible, sans qu'aucune balise de formatage ne vienne gêner. L'objectif n'était pas de remplacer le HTML, mais de créer une syntaxe axée sur l'écriture qui pourrait être facilement convertie en HTML propre.
Au lieu d'écrire <strong>Regardez ça !</strong>, vous pouviez simplement écrire **Regardez ça !**. Au lieu d'un tas de balises <ul> et <li> pour une liste, il suffisait d'utiliser des astérisques. Il a été conçu pour les humains d'abord, les ordinateurs ensuite. Ça l'a rendu parfait pour les articles de blog, les commentaires, les forums, et surtout, la documentation de projet.
Comment ça marche sous le capot
Quand vous tapez du Markdown dans un éditeur et que vous voyez un bel aperçu sur le côté, vous assistez à une danse en deux temps : l'analyse (parsing) et le rendu (rendering). Un « visualiseur » ou « éditeur » Markdown n'est qu'un outil qui exécute cette danse en temps réel.
Le parser : Des symboles à la structure
La première étape est l'analyse (parsing). Un programme appelé un parser lit votre document en texte brut de haut en bas. Il ne se contente pas de lire des mots ; il recherche les caractères spéciaux qui définissent la syntaxe du Markdown.
- Il voit
## Mon idée génialeau début d'une ligne et se dit : « Aha ! Ce n'est pas juste du texte, c'est un titre de niveau 2. » - Il voit une ligne qui commence par
*et la reconnaît comme le début d'un élément de liste. - Il trouve du texte entouré de doubles astérisques, comme
**ceci**, et le marque comme « emphase forte » (gras).
Ce faisant, le parser ne génère pas directement du HTML. À la place, il construit généralement une représentation interne de la structure de votre document, souvent appelée un Arbre Syntaxique Abstrait (Abstract Syntax Tree, ou AST). Voyez ça comme un plan d'architecte. Le plan n'a pas de balises <h2> ; il a un nœud « Titre » (Heading) avec un « niveau » de 2, et son contenu est « Mon idée géniale ».
Voici un aperçu simplifié du processus :
Votre Markdown :
## Liste de courses
- Lait
- **Important** : Pain
AST simplifié (le plan) :
Document
└── Heading (level 2, content: "Liste de courses")
└── UnorderedList
├── ListItem (content: "Lait")
└── ListItem
└── Text (content: " ")
└── Strong (content: "Important")
└── Text (content: " : Pain")
Le renderer : De la structure au HTML
Une fois que le parser a construit le plan (l'AST), le renderer prend le relais. Le boulot du renderer est de parcourir cette structure en arbre et de convertir chaque nœud dans son format final, qui est généralement du HTML.
- Il voit le nœud
Heading(niveau 2) et sort<h2>Liste de courses</h2>. - Il voit le nœud
UnorderedListet encadre son contenu avec<ul>et</ul>. - Il trouve le nœud
ListItemet l'enveloppe dans<li>et</li>. - Il voit le nœud
Stronget enveloppe son contenu dans<strong>et</strong>.
Le HTML qui en résulte :
<h2>Liste de courses</h2>
<ul>
<li>Lait</li>
<li><strong>Important</strong> : Pain</li>
</ul>
Ce HTML propre est ensuite transmis au navigateur web (ou à ce qui affiche le résultat final), qui l'utilise pour afficher le texte formaté que vous voyez réellement.
Les variantes et extensions (Le compromis « CommonMark »)
La spec originale de Gruber était un peu vague par endroits. Que se passe-t-il si vous mettez une liste dans une citation (blockquote) elle-même dans une autre liste ? Différents parsers donnaient des réponses différentes. Cela a conduit à l'émergence de « variantes » (flavors) de Markdown, chacune avec ses propres petites modifications et extensions.
| Fonctionnalité | Markdown original | GitHub Flavored Markdown (GFM) |
|---|---|---|
| Tableaux | Non | Oui |
Texte barré (~~texte~~) |
Non | Oui |
Listes de tâches (- [x]) |
Non | Oui |
| Blocs de code délimités (``````) | Non | Oui |
La variante la plus populaire est de loin le GitHub Flavored Markdown (GFM), qui a ajouté des fonctionnalités essentielles pour la collaboration entre développeurs comme les tableaux, les blocs de code avec coloration syntaxique et les listes de tâches. La prolifération des variantes a créé son propre problème : votre texte pouvait s'afficher différemment sur GitHub et sur Stack Overflow.
Pour résoudre ce problème, un groupe de développeurs a lancé l'initiative CommonMark, un projet visant à créer une spécification très détaillée et sans ambiguïté pour le Markdown. La plupart des parsers Markdown modernes visent désormais la compatibilité CommonMark, GFM en étant un sur-ensemble (superset) populaire.
Histoires vécues
Le README qui a sauvé le projet
Une développeuse, appelons-la Priya, a rejoint une nouvelle équipe. La base de code (codebase) était complexe et les auteurs originaux étaient partis depuis longtemps. La panique commençait à s'installer jusqu'à ce qu'elle le trouve : le README.md à la racine du projet. Ce n'était pas juste un fichier ; c'était une bouée de sauvetage. À l'aide de titres clairs, il expliquait le but du projet. Une section « Pour commencer » (Getting Started) utilisait des listes numérotées pour détailler les étapes exactes de l'installation. Les commandes cruciales étaient présentées dans des blocs de code avec une coloration syntaxique parfaite. Il y avait même une section « Dépannage » (Troubleshooting) avec les erreurs courantes et leurs solutions. Priya a pu faire tourner le projet sur sa machine en moins d'une heure, au lieu de plusieurs jours.
La leçon : Le Markdown dans un fichier README.md est l'outil le plus efficace pour l'intégration (onboarding) des développeurs et pour rendre un projet accessible. Sa simplicité encourage les développeurs à vraiment l'écrire et le maintenir.
Le blogueur qui a abandonné le WYSIWYG
Alex tenait un blog technique mais détestait l'éditeur intégré de son système de gestion de contenu (CMS). C'était lent, coller des extraits de code (snippets) était un cauchemar de formatage cassé, et le HTML généré était un bazar sans nom. Alex a découvert le Markdown et a eu une révélation. Iel a commencé à écrire tous ses articles dans un simple éditeur de texte sans distraction sur sa machine locale. Le texte était propre, les blocs de code parfaits, et comme ce n'était qu'un simple fichier .md, tout était sauvegardé sur Git. Quand un article était prêt, iel n'avait qu'à copier-coller le Markdown brut dans son CMS (qui, heureusement, avait un mode de saisie Markdown). Iel était plus rapide, moins frustré·e, et son contenu était désormais complètement portable, et non plus verrouillé dans une seule plateforme.
La leçon : Le Markdown découple votre contenu de sa présentation. En écrivant dans un format universel en texte brut, vous êtes propriétaire de votre travail et pouvez facilement le déplacer entre différents outils et plateformes.
Le Pull Request du non-développeur
L'équipe marketing d'une petite startup a remarqué une énorme coquille sur le site public de la documentation de l'API. La doc était hébergée sur GitHub, et les fichiers étaient tous en Markdown. Un chef de produit (product manager), qui ne connaissait rien au HTML ou à Git, a pu naviguer jusqu'au bon fichier sur le site de GitHub, cliquer sur le bouton « Edit », et voir le texte Markdown lisible par un humain. Il a corrigé la coquille, ajouté un commentaire expliquant le changement, et cliqué sur « Propose changes ». Cela a créé un pull request qu'un développeur a rapidement relu (review) et fusionné (merge). Le correctif était en ligne en quelques minutes.
La leçon : La lisibilité du Markdown abaisse la barrière à l'entrée pour la collaboration. Il permet aux membres non techniques de l'équipe de contribuer directement à la documentation, aux sites web, et plus encore, sans avoir à devenir des développeurs.
Erreurs et pièges courants
Oublier la ligne vide. C'est le coupable n°1 du fameux « pourquoi ma liste ne s'affiche pas ?! » De nombreux éléments Markdown, comme les listes, les citations (blockquotes) et les blocs de code, nécessitent une ligne vide avant eux pour être correctement analysés par le parser. Votre œil voit peut-être une liste, mais le parser a besoin de cette ligne vide pour changer de contexte.
Indentation incohérente des listes. Lorsque vous créez des sous-listes, le nombre d'espaces que vous utilisez pour l'indentation est important. La spec CommonMark indique qu'une indentation de 2 ou 4 espaces est typique. Mélanger des tabulations et des espaces ou utiliser une indentation incohérente cassera la structure de votre liste.
Croire que votre variante est universelle. Vous concoctez un magnifique tableau avec la syntaxe à barres verticales de GFM (
| Tête | Tête |), puis vous le collez dans un système qui ne supporte que le Markdown de base. Résultat : un méli-mélo de barres verticales et de tirets. Soyez toujours conscient de la variante que votre plateforme cible supporte.Les sauts de ligne ne sont pas des paragraphes. Dans votre fichier source, vous appuyez sur Entrée une fois pour aller à la ligne suivante. Dans le rendu final, cela ne crée généralement pas un nouveau paragraphe. Ça ne fait que concaténer les lignes. Pour créer un vrai saut de paragraphe (balise
<p>), il faut une ligne entièrement vide (c'est-à-dire, appuyer deux fois sur Entrée). Pour forcer un simple saut de ligne (balise<br>), terminez une ligne par deux espaces avant d'appuyer sur Entrée.Ne pas échapper les caractères spéciaux. Vous voulez écrire le texte littéral
*littéralement*sans qu'il ne se transforme en italique ? Vous devez « échapper » le caractère spécial avec une barre oblique inversée (backslash) :\*littéralement\*. Ceci s'applique aux#,_,[,], et autres caractères ayant une signification syntaxique.
Pourquoi vous devriez vous y intéresser
Pensez au Markdown dès que vous avez besoin d'écrire du texte formaté qui soit facile à écrire, facile à lire, et non verrouillé dans un format propriétaire. C'est la lingua franca de la communication entre développeurs.
- Documentation de projet : Tous les
README.md,CONTRIBUTING.md, et pages de wiki. - Prise de notes : Des outils comme Obsidian, Joplin, et Bear sont construits sur le Markdown, vous permettant de créer une base de connaissances personnelle, portable et interconnectée.
- Création de contenu : Écrire pour un générateur de site statique (comme Jekyll, Hugo, Eleventy) ou un CMS « headless ».
- Communication de tous les jours : Rédiger des issues, des pull requests et des commentaires sur GitHub/GitLab ; poser des questions et y répondre sur Stack Overflow ; discuter sur Slack ou Discord.
Le Markdown trouve le juste milieu entre la simplicité douloureuse du .txt et la complexité excessive du .docx ou du HTML brut. C'est un outil fondamental pour le développement logiciel moderne et la communication numérique.
Pour aller plus loin
- [Daring Fireball: Markdown] (https://daringfireball.net/projects/markdown/): L'annonce originale et le guide de syntaxe par John Gruber. La source historique.
- [CommonMark Spec] (https://spec.commonmark.org/): La spécification officielle, très détaillée, du Markdown moderne. Essentiel pour quiconque veut créer un parser.
- [GitHub Flavored Markdown Spec] (https://github.github.com/gfm/): La spec du sur-ensemble (superset) le plus populaire de CommonMark, détaillant les tableaux, les listes de tâches, etc.
- [MDN: Markdown] (https://developer.mozilla.org/en-US/docs/Glossary/Markdown): Un aperçu concis du Mozilla Developer Network.
- [The Markdown Guide] (https://www.markdownguide.org/): Un excellent guide très complet couvrant la syntaxe de base, la syntaxe étendue et des aide-mémoires (cheat sheets).