Skip to main content

tomlclass

tomlclass

Lossless TOML editing and typed configuration in one zero-dependency package.

Change one value in a config file without breaking a single comment; declare schemas as Python classes to get commented templates, aggregated validation and diff-based write-back.

PyPI Python CI License Ruff



Features

  • Lossless editing engine: full-type TOML 1.0/1.1 parse and write-back; all 709 toml-test 1.0 cases pass. Untouched documents render byte-identical to input
  • One-line updates: tomlclass.update("app.toml", {"server.port": 9090}) — read, change, atomically write back; comments, ordering and formatting survive everywhere else
  • Typed config: declare the schema as classes — docstrings become template comments, validation aggregates all errors with each field's documented intent, defaults are merged in memory and never written back
  • Comment operations: read, replace and delete comments per key; schema descriptions can be injected as comments (three strategies)
  • tomllib compatible: loads / load follow the stdlib calling convention — migrating costs nothing

Why not tomlkit

tomlkit is the de facto standard for lossless editing, and this project's engine was built against it as a baseline. Where tomlclass wins:

Dimension tomlkit 0.15 tomlclass 0.1
Parse speed (same machine) baseline 5.8–6.4× faster
Getting a plain dict parse(dumps(doc)) round trip to_dict() builds it directly, zero round trip
Comment operations buried in style objects, no per-key API doc.comment(key) / set_comment as first-class citizens
Schema / template / validation none — assemble it yourself built into Config (template, aggregate validation, env overrides, migration)
Resident memory baseline 0.67×

Source: performance baseline (same machine, same iteration count).

Installation

pip install tomlclass

Usage

Change one value, keep everything else

import tomlclass

tomlclass.update("pyproject.toml", {"project.version": "1.0.0"})
# only that line changed — comments, ordering and formatting all intact

Editing a TOML file (full control)

import tomlclass

doc = tomlclass.parse(text)
doc["project"]["version"] = "1.0.0"
doc["project"]["dependencies"].append("rich>=13.0")  # spliced in place, comments kept
text = doc.dumps()                                   # only touched lines change

Declarative config

from tomlclass import Config

class Server(Config):
    """
    HTTP server settings.

    host:
        Address to bind.
    port:
        Port to listen on.
    """

    host: str = "127.0.0.1"
    port: int = 8000


server = Server.load("server.toml")  # read + validate + merge defaults
server.port = 9000
server.save("server.toml")           # only changed keys are written

Documentation

  • Engine — parse, edit, update(), comment API, errors
  • Config — schema declaration, template, load/save semantics, validation errors
  • Comments — comment ownership, injection modes
  • Examples — end-to-end scenarios
  • Performance — measured baseline

Docs are also available in 简体中文, 繁體中文, 日本語 and Русский.

Requirements

Python ≥ 3.10, no third-party dependencies.

License

MIT

Metadata

Release files for tomlclass 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tomlclass 0.1.2
File Size Uploaded
tomlclass-0.1.2.tar.gz 263.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tomlclass 0.1.2
File Interpreter ABI Platform
tomlclass-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 296.8 kB

Release files / tomlclass-0.1.2.tar.gz

Download URL tomlclass-0.1.2.tar.gz
Size 263.8 kB
Tags Source
SHA-256 checksum
How to use checksums
06ef4c8b3986c30d5ee5afa8159285e286043f23cd871c4eab89c94ad0f55542
BLAKE2b-256 checksum
How to use checksums
592657d29d9722d0760b84807f7941235f7fba20caac2d76edf6990b2c2407cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / tomlclass-0.1.2-py3-none-any.whl

Download URL tomlclass-0.1.2-py3-none-any.whl
Size 33.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6096eab8ce7af19c046b75a26d35bc94ad2491d3285e91504dd508003ccbfe3c
BLAKE2b-256 checksum
How to use checksums
eca67769455618c31423570ade0648defc4a45836a274c3e10c7eb923db0a571
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.1

2 release files

0.2.0

2 release files

0.1.3

2 release files

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page