Son güncelleme: Nisan 2026
TOML Biçimlendirme Nedir?
TOML (Tom's Obvious Minimal Language), Tom Preston-Werner tarafından 2013 yılında oluşturulan bir yapılandırma dosyası formatıdır. Doğrudan bir karma tablosuna eşlenir ve tüm değerler için açık tür belirtimi kullanır. Bir TOML biçimlendirici, ham ya da tutarsız biçimlendirilmiş TOML'u alarak düzgün aralık, uygun girinti ve standart anahtar sıralamasıyla yeniden serileştirir. Sonuç, tüm projede aynı kuralları izleyen bir dosyadır; bu da yapılandırma değişikliklerini diff'lerde incelemeyi kolaylaştırır.
Ocak 2021'de kesinleştirilen TOML v1.0.0 spesifikasyonu, dilbilgisini o kadar kesin biçimde tanımlar ki herhangi bir uyumlu ayrıştırıcı aynı girdiden özdeş bir veri yapısı üretir. Biçimlendirme, bir TOML dosyasının anlamsal içeriğini değiştirmez. Yalnızca boşlukları, anahtar gruplandırmasını ve tırnak stilini düzenler. Bu sayede uygulamanızın davranışını bozmadan TOML dosyalarını özgürce biçimlendirebilirsiniz.
JSON'ın aksine TOML; yorumları, yerel tarih-saat türlerini ve birden fazla dize biçimini (temel, değişmez ve çok satırlı) destekler. İyi bir biçimlendirici yorumları korur ve satır içi tablolar ile standart tablo başlıkları arasındaki ayrıma saygı gösterir. Tablo dizilerini de doğru şekilde işler; bölüm gruplandırmasını bozulmaz bırakarak dosyanın hem insanlar hem de ayrıştırıcılar için okunabilir kalmasını sağlar.
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 Biçimlendirici Neden Kullanmalısınız?
Yapılandırma dosyaları, farklı ekip üyeleri tarafından zaman içinde düzenlendikçe stil tutarsızlıkları birikir. Sekme ve boşluklar karışır, bazı anahtarlar gereksiz yere tırnak içine alınır, tablo bölümleri görsel gruplandırmasını yitirir. Bir TOML biçimlendirici tüm bunları tek bir işlemde düzeltir.
TOML Biçimlendirici Kullanım Senaryoları
TOML Sözdizimi Başvurusu
TOML'un küçük bir yapı kümesi vardır. Aşağıdaki tablo, TOML v1.0.0 spesifikasyonunda tanımlanan her yapısal öğeyi listeler. Biçimlendirici bunların tamamına tutarlı boşluk ve gruplandırma uygular.
| Sözdizimi | Ad | Notlar |
|---|---|---|
| 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, JSON ve YAML Karşılaştırması
TOML, JSON ve YAML örtüşen sorunları çözer ancak farklı ödünleşimler yapar.
| Özellik | TOML | JSON | YAML |
|---|---|---|---|
| Yorumlar | # satır yorumları | Desteklenmiyor | # satır yorumları |
| Türlendirilmiş değerler | String, int, float, bool, datetime | String, number, bool, null | Çıkarımlı (hataya açık) |
| İç içe yapı | [tablo] başlıkları | Süslü parantezler | Girinti tabanlı |
| Spesifikasyon katılığı | Katı (tek ayrıştırma sonucu) | Katı (RFC 8259) | Esnek (birden fazla geçerli ayrıştırma) |
| Tarih/saat desteği | 4 yerel tür | Yok (string kullanın) | Örtülü (güvenilmez) |
| Sondaki virgüller | İzin verilmiyor | İzin verilmiyor | Geçersiz (virgül yok) |
Kod Örnekleri
Aşağıdaki örnekler farklı dil ve araçlarda TOML'u programatik olarak biçimlendirir. Her biri bir dosyayı okur, ayrıştırır ve biçimlendirilmiş sürümünü yazar.
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