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

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 :

Sélectionnez ou déposez des fichiers ici

Conversion 100 % privée dans le navigateur - les fichiers ne quittent jamais votre appareil

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

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

REPRÉSENTATION ASCII : [...]

Normalisation : Spécification TOML v1.0.0

Spécifications techniques

Architecture de conteneurFichier de configuration lisible par l'homme mappant sans équivoque à une table de hachage, structurée avec des [tables] et des paires clé = valeur
CompressionFlux de texte non compressé
Boutisme des octetsFlux de texte UTF-8
Espaces colorimétriquesN/A (Fichier de configuration)
Canaux et structureTables, tableaux de tables, tables en ligne, chaînes, entiers, nombres à virgule flottante, booléens et dates-heures RFC 3339
Dimensions maximalesLongueur de texte illimitée
TransparenceAucune
Streaming et progressifAnalyse de configuration séquentielle ligne par ligne

Matrice de comparaison technique : TOML vs Concurrents

Attribut techniqueTOML (Actuel)YAMLJSONINI
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 natifsPrise 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 navigateurWindows 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

2021Publication officielle de TOML v1.0.0, gelant la spécification de la syntaxe de base.
2018Python standardise '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

  • 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.