Validateur et linter YAML — trouvez les erreurs et les pièges cachés
Validez du YAML avec la ligne et la colonne exactes de chaque erreur, et repérez les fautes que les parseurs acceptent sans rien dire : booléens yes/no, tabulations, clés en double.
services:
web:
image: nginx:1.27
ports:
- '8080:80'
- '22:22'
environment:
COUNTRY: 'NO'
DEBUG: 'yes'
APP_VERSION: 1.1
db:
image: postgres:16
restart: unless-stopped
Clés en double : affichées avec la dernière valeur retenue, ce que font silencieusement beaucoup d’analyseurs. La vue formatée est reconstruite à partir des données analysées : les commentaires et les ancres ne sont pas conservés. Corrigez les problèmes dans votre fichier d’origine.
Tout se passe dans votre navigateur. Votre YAML n’est jamais envoyé : les secrets de vos fichiers de configuration restent sur votre machine. Parcourir tous les outils gratuits.
Un problème, ou quelque chose à améliorer ? Nous lisons chaque message et corrigeons vite.
Ce validateur YAML gratuit vérifie les erreurs de syntaxe d’un fichier YAML et indique la ligne et la colonne exactes, avec les lignes voisines et un accent circonflexe sous le problème. Collez un manifeste Kubernetes, un docker-compose.yml, un workflow GitHub Actions ou une spécification OpenAPI, et vous savez en une seconde s’il est analysable et, sinon, où il casse.
Qu’un parseur accepte votre fichier ne veut pas dire que votre fichier signifie ce que vous croyez. Le linter signale aussi les valeurs que les parseurs YAML 1.1 (PyYAML, SnakeYAML, Go yaml.v2) lisent différemment du YAML 1.2 : NO devient false, 0755 devient 493, 22:22 devient 1342, et 1.10 devient 1.1. Il liste chaque clé en double avec les deux numéros de ligne, les tabulations dans l’indentation et les "key:value" écrits sans espace. Il vérifie la syntaxe et ces pièges ; il ne valide pas par rapport à un schéma comme l’API Kubernetes.
Mode d’emploi
- Collez votre YAML dans l’éditeur. Un exemple docker-compose contenant quelques erreurs volontaires est chargé pour montrer ce qui est signalé.
- Lisez la barre d’état : vert signifie valide, rouge affiche l’erreur avec sa ligne et sa colonne, ainsi que les lignes voisines.
- Cliquez sur un élément de la liste du linter pour aller à cette ligne dans l’éditeur et la corriger.
- Basculez entre les vues YAML formaté et JSON pour vérifier comment le fichier a réellement été analysé : c’est là que les surprises de yes/no ou 0755 deviennent évidentes.
- Copiez ou téléchargez le résultat formaté si besoin, et continuez à corriger le fichier d’origine pour conserver les commentaires.
Questions fréquentes
Qu’est-ce que le problème de la Norvège en YAML ?
En YAML 1.1, les mots sans guillemets y, yes, n, no, on et off (avec les majuscules courantes) sont des booléens. Une liste de codes pays contenant NO pour la Norvège donne donc false au lieu de la chaîne "NO". YAML 1.2 (2009) a corrigé cela : seuls true et false sont des booléens. De nombreux parseurs très utilisés suivent encore la version 1.1, dont PyYAML, Psych de Ruby, SnakeYAML de Java et yaml.v2 de Go : la solution sûre est donc de mettre ces valeurs entre guillemets : "NO", "yes", "on".
Pourquoi les tabulations sont-elles interdites en YAML ?
La spécification YAML interdit les tabulations pour l’indentation, car leur largeur n’est pas définie et c’est l’indentation qui exprime la structure en YAML. Les tabulations sont autorisées dans les valeurs et les commentaires, mais pas dans les espaces en début de ligne. Configurez votre éditeur pour insérer des espaces dans les fichiers .yml et .yaml ; deux espaces par niveau est la convention la plus courante.
Les clés en double sont-elles autorisées en YAML ?
Non. La spécification YAML exige que les clés d’un mapping soient uniques, mais les parseurs ne s’accordent pas sur la conduite à tenir : certains lèvent une erreur (comme ce validateur), d’autres gardent silencieusement la dernière valeur. Les doublons sont donc dangereux : dans un long manifeste, vous pouvez modifier la première occurrence sans voir aucun effet. Cet outil liste chaque doublon avec la ligne où la clé a été définie la première fois.
Pourquoi mon YAML affiche-t-il « bad indentation of a mapping entry » ?
Soit la ligne est indentée différemment des autres clés du même niveau, soit une valeur contient deux-points suivis d’un espace et doit être mise entre guillemets. Par exemple, title: Note: read this échoue parce que le parseur voit une seconde clé. Écrivez title: "Note: read this". Vérifiez la ligne indiquée et celle du dessus ; l’erreur commence souvent à la ligne précédente.
Le YAML est-il un sur-ensemble du JSON ?
YAML 1.2 a été conçu pour que tout JSON valide soit aussi du YAML valide, et en pratique n’importe quel document JSON s’analyse ici. L’inverse n’est pas vrai : le YAML ajoute les commentaires, les ancres et alias, les chaînes multilignes et plusieurs documents par fichier. Utilisez la vue JSON pour voir comment un fichier YAML se traduit en données JSON simples.
Valide-t-il les schémas Kubernetes ou GitHub Actions ?
Non. Il vérifie la syntaxe YAML et les pièges ci-dessus, qui causent la plupart des échecs réels, mais il ne sait pas quelles clés un Deployment Kubernetes ou un workflow GitHub autorise. Pour la validation de schéma, utilisez kubectl apply --dry-run=server, kubeconform, ou l’extension YAML de VS Code avec le JSON Schema correspondant.
YAML 1.1 ou YAML 1.2 : les valeurs qui changent de sens
Ce validateur analyse selon les règles YAML 1.2 (js-yaml). Si votre fichier est lu par un parseur YAML 1.1, ces valeurs sans guillemets signifient autre chose, et le linter vous avertit pour chacune :
• yes, no, on, off, y, n → booléens en 1.1, chaînes en 1.2. Les workflows GitHub Actions commencent par on:, qu’un parseur 1.1 lit comme la clé true.
• 0755 → octal 493 en 1.1, décimal 755 en 1.2. Les modes de fichier et les codes postaux commençant par zéro en pâtissent tous deux.
• 22:22 → 1342 en 1.1 (base 60), la chaîne "22:22" en 1.2. La documentation de Docker Compose recommande de mettre les mappages de ports entre guillemets précisément pour cette raison.
• 1.10 → le nombre 1.1 dans les deux versions. Mettez les numéros de version entre guillemets.
• 2024-01-05 → un horodatage dans la plupart des parseurs, pas une chaîne.
La règle qui les évite tous : mettez entre guillemets toute valeur censée être du texte mais qui ressemble à autre chose.
Erreurs YAML courantes et leurs corrections
• "bad indentation of a mapping entry" : indentation incohérente, ou valeur sans guillemets contenant ": ".
• "end of the stream or a document separator is expected" : généralement une ligne moins indentée que ses voisines, ou du texte après un guillemet fermant.
• "can not read a block mapping entry; a multiline key may not be an implicit key" : souvent des deux-points manquants à la ligne précédente, ou un guillemet ouvert et jamais fermé.
• "unexpected end of the stream within a double quoted scalar" : un " non fermé quelque part au-dessus de la ligne indiquée.
• Les valeurs commençant par @, `, *, &, !, | ou > ont une signification spéciale ou sont réservées. Mettez-les entre guillemets.
• Un # précédé d’un espace commence un commentaire : password: abc #123 enregistre donc abc. Mettez entre guillemets les valeurs qui contiennent " #".
Outils gratuits similaires
- Formateur JSON — Indentez, minifiez et validez du JSON, avec les erreurs d’analyse localisées par ligne et colonne. Dans votre navigateur, sans envoi.
- JSON en TypeScript — Collez un exemple JSON et obtenez des interfaces TypeScript, un schéma Zod, un JSON Schema ou des types pour Go, Python, Java, C#, Kotlin, Swift et Rust.
- Formateur SQL — Transformez du SQL désordonné en requêtes lisibles et indentées de façon cohérente pour PostgreSQL, MySQL, T-SQL, BigQuery et plus. Dans votre navigateur.
- Testeur de regex — Testez une expression régulière sur un texte d’exemple avec surlignage des correspondances en direct, groupes de capture et aperçu du remplacement. Gratuit, dans votre navigateur.
- Comparateur de texte — Comparez deux versions d’un texte, d’un code ou d’un fichier JSON et voyez exactement quelles lignes, quels mots et quels caractères ont changé.