Dernière mise à jour : avril 2026
Qu'est-ce que le formatage TOML ?
TOML (Tom's Obvious Minimal Language) est un format de fichier de configuration créé par Tom Preston-Werner en 2013. Il se mappe directement vers une table de hachage et utilise un typage explicite pour toutes les valeurs. Un formateur TOML prend du TOML brut ou stylé de manière incohérente et le re-sérialise avec un espacement uniforme, une indentation correcte et un ordre canonique des clés. Le résultat est un fichier qui respecte les mêmes conventions dans l'ensemble de votre projet, ce qui facilite la revue des modifications de configuration dans les diffs.
La spécification TOML v1.0.0, finalisée en janvier 2021, définit la grammaire de manière assez stricte pour que tout parseur conforme produise une structure de données identique à partir d'une même entrée. Le formatage ne modifie pas le contenu sémantique d'un fichier TOML. Il ajuste uniquement les espaces, le regroupement des clés et le style de citation. Vous pouvez donc formater des fichiers TOML librement sans craindre de modifier le comportement de votre application.
Contrairement à JSON, TOML prend en charge les commentaires, les types date/heure natifs et plusieurs formes de chaînes (basique, littérale et multi-ligne). Un bon formateur préserve les commentaires et respecte la distinction entre les tables en ligne et les en-têtes de table standard. Il gère également correctement les tableaux de tables, en conservant le regroupement des sections pour que le fichier reste lisible aussi bien pour les humains que pour les parseurs qui le consomment.
title="My App" version="1.0.0" debug=false [database] host="localhost" port=5432 name="mydb" [database.pool] max_connections=25 timeout=30 [[servers]] name="web" host="web.example.com" [[servers]] name="api" host="api.example.com"
title = "My App" version = "1.0.0" debug = false [database] host = "localhost" port = 5432 name = "mydb" [database.pool] max_connections = 25 timeout = 30 [[servers]] name = "web" host = "web.example.com" [[servers]] name = "api" host = "api.example.com"
Pourquoi utiliser un formateur TOML ?
Les fichiers de configuration accumulent une dérive de style au fil du temps lorsque différents membres de l'équipe les modifient. Les tabulations se mélangent aux espaces, certaines clés sont citées inutilement et les sections de table perdent leur regroupement visuel. Un formateur TOML normalise tout cela en un seul passage.
Cas d'utilisation du formateur TOML
Référence de la syntaxe TOML
TOML dispose d'un ensemble réduit de constructions. Le tableau ci-dessous liste chaque élément structurel défini dans la spécification TOML v1.0.0. Un formateur applique un espacement et un regroupement cohérents à tous ces éléments.
| Syntaxe | Nom | Notes |
|---|---|---|
| key = "value" | Basic key-value pair | Keys are bare or quoted; values are typed |
| [table] | Standard table | Creates a named section (hash table) |
| [a.b.c] | Dotted table | Shorthand for nested tables |
| [[array]] | Array of tables | Each [[name]] block appends to an array |
| key = """...\n""" | Multi-line basic string | Allows newlines, escapes processed |
| key = '''...\n''' | Multi-line literal string | Allows newlines, no escape processing |
| # comment | Comment | Extends to end of line; not in JSON output |
| {inline = true} | Inline table | Single-line table, no newlines allowed |
TOML vs JSON vs YAML
TOML, JSON et YAML résolvent des problèmes similaires mais font des compromis différents.
| Fonctionnalité | TOML | JSON | YAML |
|---|---|---|---|
| Commentaires | # commentaires en ligne | Non supporté | # commentaires en ligne |
| Valeurs typées | String, int, float, bool, datetime | String, number, bool, null | Inférées (source d'erreurs) |
| Imbrication | En-têtes [table] | Accolades | Basée sur l'indentation |
| Rigueur de la spécification | Stricte (un seul résultat de parsing) | Stricte (RFC 8259) | Laxiste (plusieurs parsings valides) |
| Support date/heure | 4 types natifs | Aucun (utiliser des chaînes) | Implicite (fragile) |
| Virgules finales | Non autorisées | Non autorisées | N/A (pas de virgules) |
Exemples de code
Les exemples ci-dessous formatent du TOML par programmation dans différents langages et outils. Chacun lit un fichier, l'analyse et écrit une version formatée.
import { parse, stringify } from '@iarna/toml'
import fs from 'fs'
const raw = fs.readFileSync('config.toml', 'utf-8')
const doc = parse(raw)
const formatted = stringify(doc)
// stringify() outputs canonical TOML with consistent spacing
fs.writeFileSync('config.toml', formatted)
// Quick one-liner with npx:
// npx taplo fmt config.tomlimport tomllib # Python 3.11+ (read-only)
import tomli_w # pip install tomli-w (write)
# Parse and re-serialize to format
with open("config.toml", "rb") as f:
data = tomllib.load(f)
formatted = tomli_w.dumps(data)
# tomli_w produces sorted keys, consistent quoting, and
# proper whitespace around = signs
print(formatted)
# CLI alternative: taplo fmt config.tomlpackage main
import (
"fmt"
"os"
"github.com/BurntSushi/toml"
"bytes"
)
func main() {
var data map[string]interface{}
_, err := toml.DecodeFile("config.toml", &data)
if err != nil {
fmt.Fprintln(os.Stderr, err) // parse error with line number
os.Exit(1)
}
var buf bytes.Buffer
enc := toml.NewEncoder(&buf)
enc.Indent = " "
enc.Encode(data) // re-serialized with consistent formatting
fmt.Print(buf.String())
}# Install taplo — the standard TOML toolkit cargo install taplo-cli # or: npm install -g @taplo/cli # Format a single file in place taplo fmt config.toml # Format all .toml files in a project taplo fmt # Check formatting without modifying (CI-friendly) taplo fmt --check # Validate TOML syntax without formatting taplo lint config.toml