ToolDeck

Định dạng TOML

Định dạng và xác thực file cấu hình TOML

Thử ví dụ

Đầu vào TOML

TOML đã định dạng

Chạy cục bộ · An toàn để dán thông tin bí mật
TOML đã định dạng sẽ hiển thị ở đây…
Thử thêm:TOML sang JSON

Cập nhật lần cuối: tháng 4 năm 2026

Định dạng TOML là gì?

TOML (Tom's Obvious Minimal Language) là định dạng tệp cấu hình được Tom Preston-Werner tạo ra vào năm 2013. Nó ánh xạ trực tiếp sang bảng băm và sử dụng kiểu dữ liệu tường minh cho tất cả các giá trị. Một công cụ định dạng TOML nhận đầu vào thô hoặc có kiểu dáng không nhất quán rồi tuần tự hóa lại với khoảng cách đồng đều, thụt lề đúng cách và thứ tự khóa chuẩn. Kết quả là một tệp tuân theo cùng một quy ước trong toàn bộ dự án, giúp xem xét các thay đổi cấu hình trong diff dễ dàng hơn.

Đặc tả TOML v1.0.0, được hoàn thiện vào tháng 1 năm 2021, định nghĩa ngữ pháp đủ chặt chẽ để bất kỳ parser nào tuân thủ đều tạo ra cấu trúc dữ liệu giống hệt nhau từ cùng một đầu vào. Định dạng không thay đổi nội dung ngữ nghĩa của tệp TOML. Nó chỉ điều chỉnh khoảng trắng, nhóm khóa và kiểu trích dẫn. Điều này có nghĩa là bạn có thể định dạng tệp TOML tùy ý mà không lo làm ảnh hưởng đến hành vi ứng dụng.

Khác với JSON, TOML hỗ trợ chú thích, kiểu ngày-giờ gốc và nhiều dạng chuỗi (cơ bản, nguyên văn và nhiều dòng). Một công cụ định dạng tốt giữ nguyên chú thích và tôn trọng sự khác biệt giữa inline table và tiêu đề bảng chuẩn. Nó cũng xử lý đúng mảng bảng, giữ nguyên nhóm phần mục để tệp vẫn dễ đọc cho cả người dùng lẫn các parser tiêu dùng nó.

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"

Tại sao nên dùng công cụ định dạng TOML?

Các tệp cấu hình tích lũy sự lệch lạc về kiểu dáng khi nhiều thành viên trong nhóm chỉnh sửa chúng theo thời gian. Tab trộn lẫn khoảng trắng, một số khóa bị trích dẫn không cần thiết, và các phần bảng mất đi nhóm trực quan. Một công cụ định dạng TOML chuẩn hóa tất cả những điều này trong một lần xử lý.

Định dạng tức thì
Dán TOML chưa được định dạng và nhận đầu ra có kiểu dáng nhất quán ngay lập tức. Không cần cài đặt CLI, không cần thiết lập dự án, không phải chờ bước build.
🔒
Xử lý ưu tiên quyền riêng tư
Toàn bộ quá trình phân tích và định dạng diễn ra trong trình duyệt của bạn. Dữ liệu cấu hình, kể cả thông tin xác thực hay tên máy chủ nội bộ, không bao giờ rời khỏi máy của bạn.
Bao gồm xác thực
Công cụ định dạng phân tích cú pháp TOML của bạn trước khi tuần tự hóa lại. Nếu đầu vào có lỗi cú pháp, bạn nhận được thông báo lỗi rõ ràng kèm dòng có vấn đề, vì vậy định dạng đồng thời cũng là xác thực.
📋
Không cần tài khoản
Mở trang và bắt đầu định dạng. Không có đăng ký, không giới hạn tần suất và không theo dõi việc sử dụng. Công cụ hoạt động nhất quán mỗi lần truy cập.

Các trường hợp sử dụng công cụ định dạng TOML

Phát triển Frontend
Định dạng tệp Wrangler.toml cho các dự án Cloudflare Workers hoặc cấu hình deno.toml cho frontend dựa trên Deno. Định dạng sạch sẽ hỗ trợ việc xem xét cấu hình triển khai trong pull request.
Kỹ thuật Backend
Chuẩn hóa tệp Cargo.toml trên nhiều microservice Rust. Định dạng nhất quán giúp dễ dàng kiểm tra phiên bản phụ thuộc và feature flag trên các repository.
DevOps và CI/CD
Định dạng các tệp cấu hình như .goreleaser.toml, netlify.toml hoặc cấu hình Starship prompt trước khi commit. Thêm bước kiểm tra định dạng vào CI pipeline để thực thi tính nhất quán về kiểu dáng.
QA và Kiểm thử
Nhanh chóng định dạng các fixture kiểm thử để dễ đọc và so sánh. Khi kiểm thử thất bại do sự khác biệt cấu hình, các tệp đã định dạng làm cho việc so sánh thực tế và mong đợi trở nên rõ ràng.
Kỹ thuật Dữ liệu
Định dạng cấu hình Telegraf hoặc InfluxDB xác định các pipeline thu thập dữ liệu. Các tệp này thường phát triển đến hàng trăm dòng, và định dạng nhất quán giúp chúng dễ bảo trì.
Học cú pháp TOML
Dán các ví dụ từ tài liệu hoặc hướng dẫn và xem cách công cụ định dạng chuẩn hóa chúng. Đây là cách nhanh để tìm hiểu kiểu dấu ngoặc, quy tắc trích dẫn và nhóm bảng nào là chuẩn.

Tham chiếu cú pháp TOML

TOML có một tập cấu trúc nhỏ. Bảng dưới đây liệt kê mọi phần tử cấu trúc được định nghĩa trong đặc tả TOML v1.0.0. Công cụ định dạng áp dụng khoảng cách và nhóm nhất quán cho tất cả những phần tử này.

Cú phápTênGhi chú
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 so với JSON và YAML

TOML, JSON và YAML giải quyết các vấn đề chồng lấp nhau nhưng đánh đổi theo những cách khác nhau.

Tính năngTOMLJSONYAML
Chú thích# chú thích dòngKhông hỗ trợ# chú thích dòng
Giá trị có kiểuString, int, float, bool, datetimeString, number, bool, nullSuy luận (dễ lỗi)
Lồng nhauTiêu đề [table]Dấu ngoặc nhọnDựa trên thụt lề
Độ chặt chẽ của đặc tảChặt (một kết quả phân tích)Chặt (RFC 8259)Lỏng (nhiều phân tích hợp lệ)
Hỗ trợ ngày/giờ4 kiểu gốcKhông có (dùng chuỗi)Ngầm định (dễ lỗi)
Dấu phẩy cuốiKhông cho phépKhông cho phépKhông áp dụng (không có dấu phẩy)

Ví dụ mã nguồn

Các ví dụ dưới đây định dạng TOML theo chương trình trên nhiều ngôn ngữ và công cụ khác nhau. Mỗi ví dụ đọc một tệp, phân tích cú pháp và ghi phiên bản đã định dạng.

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

Câu hỏi thường gặp

Công cụ định dạng TOML làm gì?
Công cụ định dạng TOML phân tích tệp thành cấu trúc dữ liệu, sau đó tuần tự hóa lại với khoảng trắng, thứ tự khóa và kiểu trích dẫn nhất quán. Nội dung ngữ nghĩa vẫn giữ nguyên. Chỉ có cách trình bày thay đổi: khoảng cách quanh dấu bằng, dòng trống giữa các phần bảng và thụt lề của các giá trị lồng nhau.
Định dạng TOML có an toàn cho các tệp cấu hình môi trường sản xuất không?
Có. Định dạng chỉ thay đổi khoảng trắng và các chi tiết bề ngoài. Cấu trúc dữ liệu được phân tích trước và sau khi định dạng là giống hệt nhau. Nếu công cụ định dạng gặp đầu vào không hợp lệ, nó báo lỗi thay vì tạo ra đầu ra bị lỗi. Bạn có thể xác minh điều này bằng cách phân tích cả hai phiên bản và so sánh các đối tượng kết quả.
TOML khác JSON như thế nào?
TOML hỗ trợ chú thích, kiểu ngày-giờ gốc, chuỗi nhiều dòng và tiêu đề bảng để tổ chức dữ liệu lồng nhau. JSON không có những tính năng này. Định dạng được thiết kế cho các tệp cấu hình mà con người đọc và chỉnh sửa. JSON được thiết kế cho trao đổi dữ liệu giữa các chương trình. Bạn không thể dùng chú thích trong JSON, điều này khiến việc ghi chú các quyết định cấu hình nội tuyến trở nên khó hơn.
Tôi có thể định dạng TOML từ dòng lệnh không?
Có. Taplo là CLI định dạng TOML được sử dụng rộng rãi nhất. Cài đặt bằng cargo install taplo-cli hoặc npm install -g @taplo/cli, sau đó chạy taplo fmt để định dạng tất cả tệp .toml trong dự án. Nó hỗ trợ cấu hình qua tệp taplo.toml hoặc .taplo.toml cho các quy tắc tùy chỉnh.
Định dạng có giữ nguyên chú thích trong tệp TOML không?
Công cụ định dạng trên trình duyệt này phân tích đầu vào thành cấu trúc dữ liệu rồi tuần tự hóa lại, quá trình này loại bỏ chú thích. Nếu bạn cần giữ nguyên chú thích, hãy dùng công cụ nhận thức CST như Taplo (CLI) hoặc toml-edit (thư viện Rust), vốn hoạt động trên cây cú pháp cụ thể thay vì dữ liệu đã phân tích.
Sự khác biệt giữa định dạng TOML và xác thực TOML là gì?
Xác thực kiểm tra xem tệp có tuân thủ đặc tả hay không và báo lỗi nếu không. Định dạng đi xa hơn một bước: nó xác thực đầu vào, sau đó viết lại với kiểu dáng chuẩn hóa. Mọi thao tác định dạng đều bao gồm xác thực là bước đầu tiên, vì vậy một tệp được định dạng thành công được đảm bảo là hợp lệ.
Những dự án nào sử dụng TOML làm định dạng cấu hình?
Cargo của Rust (Cargo.toml), hệ sinh thái đóng gói Python (pyproject.toml), trang tĩnh Hugo, Deno (deno.toml), Cloudflare Workers (wrangler.toml), InfluxDB, Telegraf và Starship prompt đều dùng TOML. Định dạng này trở nên phổ biến sau khi Rust áp dụng nó làm tiêu chuẩn cho package manifest vào năm 2015.