ДокументыИзображенияМедиаИнструменты PDF

Конвертер TOML в YAML Online

Конвертируйте TOML-конфигурацию в YAML. Бесплатно, в вашем браузере.


title: My Project
version: 1.0.0
server:
  host: localhost
  port: 8080
database:
  host: db.example.com
  name: myapp
Processed in your browser

Из Rust и Hugo в Docker и Jekyll

Миграция Hugo→Jekyll

Конвертируйте TOML-front matter файлов Hugo в YAML для Jekyll, Gatsby или любого современного генератора.

Rust-проекты в CI/CD

Извлекайте данные из Cargo.toml или pyproject.toml для воркфлоу GitHub Actions или GitLab CI.

100% конфиденциально

Ваша конфигурация никогда не покидает браузер. Без серверов, без регистрации.

В реальном времени

Конвертация по мере ввода. Синтаксические ошибки TOML выявляются мгновенно.

Три шага — никаких сложностей

1

Вставьте TOML

Вставьте TOML-содержимое в редактор. Поддерживаются Cargo.toml, pyproject.toml, Pipfile, hugo.toml и любой валидный TOML v1.0.

2

Конвертация в YAML

Конвертер разбирает ваш TOML и генерирует чистый YAML 1.2 с правильными отступами. Всё выполняется в браузере — ничего не загружается.

3

Скопируйте или скачайте YAML

Получите YAML, готовый для docker-compose.yml, GitHub Actions, Ansible, Kubernetes или front matter Jekyll/Hugo.

Остались вопросы?

Наиболее частый случай — миграция между экосистемами генераторов статических сайтов: Hugo использует TOML как предпочтительный формат front matter (хотя поддерживает и YAML), тогда как Jekyll, Gatsby, Eleventy и большинство современных генераторов используют YAML. Если вы переносите сайт с Hugo на другой генератор или у вас есть библиотека контента с TOML-front matter, которую нужно нормализовать до YAML, данный инструмент конвертирует каждый TOML-блок в YAML-эквивалент. Другой распространённый сценарий — экосистема Rust: проекты Rust используют Cargo.toml для управления зависимостями, но при контейнеризации с Docker или определении CI/CD в GitHub Actions ту же структуру данных нужно выразить в YAML.

TOML (Tom's Obvious, Minimal Language) был создан Томом Престоном-Вернером (сооснователем GitHub) в 2013 году как более простая и однозначная альтернатива YAML для файлов конфигурации. TOML 1.0 был выпущен в январе 2021 года. Ключевые особенности: использование секций в [квадратных скобках] вместо отступов, явные типы данных (даты RFC 3339, типизированные массивы, встроенные таблицы) и однозначность — одинаковый TOML всегда порождает одинаковое дерево данных, что не всегда справедливо для YAML с его множеством способов представления одного значения. YAML более выразителен и зрел (YAML 1.0 в 2001 году, YAML 1.2 в 2009 году), но и более подвержен ошибкам из-за отступов. TOML предпочтителен в экосистеме Rust (Cargo.toml) и современного Python (pyproject.toml, PEP 518/621).

Cargo.toml и docker-compose.yml имеют концептуально разные структуры: Cargo.toml определяет метаданные Rust-пакета, зависимости и фичи крейта; docker-compose.yml определяет сервисы, сети и тома контейнеров. Прямого взаимно однозначного преобразования с семантическим смыслом не существует. Однако конвертация Cargo.toml в структурный YAML полезна для извлечения зависимостей, версий или фич и их использования в качестве переменных в docker-compose.yml или воркфлоу GitHub Actions — например, для извлечения версии пакета из [package].version и использования в качестве тега Docker-образа.

Да, хотя после конвертации потребуются ручные правки. Файл pyproject.toml (введённый PEP 518 в 2016 году, сейчас де-факто стандарт для современных Python-проектов) определяет метаданные проекта, зависимости, инструменты сборки (poetry, hatch, flit) и конфигурацию линтеров. Конвертация в YAML даёт структурное представление, из которого можно извлечь зависимости ([tool.poetry.dependencies]) для генерации команды pip install в воркфлоу GitHub Actions или создания окружения Conda. Инструмент генерирует валидный YAML, который можно отредактировать под специфическую схему GitHub Actions, GitLab CI или CircleCI.

В Hugo TOML-front matter ограничивается символами +++ в начале и конце Markdown-файла. В Jekyll и большинстве YAML-генераторов front matter ограничивается тремя дефисами ---. Миграция включает: извлечение TOML-блока между +++, конвертацию в YAML с помощью данного инструмента и замену разделителей +++ на --- в Markdown-файле. Стандартные поля (title, date, tags, draft) переводятся напрямую. Специфические для Hugo поля (aliases, outputs, cascade) могут не иметь эквивалента в Jekyll и потребуют ручной адаптации.

Да. Массивы TOML конвертируются в YAML-списки с синтаксисом дефиса (-). Встроенные массивы [[1, 2, 3]] конвертируются в YAML-последовательности потока ([1, 2, 3]) или блочные последовательности в зависимости от длины. Таблицы TOML ([section]) конвертируются во вложенные YAML-словари. Массивы таблиц TOML ([[products]]) конвертируются в YAML-списки объектов — наиболее естественное YAML-представление для коллекций объектов с одинаковой структурой. Типы данных TOML (даты RFC 3339, булевы значения, целые и дробные числа) сохраняются в своих YAML-эквивалентах.

Конвертация TOML в YAML: миграция Rust, Hugo и pyproject.toml в DevOps-среды

TOML (Tom's Obvious, Minimal Language) был создан Томом Престоном-Вернером, сооснователем GitHub, в 2013 году с явной целью быть «очевидно однозначным» — прямая критика в адрес сложности YAML, имеющего множество способов представления одного значения и чья спецификация 1.1 содержала неоднозначности, приводившие к различному поведению парсеров. TOML 1.0 был официально выпущен в январе 2021 года после восьми лет итеративной разработки. Экосистема, наиболее активно принявшая TOML, — это Rust: Cargo, официальный менеджер пакетов Rust, использует Cargo.toml для определения метаданных крейта, зависимостей, фич и конфигурации воркспейса. За пределами Rust современный Python принял TOML через pyproject.toml (определён PEP 518 в 2018 году и закреплён PEP 621 в 2021 году), централизующий конфигурацию сборки, метаданные пакета и настройки инструментов pytest, mypy, black и ruff. Hugo, самый быстрый генератор статических сайтов (написан на Go), принял TOML как основной формат конфигурации.

YAML, чья спецификация 1.2 была опубликована в октябре 2009 года, доминирует в DevOps-экосистеме: GitHub Actions, GitLab CI, CircleCI, Azure Pipelines и Jenkins (через YAML-пайплайны) используют YAML исключительно для определения CI/CD-пайплайнов. Docker Compose использует YAML с первой версии, Kubernetes использует YAML для всех манифестов ресурсов, Ansible применяет YAML для плейбуков и ролей. Helm-чарты (менеджер пакетов Kubernetes) смешивают YAML с Go-шаблонами. Распространённость YAML в DevOps означает, что Rust-проекты, использующие Cargo.toml для конфигурации, должны выражать CI/CD-конфигурацию в YAML, а Python-проекты с pyproject.toml должны писать воркфлоу GitHub Actions на YAML. Это создаёт сосуществование обоих форматов в одном репозитории, иногда требующее конвертации между ними.

Миграция между генераторами статических сайтов — наиболее наглядный сценарий, где TOML→YAML необходим. Hugo, запущенный в 2013 году Стивом Францией и впоследствии активно поддерживаемый Бьёрном Эриком Педерсеном, принял TOML как предпочтительный формат front matter в ранних версиях. TOML-front matter в Hugo ограничивается символами +++ и может содержать заголовок, дату, категории, теги и любые пользовательские данные для каждой страницы. Jekyll, старейший генератор статических сайтов, популяризировавший концепцию front matter (создан Томом Престоном-Вернером в 2008 году и в настоящее время является движком GitHub Pages), использует YAML с разделителями ---. Миграция сайта с Hugo на Jekyll требует конвертации тысяч Markdown-файлов с TOML-front matter в YAML. Хотя данный инструмент обрабатывает по одному файлу в браузере, он служит для валидации конвертации перед применением пакетного скрипта. Для масштабных миграций Python-скрипты с toml и PyYAML или Node.js с @iarna/toml и js-yaml автоматизируют процесс.