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

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

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

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

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

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

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

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

Приватно - файли ніколи не залишають ваш пристрій

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

Сигнатура заголовка на байтовому рівні (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.app.

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

Аналізатори 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 використовують Cargo.toml для опису метаданих, залежностей і цілей; проєкти Rust з іншими системами збирання можуть використовувати інші файли.
  • На відміну від 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 безпосередньо у своєму веббраузері.