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
Convertisseur gratuit de TOML vers JSON dans le navigateur. Convertissez des fichiers instantanément sur votre appareil.
Inspecter et métadonnées
Les systèmes d'exploitation et les analyseurs de fichiers identifient les fichiers TOML en inspectant la séquence d'octets binaires de tête :
Signature d'en-tête au niveau des octets (Magic Bytes)
Les systèmes d'exploitation et les analyseurs de fichiers identifient les fichiers TOML en inspectant la séquence d'octets binaires de tête :
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 par l'homme mappant sans équivoque à une table de hachage, structurée avec des [tables] et des paires clé = valeur |
| Compression | Flux de texte non compressé |
| Boutisme des octets | Flux de texte UTF-8 |
| Espaces colorimétriques | N/A (Fichier de configuration) |
| Canaux et structure | Tables, tableaux de tables, tables en ligne, chaînes, entiers, nombres à virgule flottante, booléens et dates-heures RFC 3339 |
| Dimensions maximales | Longueur de texte illimitée |
| Transparence | Aucune |
| Streaming et progressif | Analyse de configuration séquentielle ligne par ligne |
Matrice de comparaison technique : TOML vs Concurrents
| Attribut technique | TOML (Actuel) | YAML | JSON | INI |
|---|---|---|---|---|
| Risque d'ambiguïté | Nul (spécification strictement non ambiguë) | Élevé (bugs de booléens liés au « problème norvégien » de YAML) | Nul (types de données stricts) | Modéré (pas de norme formelle) |
| Types de date/heure natifs | 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 | Windows hérités, configuration Git |
Modes de corruption courants et guide de récupération hexadécimale
Erreur d'analyseur : 'Duplicate key in table' ou 'Invalid table header'.
Cause racine: Tentative de redéfinition d'une clé ou d'un espace de noms de table existant dans le document.
Récupération: Validez et reformatez la syntaxe TOML à l'aide du formateur TOML File2File.
Analyse de sécurité et vecteurs d'attaque de l'analyseur
Les analyseurs TOML doivent se prémunir contre la pollution de 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 ddictionnaires sécurisés contre la pollution de prototypes.
Origines historiques et jalons
Principaux avantages
- Totalement non ambigu : s'associe proprement et de manière prévisible à une table de hachage sans aucune coercition de type surprenante.
- Prise en charge native de premier ordre des dates et heures (horodatages, dates et heures RFC 3339) sans échappement de chaînes.
- Adopté comme format de configuration standard officiel pour les outils de langages modernes (Rust Cargo.toml, Python pyproject.toml).
Limites techniques
- Les arborescences d'objets profondément imbriquées sur plusieurs niveaux peuvent devenir verbeuses par rapport à YAML.
- La syntaxe des tableaux de tables ([[table.array]]) peut s'avérer peu intuitive pour les débutants.
- Moins compact que JSON pour l'échange de données API machine à machine à haut débit.
Anecdotes techniques
- TOML a été créé par Tom Preston-Werner, qui a également cofondé GitHub et créé Gravatar et SemVer (Semantic Versioning).
- Le fichier 'Cargo.toml' présent dans chaque projet Rust spécifie toutes les dépendances du paquet et les options du compilateur au format TOML.
- 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 configurations de Hugo en Go 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 convivial pour l'humain 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 Web.
Paires de conversion TOML associées
La conversion de fichiers de configuration TOML au format JSON traduit des paramètres de propriété conviviaux pour l'homme 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 simplifie l'édition humaine tout en préservant toutes les hiérarchies de données structurées clés-valeurs.