Terakhir diperbarui: April 2026
Apa itu TOML Formatting?
TOML (Tom's Obvious Minimal Language) adalah format file konfigurasi yang dibuat oleh Tom Preston-Werner pada tahun 2013. Format ini dipetakan langsung ke hash table dan menggunakan pengetikan eksplisit untuk semua nilai. Sebuah TOML formatter mengambil TOML mentah atau bergaya tidak konsisten, lalu men-serialize ulang dengan spasi seragam, indentasi yang tepat, dan urutan kunci yang kanonik. Hasilnya adalah file yang mengikuti konvensi yang sama di seluruh proyek Anda, sehingga perubahan konfigurasi lebih mudah ditinjau dalam diff.
Spesifikasi TOML v1.0.0, yang diselesaikan pada Januari 2021, mendefinisikan tata bahasa dengan cukup ketat sehingga setiap parser yang patuh menghasilkan struktur data yang identik dari input yang sama. Formatting tidak mengubah konten semantik file TOML. Hanya menyesuaikan whitespace, pengelompokan kunci, dan gaya pengutipan. Ini berarti Anda dapat memformat file TOML dengan bebas tanpa khawatir merusak perilaku aplikasi.
Tidak seperti JSON, TOML mendukung komentar, tipe date-time native, dan beberapa bentuk string (dasar, literal, dan multi-baris). Formatter yang baik mempertahankan komentar dan menghormati perbedaan antara inline table dan header table standar. Formatter juga menangani array of tables dengan benar, menjaga pengelompokan bagian tetap utuh sehingga file tetap mudah dibaca oleh manusia maupun parser yang menggunakannya.
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"
Mengapa Menggunakan TOML Formatter?
File konfigurasi mengalami penyimpangan gaya seiring berbagai anggota tim mengeditnya dari waktu ke waktu. Tab bercampur dengan spasi, beberapa kunci dikutip secara tidak perlu, dan bagian table kehilangan pengelompokan visualnya. TOML formatter menormalkan semua ini dalam satu proses.
Kasus Penggunaan TOML Formatter
Referensi Sintaks TOML
TOML memiliki sekumpulan konstruksi yang kecil. Tabel di bawah ini mencantumkan setiap elemen struktural yang didefinisikan dalam spesifikasi TOML v1.0.0. Sebuah formatter menerapkan spasi dan pengelompokan yang konsisten untuk semua elemen ini.
| Sintaks | Nama | Catatan |
|---|---|---|
| key = "value" | Basic key-value pair | Keys are bare or quoted; values are typed |
| [table] | Standard table | Creates a named section (hash table) |
| [a.b.c] | Dotted table | Shorthand for nested tables |
| [[array]] | Array of tables | Each [[name]] block appends to an array |
| key = """...\n""" | Multi-line basic string | Allows newlines, escapes processed |
| key = '''...\n''' | Multi-line literal string | Allows newlines, no escape processing |
| # comment | Comment | Extends to end of line; not in JSON output |
| {inline = true} | Inline table | Single-line table, no newlines allowed |
TOML vs JSON vs YAML
TOML, JSON, dan YAML memecahkan masalah yang tumpang tindih namun dengan pertukaran yang berbeda.
| Fitur | TOML | JSON | YAML |
|---|---|---|---|
| Komentar | # komentar baris | Tidak didukung | # komentar baris |
| Nilai bertipe | String, int, float, bool, datetime | String, number, bool, null | Inferensi (rawan kesalahan) |
| Nesting | Header [table] | Kurung kurawal | Berbasis indentasi |
| Keketatan spesifikasi | Ketat (satu hasil parse) | Ketat (RFC 8259) | Longgar (beberapa parse valid) |
| Dukungan date/time | 4 tipe native | Tidak ada (gunakan string) | Implisit (rapuh) |
| Trailing comma | Tidak diizinkan | Tidak diizinkan | T/A (tidak ada koma) |
Contoh Kode
Contoh-contoh di bawah ini memformat TOML secara terprogram dalam berbagai bahasa dan alat. Masing-masing membaca file, mem-parse-nya, lalu menulis versi yang terformat.
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.tomlimport 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.tomlpackage 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())
}# 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