Skip to content

Building documents

From scratch

from tomlrt import Document, dumps

doc = Document()
doc["title"] = "example"
print(dumps(doc))
# title = "example"

From a dict

Pass a mapping to populate the document recursively:

from tomlrt import Document, dumps

data = {
    "project": {
        "name": "demo",
        "version": "0.1.0",
        "dependencies": ["requests>=2"],
    },
    "tool": {"ruff": {"line-length": 88}},
}

doc = Document(data)
print(dumps(doc))
[project]
name = "demo"
version = "0.1.0"
dependencies = ["requests>=2"]

[tool.ruff]
line-length = 88

Nested mappings become [section] blocks (not inline tables); lists of mappings become [[array.of.tables]] blocks; everything else is an ordinary key-value assignment.

Existing table and array views contribute their available comments and formatting, including annotated tables inside lists or standalone AoT values. Construction copies those views without taking ownership of the originals; assignment attaches free views live instead.

Once you have a Document — whether constructed here or returned by tomlrt.loads / tomlrt.load — see Editing documents for how to mutate it.