v1.0.0

TOML

[Tom's Obvious Minimal Language]

Um formato de arquivo de configuração
para humanos.

# Este é um documento TOML

título = "Exemplo de TOML"

[dono]
nome = "Tom Preston-Werner"
dtnasc = 1979-05-27T07:32:00-08:00

[banco-de-dados]
habilitado = true
portas = [ 8000, 8001, 8002 ]
dados = [ ["delta", "phi"], [3.14] ]
temp_alvo = { cpu = 79.5, case = 72.0 }

[servidores]

[servidores.alfa]
ip = "10.0.0.1"
role = "frontend"

[servidores.beta]
ip = "10.0.0.2"
role = "backend"
TOML prioriza humanos

TOML visa ser um formato de arquivo de configuração mínimo que:

  • seja fácil de ler devido à semântica óbvia
  • mapeia inequivocamente para uma tabela hash
  • é fácil de analisar em estruturas de dados em uma ampla variedade de idiomas
TOML tem tipos nativos úteis
  • Pares chave/valor
  • Arrays
  • Tabelas
  • Tabelas inline
  • Arrays de tabelas
  • Inteiros e pontos flutuantes
  • Booleanos
  • Datas e horas, com deslocamentos opcionais
TOML é amplamente suportado

O TOML já possui implementações na maioria das linguagens de programação mais populares em uso atualmente: C, C#, C++, Clojure, Dart, Elixir, Erlang, Go, Haskell, Java, JavaScript, Lua, Objective-C, Perl, PHP, Python, Ruby, Rust, Scala, Swift, … e muito mais.

Um tour rápido pelo TOML

Comentários

TOML acredita que todos os arquivos de configuração devem suportar comentários.

# Este é um comentário TOML

# Este é um comentário
# multilinha do TOML

Strings poderosas

Há quatro maneiras de expressar strings: básica, básica multilinha, literal e literal multilinha. Strings básicas são delimitada por aspas:

str1 = "Sou uma string."
str2 = "Você pode me colocar entre \"aspas\"."
str3 = "Nome\tJos\u00E9\nLoc\tSF."

Strings multilinha são delimitadas por três aspas em cada lado e permitem novas linhas. Inclua uma barra invertida no final da linha para cortar automaticamente os espaços em branco que precedem quaisquer caracteres que não sejam espaços em branco:

str1 = """
Rosas são vermelhas
Violetas são azuis"""

str2 = """\
  A rápida raposa \
  marrom pula sobre o \
  cachorro preguiçoso.\
  """

str2 se torna "A rápida raposa marrom pula sobre o cachorro preguiçoso." (uma única frase com nenhuma quebra de linha).

Strings literais são delimitadas por aspas simples. Nenhum escape é executado, então o que você vê é o que você obtém:

path = 'C:\Users\nodejs\templates'
path2 = '\\User\admin$\system32'
com_aspas = 'Tom "Dubs" Preston-Werner'
regex = '<\i\c*\s*>'

Como não há escape, não há como escrever uma aspa simples dentro de uma string literal entre aspas simples. É aí que entram as strings literais multilinha:

re = '''Eu( não)? preciso de \d{2} maçãs'''
linhas = '''
A primeira nova linha
é cortada em strings brutas.
Todos os outros espaços
em branco são preservados.
'''

Números

Inteiros, pontos flutuantes, infinito e até NaN são todos suportados. Você pode usar notação científica e até mesmo separadores de milhares.

# inteiros
int1 = +99
int2 = 42
int3 = 0
int4 = -17

# hexadecimal com prefixo `0x`
hex1 = 0xDEADBEEF
hex2 = 0xdeadbeef
hex3 = 0xdead_beef

# octal com prefixo `0o`
oct1 = 0o01234567
oct2 = 0o755

# binário com prefixo `0b`
bin1 = 0b11010110

# fracionário
float1 = +1.0
float2 = 3.1415
float3 = -0.01

# expoente
float4 = 5e+22
float5 = 1e06
float6 = -2E-2

# ambos
float7 = 6.626e-34

# separadores
float8 = 224_617.445_991_228

# infinito
infinite1 = inf # infinito positivo
infinite2 = +inf # infinito positivo
infinite3 = -inf # infinito negativo

# não um número (Not a Number)
not1 = nan
not2 = +nan
not3 = -nan 

Datas e horas

O TOML oferece suporte para datas, horas e datas com e sem deslocamentos.

# data e hora com deslocamento
odt1 = 1979-05-27T07:32:00Z
odt2 = 1979-05-27T00:32:00-07:00
odt3 = 1979-05-27T00:32:00.999999-07:00

# data e hora local
ldt1 = 1979-05-27T07:32:00
ldt2 = 1979-05-27T00:32:00.999999

# data local
ld1 = 1979-05-27

# hora local
lt1 = 07:32:00
lt2 = 00:32:00.999999

Mais sobre a especificação

TOML oferece suporte a ainda mais tipos e sintaxe nativos, leia tudo sobre isso:

Comece a programar

TOML já está implementado em mais de 40 linguagens de programação: