Konfiguracja TOML (.toml)

TOML Standardowy

Tom's Obvious Minimal Language (TOML) to jednoznaczny, skoncentrowany na człowieku format konfiguracyjny stworzony przez współzałożyciela GitHub Toma Prestona-Wernera, szeroko adoptowany w nowoczesnych ekosystemach programistycznych, w tym w języku Rust (Cargo) i Python (pyproject.toml).

Konwertuj TOML na JSON

Darmowy konwerter z TOML na JSON w przeglądarce. Konwertuj pliki natychmiast na swoim urządzeniu.

Inspekcja i metadane

Systemy operacyjne i analizatory plików identyfikują pliki TOML, sprawdzając początkową sekwencję bajtów binarnych:

Wybierz lub upuść pliki tutaj

Konwersja w 100% prywatna w przeglądarce - pliki nigdy nie opuszczają Twojego urządzenia

lub wklej Ctrl+V
Gwarancja prywatności bez przesyłania danych do sieci: 0 bajtów przesłanych na zewnętrzne serwery. Całe przetwarzanie odbyło się lokalnie w piaskownicy przeglądarki.

Podpis nagłówka na poziomie bajtów (Magic Bytes)

Systemy operacyjne i analizatory plików identyfikują pliki TOML, sprawdzając początkową sekwencję bajtów binarnych:

PODPIS HEX (OFFSET 0):

5B ... 5D

REPREZENTACJA ASCII: [...]

Normalizacja: TOML v1.0.0 Specification

Specyfikacja techniczna

Architektura konteneraHuman-readable configuration file mapping unequivocally to a hash table, structured with [tables] and key = value pairs
KompresjaUncompressed text stream
Kolejność bajtów (Endianness)UTF-8 text stream
Przestrzenie kolorówN/A (Configuration File)
Kanały i strukturaTables, arrays of tables, inline tables, strings, integers, floats, booleans, and RFC 3339 datetimes
Maks. wymiaryUnbounded text length
PrzezroczystośćNone
Streaming i progresywne ładowanieSequential line-by-line configuration parsing

Techniczna macierz porównawcza: TOML a konkurencja

Atrybut technicznyTOML (Bieżący)YAMLJSONINI
Ryzyko niejednoznacznościŻadne (ściśle jednoznaczna specyfikacja)Wysokie (błędy typu 'problem z Norwegią' w YAML dotyczące wartości logicznych)Żadne (ścisłe typy danych)Umiarkowane (brak formalnego standardu)
Natywne typy daty i czasuNatywna obsługa daty i czasu według RFC 3339Niejawne analizowanie ciągów znaków / datBrak (tylko ciągi znaków)Brak (tylko ciągi znaków)
Obsługa komentarzyNatywna (komentarze #)Natywna (komentarze #)Brak dozwolonych komentarzyNatywna (komentarze ; i #)
Główny ekosystemRust (Cargo), Python (PEP 518), GoKubernetes, Ansible, potoki CI/CDAPI internetowe, komunikacja w przeglądarceStarsze systemy Windows, konfiguracja Git

Typowe tryby uszkodzeń i przewodnik odzyskiwania szesnastkowego

Błąd analizatora (parsera): 'Duplicate key in table' lub 'Invalid table header'.

Główna przyczyna: Próba ponownego zdefiniowania istniejącego klucza lub przestrzeni nazw tabeli w dokumencie.

Odzyskiwanie: Zweryfikuj i sformatuj składnię TOML za pomocą formatera TOML w File2File.

Analiza bezpieczeństwa i wektory ataku na parser

Analizatory TOML muszą chronić przed skażeniem prototypu (prototype pollution) oraz wyczerpaniem zasobów procesora wynikającym z patologicznego zagnieżdżania tablic tabel.

Znane wektory ataku

  • Skażenie prototypu w parserach TOML języka JavaScript wstrzykujące właściwości do obiektu Object.prototype.
  • Atak typu odmowa usługi (DoS) poprzez głęboko zagnieżdżone deklaracje tablic tabel.
  • Nieograniczona alokacja pamięci podczas analizowania masowych tablic wewnątrz wiersza (inline array).

Najlepsze praktyki obronne:

Pochodzenie historyczne i kamienie milowe

2021Oficjalne wydanie TOML w wersji 1.0.0, zamrażające specyfikację głównej składni.
2018Python standaryzuje 'pyproject.toml' (PEP 518) jako nowoczesny standard konfiguracji kompilacji.
2013Tom Preston-Werner publikuje TOML, aby zapewnić czysty format konfiguracyjny pozbawiony złożoności języka YAML.

Główne zalety

  • Całkowicie jednoznaczny: mapuje się czysto i przewidywalnie na tablicę mieszającą (hash table) bez zaskakującego dopasowywania typów.
  • Wbudowana obsługa natywnych typów daty i czasu (znaczniki czasu RFC 3339, daty, godziny) bez konieczności uciekania znaków (escaping).
  • Przyjęty jako oficjalny standard formatu konfiguracji dla nowoczesnych narzędzi językowych (Rust Cargo.toml, Python pyproject.toml).

Ograniczenia techniczne i wady

  • Głęboko zagnieżdżone, wielopoziomowe drzewa obiektów mogą stać się rozwlekłe w porównaniu do języka YAML.
  • Składnia dla tablic tabel ([[table.array]]) może być nieintuicyjna dla początkujących.
  • Mniej kompaktowy niż JSON w przypadku wysokowydajnej wymiany danych API między maszynami.

Ciekawe informacje techniczne

  • TOML został stworzony przez Toma Prestona-Wernera, który jest również współzałożycielem serwisu GitHub oraz twórcą Gravatar i SemVer (Semantic Versioning).
  • Plik 'Cargo.toml' w każdym projekcie w języku Rust określa wszystkie zależności pakietów i flagi kompilatora w formacie TOML.
  • W przeciwieństwie do JSON, TOML natywnie obsługuje komentarze (przy użyciu znaku '#') oraz łańcuchy wielolinijkowe.

Często zadawane pytania techniczne

Do czego służy TOML?

TOML służy do konfiguracji oprogramowania, najczęściej w pliku Cargo.toml języka Rust, pyproject.toml Pythona, konfiguracjach Go Hugo oraz w narzędziach kontenerowych.

Dlaczego TOML jest preferowany nad YAML w konfiguracji?

TOML pozwala uniknąć znanych błędów parsowania YAML w przypadkach brzegowych (takich jak zamiana nieujętego w cudzysłów 'NO' na wartość logiczną false), pozostając przy tym czytelnym dla człowieka dzięki komentarzom i przejrzystym tabelom.

Jak mogę przekonwertować TOML na JSON lub YAML?

Możesz błyskawicznie przekonwertować pliki TOML na format JSON lub YAML za pomocą File2File.app bezpośrednio w przeglądarce internetowej.