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.9.27

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.9.27
File Size Uploaded
kaava-2026.9.27.tar.gz 68.8 kB Details

Built distribution (wheel)

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

Total release size: 115.9 kB

Release files / kaava-2026.9.27.tar.gz

Download URL kaava-2026.9.27.tar.gz
Size 68.8 kB
Tags Source
SHA-256 checksum
How to use checksums
7b3a5ffc4fc799086cd70b88ebf2756ffd55b6b9dd2f43a598a13e83fcf46928
BLAKE2b-256 checksum
How to use checksums
7cf13bbbbaedfa74c3bcc6098c175f6a2f10ee375a470f8f4545cb3aa31d9704
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.9.27-py3-none-any.whl

Download URL kaava-2026.9.27-py3-none-any.whl
Size 47.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
64d398667c0c36c53f45c675bed8d27c1735bec95f564ad1446fcc8a0f6b6be1
BLAKE2b-256 checksum
How to use checksums
8fb4ccadf45b31fa493e88e001f115b0115af947cf5010bb8c9ce417c5847ab3
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.9.27 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