ToolDeck

TOML 格式化工具

格式化并验证 TOML 配置文件

加载示例

TOML 输入

格式化后的 TOML

本地运行 · 粘贴密钥安全无忧
格式化后的 TOML 将显示在此处…
也可以试试:TOML转JSON

最后更新: 2026年4月

什么是 TOML 格式化?

TOML(Tom's Obvious Minimal Language)是 Tom Preston-Werner 于 2013 年创建的配置文件格式。它直接映射到哈希表,并对所有值使用显式类型。TOML 格式化工具将原始或风格不一致的 TOML 重新序列化为统一间距、规范缩进和标准键排序的形式。结果是整个项目遵循相同惯例的配置文件,使 diff 中的配置变更更易于审查。

TOML v1.0.0 规范于 2021 年 1 月定稿,其语法定义足够严格,任何合规解析器对相同输入都会产生完全相同的数据结构。格式化不会改变 TOML 文件的语义内容,仅调整空白字符、键的分组和引号风格。这意味着你可以自由格式化 TOML 文件,无需担心影响应用程序的行为。

与 JSON 不同,TOML 支持注释、原生日期时间类型以及多种字符串形式(基本字符串、字面字符串和多行字符串)。优秀的格式化工具会保留注释,并区分内联表和标准表头。它还能正确处理表数组,保持节的分组完整,使文件对人类和解析器都保持可读性。

Before · toml
After · toml
title="My App"
version="1.0.0"
debug=false
[database]
host="localhost"
port=5432
name="mydb"
[database.pool]
max_connections=25
timeout=30
[[servers]]
name="web"
host="web.example.com"
[[servers]]
name="api"
host="api.example.com"
title = "My App"
version = "1.0.0"
debug = false

[database]
host = "localhost"
port = 5432
name = "mydb"

[database.pool]
max_connections = 25
timeout = 30

[[servers]]
name = "web"
host = "web.example.com"

[[servers]]
name = "api"
host = "api.example.com"

为什么使用 TOML 格式化工具?

配置文件会随着不同团队成员的编辑而逐渐产生风格偏差:制表符与空格混用、部分键被不必要地加引号、表节失去视觉分组。TOML 格式化工具可一次性规范所有这些问题。

即时格式化
粘贴未格式化的 TOML,立即获得整洁、风格统一的输出。无需安装命令行工具,无需配置项目,无需等待构建步骤。
🔒
隐私优先处理
所有解析和格式化操作均在浏览器中本地运行。你的配置数据(包括凭据或内部主机名)不会离开你的设备。
内置验证
格式化工具在重新序列化之前会先解析你的 TOML。如果输入存在语法错误,会给出包含问题行的清晰错误信息,因此格式化同时具备验证功能。
📋
无需注册
打开页面即可开始格式化,无需注册、无频率限制、无使用追踪。每次访问工具的功能完全相同。

TOML 格式化工具使用场景

前端开发
格式化 Cloudflare Workers 项目的 wrangler.toml 文件,或基于 Deno 的前端项目的 deno.toml 配置。整洁的格式化有助于在拉取请求中审查部署配置。
后端工程
统一多个 Rust 微服务的 Cargo.toml 文件格式。一致的格式使跨代码仓库扫描依赖版本和特性标志更加便捷。
DevOps 与 CI/CD
在提交前格式化 .goreleaser.toml、netlify.toml 或 Starship 提示符配置等文件。在 CI 流水线中添加格式化检查,以强制执行风格一致性。
质量保证与测试
快速格式化测试夹具,使其易于阅读和进行 diff 比较。当测试因配置差异失败时,格式化后的文件能让实际值与期望值的对比一目了然。
数据工程
格式化定义数据采集流水线的 Telegraf 或 InfluxDB 配置文件。这些文件通常多达数百行,一致的格式使其保持可维护性。
学习 TOML 语法
将文档或教程中的示例粘贴进来,观察格式化工具如何将其规范化。这是快速了解哪种括号风格、引号规则和表分组是标准写法的有效方式。

TOML 语法参考

TOML 有一套精简的语法结构。下表列出了 TOML v1.0.0 规范中定义的所有结构性元素。格式化工具会对所有这些元素应用一致的间距和分组规则。

语法名称备注
key = "value"Basic key-value pairKeys are bare or quoted; values are typed
[table]Standard tableCreates a named section (hash table)
[a.b.c]Dotted tableShorthand for nested tables
[[array]]Array of tablesEach [[name]] block appends to an array
key = """...\n"""Multi-line basic stringAllows newlines, escapes processed
key = '''...\n'''Multi-line literal stringAllows newlines, no escape processing
# commentCommentExtends to end of line; not in JSON output
{inline = true}Inline tableSingle-line table, no newlines allowed

TOML vs JSON vs YAML

TOML、JSON 和 YAML 解决相似的问题,但各有不同的取舍。

特性TOMLJSONYAML
注释# 行注释不支持# 行注释
类型化值字符串、整数、浮点数、布尔值、日期时间字符串、数字、布尔值、null推断(容易出错)
嵌套[table] 表头花括号基于缩进
规范严格性严格(唯一解析结果)严格(RFC 8259)宽松(多种合法解析结果)
日期/时间支持4 种原生类型无(使用字符串)隐式(不稳定)
尾随逗号不允许不允许无(没有逗号)

代码示例

以下示例展示如何在不同语言和工具中以编程方式格式化 TOML。每个示例读取文件、解析后输出格式化版本。

JavaScript (Node.js)
import { parse, stringify } from '@iarna/toml'
import fs from 'fs'

const raw = fs.readFileSync('config.toml', 'utf-8')
const doc = parse(raw)
const formatted = stringify(doc)
// stringify() outputs canonical TOML with consistent spacing
fs.writeFileSync('config.toml', formatted)

// Quick one-liner with npx:
// npx taplo fmt config.toml
Python
import tomllib   # Python 3.11+ (read-only)
import tomli_w   # pip install tomli-w (write)

# Parse and re-serialize to format
with open("config.toml", "rb") as f:
    data = tomllib.load(f)

formatted = tomli_w.dumps(data)
# tomli_w produces sorted keys, consistent quoting, and
# proper whitespace around = signs
print(formatted)

# CLI alternative: taplo fmt config.toml
Go
package main

import (
    "fmt"
    "os"
    "github.com/BurntSushi/toml"
    "bytes"
)

func main() {
    var data map[string]interface{}
    _, err := toml.DecodeFile("config.toml", &data)
    if err != nil {
        fmt.Fprintln(os.Stderr, err) // parse error with line number
        os.Exit(1)
    }
    var buf bytes.Buffer
    enc := toml.NewEncoder(&buf)
    enc.Indent = "  "
    enc.Encode(data) // re-serialized with consistent formatting
    fmt.Print(buf.String())
}
CLI (taplo)
# Install taplo — the standard TOML toolkit
cargo install taplo-cli
# or: npm install -g @taplo/cli

# Format a single file in place
taplo fmt config.toml

# Format all .toml files in a project
taplo fmt

# Check formatting without modifying (CI-friendly)
taplo fmt --check

# Validate TOML syntax without formatting
taplo lint config.toml

常见问题

TOML 格式化工具的作用是什么?
TOML 格式化工具将文件解析为数据结构,然后以一致的空白字符、键排序和引号风格重新序列化。语义内容保持不变,只有视觉呈现发生变化:等号两侧的间距、表节之间的空行,以及嵌套值的缩进。
TOML 格式化对生产配置文件安全吗?
安全。格式化只改变空白字符和外观细节,格式化前后解析得到的数据结构完全相同。如果格式化工具遇到无效输入,会报错而不是输出错误的结果。你可以通过解析两个版本并对比结果对象来验证这一点。
TOML 与 JSON 有何不同?
TOML 支持注释、原生日期时间类型、多行字符串,以及用于组织嵌套数据的表头,而 JSON 均不支持。TOML 专为供人类阅读和编辑的配置文件设计,JSON 则为程序间的数据交换设计。JSON 不支持注释,这使得在配置中内联记录决策变得困难。
能否通过命令行格式化 TOML?
可以。Taplo 是使用最广泛的 TOML 格式化命令行工具。通过 cargo install taplo-cli 或 npm install -g @taplo/cli 安装,然后运行 taplo fmt 格式化项目中所有 .toml 文件。它支持通过 taplo.toml 或 .taplo.toml 文件配置自定义规则。
格式化会保留 TOML 文件中的注释吗?
这款基于浏览器的格式化工具将输入解析为数据结构后重新序列化,此过程会丢失注释。如果需要保留注释,请使用支持 CST 的工具,如 Taplo(命令行)或 toml-edit(Rust 库),它们基于具体语法树而非解析后的数据进行操作。
TOML 格式化与 TOML 验证有何区别?
验证检查文件是否符合规范,不符合时报告错误。格式化更进一步:先验证输入,再以规范化的风格重写。每次格式化操作都以验证为第一步,因此格式化成功的文件必然是有效的。
哪些项目使用 TOML 作为配置格式?
Rust 的 Cargo(Cargo.toml)、Python 打包生态(pyproject.toml)、Hugo 静态网站、Deno(deno.toml)、Cloudflare Workers(wrangler.toml)、InfluxDB、Telegraf 以及 Starship 提示符均使用 TOML。该格式在 2015 年 Rust 将其作为包清单标准格式后获得广泛普及。