Configuration TOML (.toml)
Spécification StandardTOML (Tom's Obvious Minimal Language) est un format de configuration non ambigu et axé sur l'humain créé par le cofondateur de GitHub Tom Preston-Werner, largement adopté dans les écosystèmes de programmation modernes, notamment Rust (Cargo) et Python (pyproject.toml).
Convertir TOML en JSON
Outil de conversion gratuit de TOML vers JSON dans le navigateur. Convertissez des fichiers instantanément sur votre appareil.
Inspection et métadonnées
Les systèmes d'exploitation et les analyseurs de fichiers identifient les fichiers TOML en inspectant leur séquence initiale d'octets binaires :
Signature d'en-tête au niveau des octets (octets magiques)
Les systèmes d'exploitation et les analyseurs de fichiers identifient les fichiers TOML en inspectant leur séquence initiale d'octets binaires :
SIGNATURE HEXADÉCIMALE (DÉCALAGE 0) :
5B ... 5DREPRÉSENTATION ASCII : [...]
Normalisation : Spécification TOML v1.0.0
Spécifications techniques
| Architecture de conteneur | Fichier de configuration lisible, qui correspond sans ambiguïté à une table de hachage et s’organise en [tables] et paires clé = valeur |
| Compression | Flux de texte non compressé |
| Ordre des octets | Flux de texte UTF-8 |
| Espaces colorimétriques | Sans objet (fichier de configuration) |
| Canaux et structure | Tables, tableaux de tables, tables en ligne, chaînes, entiers, nombres à virgule flottante, booléens et dates et heures RFC 3339 |
| Dimensions maximales | Longueur de texte illimitée |
| Transparence | Aucune |
| Prise en charge du traitement en continu | Analyse de configuration séquentielle ligne par ligne |
Matrice de comparaison technique : TOML face aux concurrents
| Attribut technique | TOML (Actuel) | YAML | JSON | INI |
|---|---|---|---|---|
| Risque d'ambiguïté | Nul (spécification strictement non ambiguë) | Élevé (erreurs liées aux booléens causées par le « problème norvégien » de YAML) | Nul (types de données stricts) | Modéré (pas de norme formelle) |
| Types natifs de date et d'heure | Prise en charge native des dates et heures RFC 3339 | Analyse implicite des chaînes / dates | Aucun (chaînes uniquement) | Aucun (chaînes uniquement) |
| Prise en charge des commentaires | Natif (commentaires #) | Natif (commentaires #) | Aucun commentaire autorisé | Natif (commentaires ; et #) |
| Écosystème principal | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, pipelines CI/CD | APIs Web, communication avec le navigateur | Anciennes versions de Windows, configuration de Git |
Modes de corruption courants et guide de restauration hexadécimale
Erreur d'analyseur : 'Duplicate key in table' ou 'Invalid table header'.
Cause initiale: Tentative de redéfinition d'une clé ou d'un espace de noms de table existant dans le document.
Récupération: Validez la syntaxe TOML et reformatez-la avec TOML Formatter de File2File.app.
Analyse de sécurité et vecteurs d'attaque de l'analyseur
Les analyseurs TOML doivent se prémunir contre la pollution du prototype et l'épuisement du CPU dû à l'imbrication pathologique de tableaux de tables.
Vecteurs d’attaque connus
- Pollution de prototype dans les analyseurs TOML JavaScript injectant des propriétés dans Object.prototype.
- Déni de service par le biais de déclarations de tableaux de tables profondément imbriquées.
- Allocation de mémoire non limitée lors de l'analyse massive de tableaux en ligne.
Bonnes pratiques de défense: Validez les limites d'imbrication des tables et utilisez des objets dictionnaires protégés contre la pollution du prototype.
Origines historiques et jalons
Principaux avantages
- Se convertit de façon claire et prévisible en table de hachage, sans conversion implicite surprenante des types.
- Prise en charge native des dates et heures (horodatages RFC 3339, dates et heures) sans échappement des chaînes.
- Adopté comme format de configuration officiel pour les outils de langages modernes (Rust Cargo.toml, Python pyproject.toml).
Limites techniques
- Les structures d’objets profondément imbriquées sont plus verbeuses qu’en YAML.
- La syntaxe des tableaux de tables ([[table.array]]) peut s'avérer peu intuitive pour les débutants.
- Les fichiers TOML sont moins compacts que JSON pour les échanges de données d’API à haut débit entre machines.
Faits intéressants
- TOML a été créé par Tom Preston-Werner, qui a également cofondé GitHub et créé Gravatar et SemVer (Semantic Versioning).
- Les paquets Cargo utilisent Cargo.toml pour déclarer leurs métadonnées, dépendances et cibles ; les projets Rust utilisant d’autres systèmes de compilation peuvent employer d’autres fichiers.
- Contrairement à JSON, TOML prend en charge nativement les commentaires (à l'aide du caractère '#') et les chaînes multilignes.
Foire aux questions techniques
À quoi sert TOML ?
TOML est utilisé pour la configuration de logiciels, notamment dans Cargo.toml de Rust, pyproject.toml de Python, les fichiers de configuration de Hugo et les outils de conteneurs.
Pourquoi préfère-t-on TOML à YAML pour la configuration ?
TOML évite les fameux bugs d'analyse des cas limites de YAML (comme le mot 'NO' sans guillemets qui se transforme en booléen false), tout en restant facile à lire pour les humains grâce aux commentaires et à des tables claires.
Comment puis-je convertir TOML en JSON ou YAML ?
Vous pouvez convertir instantanément des fichiers TOML en JSON ou YAML à l'aide de File2File.app directement dans votre navigateur.
Conversions associées à TOML
La conversion de fichiers de configuration TOML au format JSON traduit des paramètres faciles à lire en un objet de données strict que les applications web peuvent analyser instantanément.
La conversion de fichiers de configuration JSON au format TOML facilite la modification manuelle tout en préservant toutes les hiérarchies de paires clé-valeur.