TOML vs YAML: a mesma config em três formatos

TOML vs YAML

TOML vs YAML (e JSON): a mesma config de três jeitos | We.Inc

Compare TOML, YAML e JSON nos mesmos arquivos de configuração, lado a lado. Veja onde cada formato é exigido, de pyproject.toml e Cargo.toml a compose.yaml.

TOML é um formato parecido com INI feito para arquivos de configuração: cabeçalhos [table] explícitos, strings entre aspas, tipos de data de verdade e indentação sem significado. YAML depende da indentação, deduz tipos a partir de valores sem aspas e acrescenta anchors e múltiplos documentos. Para configurações rasas, TOML é mais difícil de quebrar; para aninhamento profundo, YAML se lê melhor.

TOML, YAML e JSON num relance

Na maioria das vezes você não escolhe: o empacotamento do Python lê pyproject.toml, o Rust lê Cargo.toml, e o GitHub Actions e o Docker Compose leem YAML. Quando você escolhe, ver uma mesma config nos três formatos deixa as vantagens e desvantagens óbvias. Escolha um exemplo abaixo e compare.

Perguntas frequentes

TOML é melhor que YAML?

Nenhum vence em tudo. Os cabeçalhos explícitos e as aspas obrigatórias do TOML tornam arquivos de config pequenos e médios difíceis de interpretar errado. O YAML lida com aninhamento profundo e listas longas com menos ruído, ao preço de uma sintaxe sensível a espaços e de tipagem implícita.

Por que o Python usa pyproject.toml?

Os guias de empacotamento do Python definem o pyproject.toml com três tabelas: [build-system] para o backend de build, [project] para metadados como nome, versão e dependências, e [tool] para configurações de ferramentas específicas, como linters.

O TOML consegue representar tudo o que o YAML representa?

Nem tudo. O TOML não tem anchors nem aliases, não aceita vários documentos por arquivo e não tem null, já que toda chave precisa receber um valor. Para configuração isso raramente importa, mas dados YAML que dependem desses recursos não se convertem de forma direta.

Quais formatos o Docker Compose e o GitHub Actions aceitam?

Os dois usam YAML. Os workflows do GitHub Actions ficam em .github/workflows com extensão .yml ou .yaml, e o Compose procura compose.yaml por padrão, ainda aceitando docker-compose.yaml em projetos mais antigos.

O TOML aceita strings de várias linhas?

Sim. Três aspas duplas iniciam uma string básica de várias linhas que aceita escapes, e três aspas simples iniciam uma string literal de várias linhas que mantém o conteúdo exatamente como foi escrito.

Onde cada formato é exigido

Do que o TOML abre mão pela segurança

Quais arquivos usam qual formato

Arquivos de config comuns e o formato que exigem

Sintaxe do TOML que vale conhecer

Dotted keys, inline tables e datas

Dotted keys e inline tables evitam cabeçalhos extras para grupos pequenos, e datas são valores tipados, não strings.

Uma config em TOML, YAML e JSON

Escolha um exemplo. As três versões guardam exatamente os mesmos dados, para você comparar como cada formato os escreve.

Exemplo de config

TOML

YAML

JSON

No exemplo de configurações de aplicação, o TOML guarda opens como uma hora local de verdade, enquanto as versões YAML e JSON a mantêm como string.

Configurações de aplicação

Manifesto de pacote

Lista de servidores

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site