Configuration TOML (.toml)

Spécification Standard

TOML (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 :

Sélectionnez ou déposez des fichiers ici

Privé - les fichiers ne quittent jamais votre appareil

ou coller Ctrl+V
Garantie de confidentialité sans transmission réseau : 0 octet envoyé vers des serveurs externes. Tout le traitement a eu lieu localement dans le bac à sable de votre navigateur.

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 ... 5D

REPRÉSENTATION ASCII : [...]

Normalisation : Spécification TOML v1.0.0

Spécifications techniques

Architecture de conteneurFichier de configuration lisible, qui correspond sans ambiguïté à une table de hachage et s’organise en [tables] et paires clé = valeur
CompressionFlux de texte non compressé
Ordre des octetsFlux de texte UTF-8
Espaces colorimétriquesSans objet (fichier de configuration)
Canaux et structureTables, tableaux de tables, tables en ligne, chaînes, entiers, nombres à virgule flottante, booléens et dates et heures RFC 3339
Dimensions maximalesLongueur de texte illimitée
TransparenceAucune
Prise en charge du traitement en continuAnalyse de configuration séquentielle ligne par ligne

Matrice de comparaison technique : TOML face aux concurrents

Attribut techniqueTOML (Actuel)YAMLJSONINI
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'heurePrise en charge native des dates et heures RFC 3339Analyse implicite des chaînes / datesAucun (chaînes uniquement)Aucun (chaînes uniquement)
Prise en charge des commentairesNatif (commentaires #)Natif (commentaires #)Aucun commentaire autoriséNatif (commentaires ; et #)
Écosystème principalRust (Cargo), Python (PEP 518), GoKubernetes, Ansible, pipelines CI/CDAPIs Web, communication avec le navigateurAnciennes 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

2021Publication officielle de TOML v1.0.0, gelant la spécification de la syntaxe de base.
2018Python adopte 'pyproject.toml' (PEP 518) comme norme moderne de configuration de compilation.
2013Tom Preston-Werner publie TOML pour fournir un format de configuration propre sans la complexité de YAML.

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.