Конфігурація TOML (.toml)

Специфікація Стандарт

Tom's Obvious Minimal Language (TOML) - це однозначний, орієнтований на людину формат конфігурації, створений співзасновником GitHub Томом Престоном-Вернером, який широко використовується в сучасних екосистемах програмування, зокрема в Rust (Cargo) та Python (pyproject.toml).

Конвертувати з TOML у JSON

Безкоштовний конвертер з TOML у JSON у браузері. Миттєво конвертуйте файли на своєму пристрої.

Аналіз та метадані

Операційні системи та аналізатори файлів ідентифікують файли TOML, перевіряючи початкову послідовність бінарних байтів:

Виберіть або перетягніть файли сюди

100% приватна конвертація у браузері - файли ніколи не покидають ваш пристрій

або вставте Ctrl+V
Гарантія конфіденційності з нульовою передачею мережею: 0 байт завантажено на зовнішні сервери. Уся обробка виконується локально в пісочниці вашого браузера.

Сигнатура заголовка на байтовому рівні (Magic Bytes)

Операційні системи та аналізатори файлів ідентифікують файли TOML, перевіряючи початкову послідовність бінарних байтів:

ШІСТНАДЦЯТКОВА СИГНАТУРА (ЗСУВ 0):

5B ... 5D

ASCII-УЯВЛЕННЯ: [...]

Стандартизація: Специфікація TOML v1.0.0

Технічні характеристики

Архітектура контейнераЗрозумілий для людини файл конфігурації, який однозначно зіставляється з хеш-таблицею, структурованою за допомогою [tables] та пар ключ = значення
СтисненняНестиснений текстовий потік
Порядок байтів (Endianness)Текстовий потік UTF-8
Колірні просториНе застосовується (Файл конфігурації)
Канали та структураТаблиці, масиви таблиць, вбудовані таблиці, рядки, цілі числа, числа з плаваючою комою, булеві значення та дати-часу за стандартом RFC 3339
Максимальні розміриНеобмежена довжина тексту
ПрозорістьВідсутня
Потокове та прогресивне завантаженняПослідовний побузковий розбір конфігурації

Технічна матриця порівняння: TOML проти конкурентів

Технічний атрибутTOML (Поточний)YAMLJSONINI
Ризик неоднозначностіНульовий (суворо однозначна специфікація)Високий (помилки булевих значень через «проблему Норвегії» у YAML)Нульовий (суворі типи даних)Помірний (немає офіційного стандарту)
Нативні типи дати й часуНативна підтримки дати та часу за RFC 3339Неявний розбір рядків / датВідсутні (тільки рядки)Відсутні (тільки рядки)
Підтримка коментарівНативна (коментарі через #)Нативна (коментарі через #)Коментарі забороненіНативна (коментарі через ; та #)
Основна екосистемаRust (Cargo), Python (PEP 518), GoKubernetes, Ansible, CI/CD конвеєриВеб-API, зв'язок із браузеромЗастарілі Windows, конфігурація Git

Типові режими пошкодження та посібник з відновлення в шістнадцятковому форматі

Помилка синтаксичного аналізатора: 'Duplicate key in table' або 'Invalid table header'.

Першопричина: Спроба перевизначити наявний ключ або простір імен таблиці в документі.

Відновлення: Перевірте та відформатуйте синтаксис TOML за допомогою форматувальника TOML у File2File.

Аналіз безпеки та векторів атак на парсери

Аналізатори TOML повинні захищатися від забруднення прототипу (prototype pollution) та вичерпання ЦП через патологічну вкладеність масивів таблиць.

Відомі вектори атак

  • Забруднення прототипу в аналізаторах TOML на JavaScript шляхом ін'єкції властивостей у Object.prototype.
  • Відмова в обслуговуванні через глибоко вкладені оголошення масивів таблиць.
  • Необмежене виділення пам'яті під час розбору масивів усередині рядків масивів.

Захисні найкращі практики:

Історичне походження та віхи

2021Офіційно випущено TOML v1.0.0, що заморозило специфікацію базового синтаксису.
2018Python стандартизує 'pyproject.toml' (PEP 518) як сучасний стандарт конфігурації збірки.
2013Том Престон-Вернер публікує TOML, щоб забезпечити чистий формат конфігурації без складнощів YAML.

Головні переваги та плюси

  • Повністю однозначний: чітко й передбачувано відображається в хеш-таблицю без несподіваного перетворення типів.
  • Першокласна нативна підтримка дати й часу (мітки часу RFC 3339, дати, час) без екранування рядків.
  • Прийнятий як офіційний стандартний формат конфігурації для сучасних мовних інструментів (Rust Cargo.toml, Python pyproject.toml).

Технічні обмеження та мінуси

  • Глибоко вкладені багаторівневі дерева об'єктів можуть бути занадто багатослівними порівняно з YAML.
  • Синтаксис для масивів таблиць ([[table.array]]) може бути неінтуїтивним для початківців.
  • Менш компактний, ніж JSON, для високопродуктивного обміну даними через API між машинами.

Цікаві технічні факти

  • TOML був створений Томом Престоном-Вернером, який також є співзасновником GitHub і автором Gravatar та SemVer (семантичного версіонування).
  • Файл 'Cargo.toml' у кожному проєкті на Rust визначає всі залежності пакета та прапорці компілятора у форматі TOML.
  • На відміну від JSON, TOML нативно підтримує коментарі (з використанням символу '#') та багаторядкові рядки.

Поширені технічні запитання

Для чого використовується TOML?

TOML використовується для конфігурації програмного забезпечення, зокрема в Cargo.toml для Rust, pyproject.toml для Python, конфігураціях Go Hugo та інструментах для контейнерів.

Чому TOML кращий за YAML для конфігурації?

TOML дозволяє уникнути відомих граничних помилок розбору в YAML (таких як перетворення незакавкованого 'NO' на логічне значення false), залишаючись при цьому зручним для читання людиною завдяки коментарям і чітким таблицям.

Як я можу конвертувати TOML у JSON або YAML?

Ви можете миттєво конвертувати файли TOML у JSON або YAML за допомогою File2File.app безпосередньо у своєму веббраузері.