YAML vs TOML
Escolha YAML para ecossistemas que já o falam — Kubernetes, pipelines de CI, Ansible — e para documentos profundamente aninhados que humanos precisam ler. Escolha TOML quando o arquivo deve ser inequívoco, seguro para colar e de tipagem estrita: strings entre aspas, datas nativas, estrutura explícita. Ambos suportam comentários, ambos são linguagens de configuração e converter de um para o outro é rotina.
YAML vs TOML: explicação
YAML e TOML existem pelo mesmo motivo: JSON é uma péssima escolha para configuração — sem comentários, aspas obrigatórias em toda chave, chaves para contar. Partindo desse ponto em comum, os dois fizeram apostas opostas. O YAML apostou na concisão por inferência: aspas geralmente opcionais, aninhamento expresso por indentação, estrutura implícita. O TOML apostou na explicitação: strings precisam de aspas, seções precisam ser declaradas com [headers] e nada é adivinhado. Nenhuma das apostas está errada; elas otimizam para modos de falha diferentes.
A aposta do YAML rende arquivos compactos e profundamente legíveis — e uma classe inteira de erros que o TOML não tem. Erros de indentação reformatam documentos em silêncio, e escalares sem aspas são tipados por inferência, então um código de país como NO vira o booleano false (o problema da Noruega). A aposta do TOML rende arquivos mais longos à medida que aprofundam, mas quase impossíveis de interpretar mal: a gramática é pequena, estável em semver na versão 1.0 desde 2021, e o tipo de um valor é sempre declarado pela sua sintaxe.
Esta página compara os dois onde as escolhas acontecem: sintaxe e estrutura, tipagem e as surpresas clássicas, comentários e âncoras, e os ecossistemas — Kubernetes e CI para o YAML, Cargo e empacotamento Python para o TOML — que normalmente decidem por você primeiro.
A forma mais rápida de perceber a diferença de tipagem é converter o mesmo arquivo nos dois sentidos — o Conversor de YAML para JSON mostra exatamente o que cada escalar sem aspas se tornou, no seu navegador.
Curioso para saber a que se reduz o estilo explícito do TOML? O Conversor de TOML para JSON executa o parsing localmente e não rotula nada, porque nada precisa ser inferido.
Duas filosofias: inferido versus declarado
A diferença mais profunda de todas é onde a estrutura mora. No YAML, a estrutura é espaço em branco: níveis de indentação definem o aninhamento, e tabulações são terminantemente proibidas. No TOML, a estrutura é pontuação: uma linha como [database.pool] declara uma tabela, e a indentação é puramente cosmética. Todo o resto desta página — segurança ao colar, verbosidade em profundidade, mensagens de erro — decorre dessa única decisão.
| Aspecto | YAML 1.2 | TOML 1.0 |
|---|---|---|
| Estrutura | Indentação (apenas espaços; tabulações proibidas) | Cabeçalhos [table] e chaves pontilhadas |
| Strings | Aspas geralmente opcionais | Sempre entre aspas — "..." ou '...' |
| Tipagem | Inferida por parser; NO vira false | Declarada pela sintaxe; nada é inferido |
| Data e hora | Tipo timestamp, dependente do parser | Datas e horas RFC 3339 nativas |
| Âncoras | & âncoras e * aliases | Nenhum — os valores se repetem ou são gerados |
| Multi-documento | Sim — fluxos separados por --- | Um documento por arquivo |
| Comentários | # até o fim da linha | # até o fim da linha |
| Estabilidade da especificação | 1.2 (2009), em camadas e intrincada | 1.0 (2021), pequena e estável em semver |
Sintaxe: indentação versus cabeçalhos de tabela
Configuração rasa favorece os dois formatos; aninhamento profundo os separa. O YAML fica cada vez mais silencioso conforme a estrutura cresce — dois espaços e um traço — enquanto o TOML escreve um cabeçalho por nível: [database.pool.limits], e depois [database.pool.limits.read]. Com três níveis, o TOML é apenas verboso; com oito, o YAML é a única opção sensata para escrita manual. Arrays de tabelas invertem o veredito: os blocos [[products]] do TOML são nítidos e fáceis de localizar com grep, enquanto listas longas de mapas em YAML são exatamente onde as colunas se desalinham.
A segurança ao colar decorre direto disso. Soltar um bloco no YAML uma coluna mais à esquerda ou à direita quebra o parsing ou — pior — muda silenciosamente o que ele significa; o arquivo continua válido e nada avisa. No TOML, um bloco colado carrega o próprio [header], então ele cai onde o cabeçalho diz, independentemente do espaço em branco ao redor.
Tipos e o problema da Noruega
O YAML infere tipos de escalares, e a inferência tem dentes: yes, no, on e off viram booleanos sob as regras do YAML 1.1 que muitos parsers ainda trazem, NO vira false, e uma versão escrita como 1.20 pode chegar como o número 1.2. O YAML 1.2 aparou as regras, mas não unificou os parsers, então o mesmo arquivo pode receber tipos diferentes em ferramentas diferentes. A defesa é colocar aspas em tudo o que precisa continuar sendo string.
O TOML não tem uma etapa de inferência para errar: aspas fazem uma string, dígitos sem aspas fazem um inteiro (underscores são permitidos por legibilidade) e timestamps RFC 3339 são um tipo de primeira classe — uma vantagem real sobre JSON e YAML para configuração que carrega datas. Strings multilinha existem nos dois: os blocos entre aspas triplas """ do TOML e os escalares | e > do YAML.
Ecossistemas e quando escolher cada um
Os ecossistemas já dividiram o território. O YAML domina o cloud-native e o CI: manifests do Kubernetes, GitHub Actions e GitLab CI, Ansible, docker-compose, descrições OpenAPI. O TOML domina metadados de empacotamento e ferramentas: o Cargo do Rust, o pyproject.toml do Python e uma longa lista de ferramentas CLI que querem configuração inequívoca e amigável a comentários. Escolher contra um ecossistema significa brigar com as ferramentas dele para sempre, então raramente essa é uma escolha livre.
Onde a escolha é sua: opte pelo YAML para documentos profundamente aninhados e revisados por humanos, e pelo TOML quando os valores precisam ser inequívocos, os diffs exatos e os arquivos editados tanto por humanos quanto por geradores. A recomendação se inverte com frequência — a maioria dos repositórios tem os dois — e os conversores linkados aqui fazem a ponte nos dois sentidos, localmente.
Perguntas frequentes
O TOML está substituindo o YAML?
Não — os dois dividiram o território em vez de disputá-lo. O YAML está consolidado onde as ferramentas cloud-native o exigem: Kubernetes, GitHub Actions, Ansible, docker-compose. O TOML está consolidado no empacotamento: Cargo.toml, pyproject.toml e a configuração da maioria das ferramentas CLI modernas. Ferramentas novas escolhem TOML cada vez mais para configurações simples, mas nenhuma migração séria para longe do YAML está acontecendo em escala.
O TOML tem o problema da Noruega?
Não. O YAML infere tipos para escalares sem aspas, então NO é interpretado como o booleano false, e on ou off também viram booleanos. O TOML exige que toda string tenha aspas, então "NO" é inequivocamente uma string e nada é inferido. A defesa do YAML é a mesma disciplina que o TOML impõe: coloque aspas em qualquer valor que precise permanecer texto.
Os conversores de YAML e TOML enviam minha configuração?
Não. O parsing e a geração acontecem dentro da aba do seu navegador — não há endpoint de envio, e a Content-Security-Policy do site só permite requisições de rede para ele mesmo. Abra o painel Network do DevTools durante a conversão e você não verá nenhuma requisição de saída; os arquivos que você colar ficam na aba.
Por que o TOML fica tão verboso em configuração aninhada?
Cada nível de aninhamento precisa do próprio cabeçalho entre colchetes: [database.pool.limits.read] declara três linhas de escopo antes do primeiro valor. Essa verbosidade também é o diferencial — as seções são fáceis de localizar com grep, o escopo é inequívoco e os diffs mostram exatamente o que mudou. Se a sua configuração aninha oito níveis, a indentação do YAML é genuinamente a melhor escolha.
YAML e TOML suportam comentários?
Sim — ambos usam # até o fim da linha, e é exatamente por isso que os dois desbancaram o JSON para configuração. Eles diferem em quase todo o resto: âncoras e fluxos multi-documento existem só no YAML, enquanto o TOML oferece datas RFC 3339 nativas e uma gramática 1.0 estável em semver que o YAML nunca alcançou.
Qual formato é mais seguro para copiar e colar?
O TOML. Um bloco colado no YAML precisa cair exatamente na coluna de indentação certa, ou o significado do documento muda em silêncio; mesmo quando o arquivo continua válido, nada avisa. Blocos TOML são delimitados pelos próprios [headers], então a indentação é cosmética e uma seção colada significa o que o cabeçalho dela diz, onde quer que ela caia.
Onde posso ler os padrões citados aqui?
Quais ferramentas relacionadas devo usar a seguir?
- JSON vs YAMLComparação lado a ladoAbrir
- Noções básicas de YAMLGuia em linguagem simplesAbrir
- Converter YAML em JSONConverte sem que “NO” vire falseAbrir
- Converter JSON em YAMLConverte com aspas que resistem à conversão de voltaAbrir
- TOML para JSONConversor que roda no seu navegadorAbrir
- JSON para TOMLConversor que roda no seu navegadorAbrir