TOML — konfiguratsiya ma’lumotlarini inson o‘qishi va tahrirlashi uchun qulay shaklda yozishga mo‘ljallangan matnli format. To‘liq nomi Tom’s Obvious, Minimal Language. TOML oddiy kalit-qiymat yozuvlari, bo‘limlar, massivlar va aniq ma’lumot turlarini qo‘llab-quvvatlaydi.
TOML ko‘pincha dastur sozlamalari, package manifestlari, build vositalari va server konfiguratsiyalarida ishlatiladi. U YAMLga qaraganda sintaksisi qat’iyroq, JSONga qaraganda esa inson uchun qulayroq bo‘lishga intiladi.
Kalit va qiymat
Eng oddiy yozuv:
title = "UzbekDevs"
port = 8000
active = true
Kalit chap tomonda, qiymat o‘ng tomonda yoziladi. Tenglik belgisi ikki qismni ajratadi.
Bir kalit ayni scope ichida ikki marta e’lon qilinmasligi kerak.
Matn qiymatlari
Oddiy matn qo‘shtirnoq ichida yoziladi:
name = "Farrukh Sherkulov"
Literal string bir tirnoq bilan yozilishi mumkin:
path = 'C:\data\files'
Basic string escape sequence’larni qayta ishlaydi. Literal string esa ko‘p belgini o‘z holicha saqlaydi.
Ko‘p qatorli matn
Uchta qo‘shtirnoq ko‘p qatorli basic string yaratadi:
description = """
Birinchi qator
Ikkinchi qator
"""
Uchta bir tirnoq literal ko‘p qatorli matn uchun ishlatiladi.
Bu certificate, SQL bo‘lagi yoki uzun tavsif saqlashda qulay bo‘lishi mumkin.
Sonlar
TOML integer va floating-point qiymatlarni alohida taniydi:
workers = 4
ratio = 0.75
Sonni o‘qishni yengillashtirish uchun underscore ishlatilishi mumkin:
max_size = 1_048_576
Hexadecimal, octal va binary integer yozuvlari ham qo‘llab-quvvatlanadi.
Boolean
Boolean faqat kichik harfli aniq qiymatlar bilan yoziladi:
debug = false
enabled = true
yes, no, on yoki off TOML boolean qiymati hisoblanmaydi.
Bu parserlar orasidagi noaniqlikni kamaytiradi.
Sana va vaqt
TOML sana hamda vaqt uchun alohida turlarga ega.
Misollar:
created_at = 2026-07-14T09:30:00+05:00
release_date = 2026-07-14
start_time = 09:30:00
Offsetli datetime va local datetime farqlanadi.
Application timezone va conversionni aniq boshqarishi kerak.
Table
Bo‘lim yoki obyekt table orqali yoziladi:
[database]
host = "localhost"
port = 5432
name = "uzbekdevs"
database.host va database.port bitta nested obyektga tegishli.
Table nomi nuqta orqali ichma-ich yozilishi mumkin:
[server.tls]
enabled = true
Inline table
Kichik obyekt bir qatorda yozilishi mumkin:
point = { x = 10, y = 20 }
Inline table ko‘p qatorli bo‘limga qaraganda ixcham.
Murakkab va tez-tez tahrirlanadigan obyekt uchun odatiy table tushunarliroq.
Array
Bir turdagi yoki parser qo‘llab-quvvatlaydigan qiymatlar massivda yoziladi:
ports = [80, 443, 8000]
roles = ["viewer", "editor"]
Array ko‘p qatorga bo‘linishi va oxirgi elementdan keyin vergulga ruxsat berilishi mumkin.
Nested array ham mavjud.
Array of tables
Bir xil tuzilishga ega obyektlar ro‘yxati:
[[servers]]
name = "api-1"
host = "10.0.0.11"
[[servers]]
name = "api-2"
host = "10.0.0.12"
Har [[servers]] yangi obyekt yaratadi.
Bu service, dependency yoki mirror ro‘yxatini saqlashda ishlatiladi.
Izoh
# belgidan keyingi qism izoh:
port = 8000 # HTTP port
Izoh parser natijasiga kirmaydi.
Secret, parol yoki vaqtinchalik token izohga yozilmaydi, chunki fayl bilan birga tarqaladi.
Dotted key
Nested qiymat table ochmasdan yozilishi mumkin:
database.host = "localhost"
database.port = 5432
Dotted key va table yozuvi bir documentda chalkash ishlatilsa duplicate yoki conflict hosil bo‘lishi mumkin.
Bir xil loyiha uchun yagona uslub tanlanadi.
Parser qat’iyligi
TOML parser noto‘g‘ri sintaksisni jim talqin qilish o‘rniga xato qaytarishga intiladi.
Muammolar:
- duplicate key;
- noto‘g‘ri sana;
- yopilmagan string;
- bir qiymatni ikki type sifatida e’lon qilish;
- table va scalar to‘qnashuvi.
Bu konfiguratsiya xatosini erta aniqlashga yordam beradi.
TOML va JSON
JSON API va machine-to-machine almashinuvda keng tarqalgan.
TOML esa inson tahrirlaydigan configuration uchun qulay:
- izoh mavjud;
- sana-vaqt turi mavjud;
- table sintaksisi;
- kamroq qavs;
- qat’iy scalar turlari.
JSON parserlari va ecosystemi kengroq.
TOML va YAML
YAML anchoring, custom tag va murakkab structure bo‘yicha kuchliroq.
TOML sintaksisi kichikroq va parserlar orasida noaniqlik kamroq.
TOML juda chuqur document yoki markup uchun emas, asosan configuration uchun yaratilgan.
Schema
TOML formatining o‘zi application fieldlarini majburiy belgilamaydi.
Application:
ni alohida schema yoki validation orqali tekshiradi.
Sintaksis valid bo‘lishi configuration semantik jihatdan to‘g‘ri degani emas.
Security
TOML fayl ichida database paroli yoki API token bo‘lishi mumkin.
Himoya:
- repositoryga secret yozmaslik;
- file permission;
- secret manager;
- environment-specific file;
- logda redaction;
- safe error output.
Untrusted userga arbitrary TOML orqali applicationning barcha settinglarini o‘zgartirishga ruxsat berilmaydi.
Environment bo‘yicha sozlama
Development, test va production uchun alohida TOML fayllar ishlatilishi mumkin. Umumiy qiymatlar bitta bazaviy faylda, environmentga xos farqlar esa alohida qatlamda saqlanadi. Merge tartibi aniq bo‘lishi kerak: qaysi fayl oldingi qiymatni almashtirishi va unknown key bilan nima sodir bo‘lishi hujjatlashtiriladi. Secretlar environment file ichida qolsa ham repositoryga kiritilmaydi.
Bog‘liq tushunchalar
Tom’s Obvious Minimal Language, Configuration file, Key-value, Table, Array, Data serialization, YAML, JSON, Schema validation, Package manifest