Skip to main content

kaava

Load typed Python configuration from YAML, TOML, or JSON into dataclasses, with validation, source tracing, environment-variable overlays, and a diagnostic CLI.

Requires Python 3.11 or later. YAML support uses ruamel.yaml (default) or PyYAML; TOML and JSON use the standard library.

Install

pip install kaava

Quickstart

Define your configuration shape as a plain dataclass and call load().

import dataclasses
from kaava import conf_field, load


@dataclasses.dataclass
class DBConfig:
    host: str = conf_field(description='database host')
    port: int = conf_field(default=5432)


@dataclasses.dataclass
class AppConfig:
    name: str = conf_field(description='application name')
    db: DBConfig = conf_field(description='database connection')
    debug: bool = conf_field(default=False)


cfg = load(AppConfig, 'config.yaml')
print(cfg.name, cfg.db.host, cfg.db.port)

config.yaml:

name: myapp
db:
  host: localhost

Fields with no default or default_factory are required. Nested dataclasses map to YAML mappings and are built recursively. load() raises on the first error encountered; use validate() or load_valid() to collect all errors.

For a quick feature-by-feature tour, see quickstart. For a step-by-step tutorial that builds a real command-line tool from scratch, see tutorial.

Learn more

kaava's man pages are installable locally with kaava eject man (see man kaava) or browsable under docs/man/:

  • man kaava -- the CLI: doctor, explain, validate, eject config, eject man, complete, version; options, exit codes, examples.
  • man 3 kaava -- the full library API: every exported function and type (load, doctor, explain, conf_field, the overlay builders, the error hierarchy), exact signatures and behavior.
  • man 5 kaava -- file formats: the CLI's own settings (~/.config/kaava/cli.yaml), the auto-discovery locations load() falls back to, and the dotenv format.
  • man 7 kaava -- the sources-then-overlays loading model end to end, a worked "adopting kaava in a new project" walkthrough, and how the CLI configures itself using the same load() any caller uses.

Companion CLI

The kaava command exposes the library's diagnostic functions as subcommands, against a dotted import path (module.path:ClassName):

kaava doctor          myapp.config:AppConfig config.yaml
kaava explain         myapp.config:AppConfig config.yaml
kaava validate        myapp.config:AppConfig config.yaml
kaava eject config    myapp.config:AppConfig

A remembered default target (see man 5 kaava) lets every command above drop the dataclass path and sources entirely: kaava doctor alone. Every command, subcommand, and long option accepts an unambiguous prefix (kaava ver for kaava version); calling kaava or kaava eject alone prints that command's own help and exits 0.

Design and requirements

Software Requirements Specification : KAA-SRS-001 -- requirements/

Software Design Description : KAA-SDD-001 -- design/

Both documents follow the MIL-STD-498 DID structure and are rendered into the documentation site alongside the tutorial and quickstart.

Changes

See releases/ for the release history, or releases/changes/ for the full detail behind each summary.

Complexity

The code base complexity is documented at complexity/.

Coverage

The test suite maintains 100% branch coverage. The HTML report (if generated) is in site/coverage/.

SBOM

Runtime dependency information is published in docs/sbom/ in SPDX 3.0 (JSON-LD) and CycloneDX 1.6 (JSON) formats. See docs/sbom/README.md for the component inventory and validation guide.

Metadata

Release files for kaava 2026.10.3

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

Source distribution (sdist)

Source distribution for kaava 2026.10.3
File Size Uploaded
kaava-2026.10.3.tar.gz 73.0 kB Details

Built distribution (wheel)

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

Total release size: 123.0 kB

Release files / kaava-2026.10.3.tar.gz

Download URL kaava-2026.10.3.tar.gz
Size 73.0 kB
Tags Source
SHA-256 checksum
How to use checksums
5bc198978e7c4241923c2bd50d6330b319381e2c93a1739797cc926bcad0be3b
BLAKE2b-256 checksum
How to use checksums
3761803cb4469bac89c8bbd714b0fc674034ccd854ca035ff18242da30ff2cbb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release files / kaava-2026.10.3-py3-none-any.whl

Download URL kaava-2026.10.3-py3-none-any.whl
Size 50.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c2549c0b3bbf456ee1d88eff5cb67107a03d5ac3cdcfac22d098d337e0542fce
BLAKE2b-256 checksum
How to use checksums
2a7a17c55fc5b84c6b5546142380e0afd2db693e733520d1d78b82eb954219e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release history Release notifications | RSS feed

This release

2026.10.3 This release

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