TOML-konfig (.toml)

TOML Standard

Tom's Obvious Minimal Language (TOML) är ett entydigt, människovänligt konfigurationsformat skapat av GitHubs medgrundare Tom Preston-Werner. Det har fått bred spridning i moderna programmeringsekosystem, bland annat Rust (Cargo) och Python (pyproject.toml).

Konvertera TOML till JSON

Gratis konverterare från TOML till JSON i webbläsaren. Konvertera filer direkt på din enhet.

Granska och metadata

Operativsystem och filanalysverktyg identifierar TOML-filer genom att granska den inledande sekvensen av binära byte:

Välj eller släpp filer här

Privat - filer lämnar aldrig din enhet

eller klistra in Ctrl+V
Integritetsgaranti utan nätverksöverföring: 0 byte laddades upp till externa servrar. All bearbetning skedde lokalt i webbläsarens sandlåda.

Signatur i filhuvudet på bytenivå (magiska byte)

Operativsystem och filanalysverktyg identifierar TOML-filer genom att granska den inledande sekvensen av binära byte:

HEX-SIGNATUR (OFFSET 0):

5B ... 5D

ASCII-REPRESENTATION: [...]

Standardisering: TOML v1.0.0 Specification

Tekniska specifikationer

ContainerarkitekturMänniskoläsbar konfigurationsfil som entydigt motsvarar en hashtabell och är strukturerad med [tables] och nyckel = värde-par
KomprimeringOkomprimerad textström
ByteordningUTF-8-textström
FärgrymderEj tillämpligt (konfigurationsfil)
Kanaler och strukturTabeller, arrayer av tabeller, inbäddade tabeller, strängar, heltal, flyttal, booleska värden och datum/tid enligt RFC 3339
Maximala dimensionerObegränsad textlängd
TransparensIngen
Strömning och progressiv visningSekventiell konfigurationsparsning rad för rad

Teknisk jämförelsematris: TOML jämfört med konkurrenter

Tekniskt attributTOML (Aktuell)YAMLJSONINI
Risker för tvetydighetNoll (strikt otvetydig specifikation)Hög (boolska fel p.g.a. YAML:s 'Norway problem')Noll (strikta datatyper)Måttlig (ingen formell standard)
Inbyggda datum- och tidsdatatyperInbyggt stöd för RFC 3339-datum och -tidImplicit tolkning av strängar/datumInga (endast strängar)Inga (endast strängar)
Stöd för kommentarerInbyggt (#-kommentarer)Inbyggt (#-kommentarer)Inga kommentarer tillåtnaInbyggt (; och #-kommentarer)
Primärt ekosystemRust (Cargo), Python (PEP 518), GoKubernetes, Ansible, CI/CD-pipelinesWebb-API:er, webbläsarkommunikationÄldre Windows, Git-konfig

Vanliga skadeorsaker och hex-återställningsguide

Parserfel: 'Duplicate key in table' eller 'Invalid table header'.

Grundorsak: Försök att omdefiniera en befintlig nyckel eller tabellnamnrymd i dokumentet.

Återställning: Validera och omformatera TOML-syntaxen med File2File.app TOML Formatter.

Säkerhetsanalys och attackvektorer för tolkar

TOML-tolkar måste skydda mot prototype pollution och överbelastning av processorn vid extremt djup nästling av tabellarrayer.

Kända attackvektorer

  • Prototypförgiftning i JavaScript TOML-parserare som injicerar egenskaper i Object.prototype.
  • Tjänsteavbrott (DoS) genom djupt nästlade deklarationer av tabellarrayer.
  • Obegränsad minnesallokering när mycket stora inbäddade arrayer tolkas.

Rekommenderade skyddsåtgärder: Begränsa hur djupt tabeller får nästlas och använd ordboksobjekt som skyddar mot prototype pollution.

Historiskt ursprung och milstolpar

2021TOML v1.0.0 ges ut formellt, vilket fastställer grundsyntaxen.
2018Python gör 'pyproject.toml' (PEP 518) till den moderna standarden för byggkonfiguration.
2013Tom Preston-Werner publicerar TOML för att erbjuda ett rent konfigurationsformat utan YAML:s komplexitet.

Viktiga fördelar

  • Helt entydigt: motsvarar en hashtabell på ett tydligt och förutsägbart sätt, utan oväntade typkonverteringar.
  • Inbyggt stöd för datum och tider (RFC 3339-tidsstämplar, datum och klockslag) utan särskilda escape-sekvenser i strängar.
  • Antaget som det officiella standardkonfigurationsformatet för moderna språkverktyg (Rust Cargo.toml, Python pyproject.toml).

Tekniska begränsningar

  • Djupt kapslade objektträd i flera nivåer kan bli mångordiga jämfört med YAML.
  • Syntaxen för arrayer av tabeller ([[table.array]]) kan vara svår att förstå för nybörjare.
  • Mindre kompakt än JSON för maskin-till-maskin-API-datautbyte med högt dataflöde.

Intressant teknisk kuriosa

  • TOML skapades av Tom Preston-Werner, som även var med och grundade GitHub samt skapade Gravatar och SemVer (Semantic Versioning).
  • Cargo-paket använder Cargo.toml för metadata, beroenden och mål; Rust-projekt med andra byggsystem kan använda andra filer.
  • Till skillnad från JSON har TOML inbyggt stöd för kommentarer (med tecknet '#') och flerradiga strängar.

Vanliga tekniska frågor

Vad används TOML till?

TOML används för programvarukonfiguration, mest framträdande i Rusts Cargo.toml, Pythons pyproject.toml, Go Hugo-konfigurationer och containerverktyg.

Varför föredras TOML framför YAML för konfiguration?

TOML undviker YAML:s ökända tolkningsbuggar i specialfall (som att 'NO' utan citattecken blir det booleska värdet false), samtidigt som det är lättläst och har kommentarer och tydliga tabeller.

Hur kan jag konvertera TOML till JSON eller YAML?

Du kan konvertera TOML-filer till JSON eller YAML omedelbart med File2File.app direkt i din webbläsare.