Skip to main content
dature

PyPI Supported Python versions Documentation License
CI CodeQL Dependency Review Coverage
Monthly downloads Commits since latest release Last commit date Last release date

Documentation | Changelog

Type-safe configuration loader for Python dataclasses. Load config from YAML, JSON, TOML, INI, ENV files, environment variables, Docker secrets, CLI arguments, HashiCorp Vault, Consul, etcd, Apache ZooKeeper, AWS SSM, AWS Secrets Manager, Azure App Configuration, Azure Key Vault, and GCP Secret Manager — with automatic type conversion, validation, and human-readable error messages.

Installation

pip install dature

With optional format support:

pip install dature[yaml]       # YAML (ruamel.yaml)
pip install dature[json5]      # JSON5
pip install dature[toml]       # TOML (toml_rs)
pip install dature[vault]      # HashiCorp Vault (hvac)
pip install dature[consul]     # Consul (py-consul)
pip install dature[etcd]       # etcd (etcd3gw)
pip install dature[zookeeper]  # Apache ZooKeeper (kazoo)
pip install dature[aws]        # AWS SSM & Secrets Manager (boto3)
pip install dature[azure-appconfig] # Azure App Configuration
pip install dature[azure-keyvault]  # Azure Key Vault
pip install dature[gcp]        # GCP Secret Manager
pip install dature[secure]     # Secret detection heuristics
pip install dature[type-stubs] # Type stubs for the integrations above (mypy/pyright users)

Quick Start

from dataclasses import dataclass

import dature


@dataclass
class Config:
    host: str
    port: int
    debug: bool = False


config = dature.load(dature.Yaml12Source(file="config.yaml"), schema=Config)

Key Features

  • Multiple sources — YAML, JSON, JSON5, TOML, INI, ENV, environment variables, Docker secrets, CLI args (argparse or your own), HashiCorp Vault, Consul, etcd, Apache ZooKeeper, AWS SSM, AWS Secrets Manager, Azure App Configuration, Azure Key Vault, GCP Secret Manager
  • Merging — combine multiple sources with configurable strategies ("last_wins", "first_wins", "raise_on_conflict")
  • Validation — Annotated field validators, root validators, __post_init__ support
  • Naming — automatic field name mapping (snake_case ↔ camelCase ↔ UPPER_SNAKE etc.)
  • Secret masking — automatic masking in error messages and logs by field type, name, or heuristic
  • ENV expansion — $VAR, ${VAR:-default} substitution in all file formats
  • Special types — SecretStr, ByteSize, PaymentCardNumber, URL, Base64UrlStr
  • Debug report — debug=True shows which source provided each field value
  • Decorator mode — @dature.load(meta) auto-loads config on dataclass instantiation with caching
  • Shared reads — Source(shared_read=...) shares one raw file read / remote fetch across multiple prefix=-bound schemas
  • CLI — dature validate and dature inspect console commands for CI and debugging
  • Cross-source refs & conditional sources — reference values across sources, activate sources based on environment
  • Extensible — plug in custom sources, type loaders, and remote backends via SourceProtocol

See the documentation for detailed guides and API reference.

Requirements

  • Python >= 3.12
  • adaptix >= 3.0.0b11

Development

git clone https://github.com/reagento/dature.git
cd dature
uv sync --all-extras --all-groups

Run tests:

uv run pytest tests/ -v

Lint and type check:

uv run prek run --all-files

Build docs locally:

uv run mkdocs serve

Changelog

Each PR must include a towncrier fragment in the changes/ directory:

# Format: changes/<issue-or-pr-number>.<type>
echo "Added support for YAML anchors." > changes/42.feature

Available <type> values:

Type Description
feature New features
bugfix Bug fixes
doc Documentation improvements
removal Deprecations and removals
misc Other changes

Use +<description> instead of an issue number for changes without a linked issue:

echo "Fixed typo in error message." > changes/+fix-typo.bugfix.md

Releasing

  1. Run the Release workflow and choose bump type (patch / minor / major). The next version is calculated from the latest git tag automatically.
  2. The workflow builds the changelog from fragments and creates a PR.
  3. Merge the PR — CI automatically creates the tag, publishes to PyPI, creates a GitHub Release, and updates docs.

License

Apache License 2.0

Metadata

Release files for dature 1.6.1

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

Source distribution (sdist)

Source distribution for dature 1.6.1
File Size Uploaded
dature-1.6.1.tar.gz 646.4 kB Details

Built distribution (wheel)

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

Total release size: 866.9 kB

Release files / dature-1.6.1.tar.gz

Download URL dature-1.6.1.tar.gz
Size 646.4 kB
Tags Source
SHA-256 checksum
How to use checksums
52b36d287bf2a68e1c9096c22b8b55ba98359dc69aee59d1f9baa11d41fb8741
BLAKE2b-256 checksum
How to use checksums
8109be02fbd9b7489596c77eb253028f1b4634e948ce6757309f54cdcdaecae1
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 16, 2026.

Transparency log

Release files / dature-1.6.1-py3-none-any.whl

Download URL dature-1.6.1-py3-none-any.whl
Size 220.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a23a1ae6b816e7302210962184c60ef1e04c2b7957fd7751e8074a54f1039ef8
BLAKE2b-256 checksum
How to use checksums
edd423b510257344f2642458174d0d475b07402b5733133ac8c6944f9dd867b5
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 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.6.1 This release

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.22.4

2 release files

0.22.0

2 release files

0.19.1

2 release files

0.19.0

2 release files

0.18.0

2 release files

0.17.1

2 release files

0.17.0

2 release files

0.16.0

2 release files

0.15.3

2 release files

0.15.2

2 release files

0.15.1

2 release files

0.15.0

2 release files

0.14.5

2 release files

0.14.4

2 release files

0.14.3

2 release files

0.14.2

2 release files

0.14.1

2 release files

0.14.0

2 release files

0.13.0

2 release files

0.12.4

2 release files

0.12.3

2 release files

0.12.2

2 release files

0.12.1

2 release files

0.12.0

2 release files

0.10.0

2 release files

0.9.1

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.2.0

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