zen-config
Simple configuration loader for python.
Compared to other solutions, the goal is to bring:
- simple usage for simple use cases
- multiple format support
- use objects rather than plain dict to interact with the config
- optionally use the power of pydantic for validation
Simple usage
If you don't want to configure much, pass the config path through the env variable CONFIG, and simply use:
from dataclasses import dataclass
from zenconfig import Config
@dataclass
class MyConfig(Config):
some_key: str
some_optional_key: bool = False
cfg = MyConfig(some_key="hello")
cfg.save()
...
cfg = MyConfig.load()
cfg.some_optional_key = True
cfg.save()
...
cfg.clear()
Config file loading
When creating your config, you can specify at least one of those two attributes:
ENV_PATHthe environment variable name containing the path to the config file, defaults toCONFIGPATHdirectly the config path
[!TIP] When supplying both, if the env var is not set, it will use
PATH.
User constructs will be expanded.
If the file does not exist it will be created.
You can specify the file mode via Config.FILE_MODE.
The config can be loaded from multiple files, see fnmatch for syntax. Note that you will not be able to save if not handling exactly one file.
Read only
If you do not want to be able to modify the config from your code, you can use ReadOnlyConfig.
Supported formats
Currently, those formats are supported:
- JSON
- YAML - requires the
yamlextra - TOML - requires the
tomlextra
The format is automatically inferred from the config file extension. When loading from multiple files, files can be of multiple formats.
Other formats can be added by subclassing Format: Config.register_format(MyFormat(...), ".ext1", ".ext2").
[!TIP] You can re-register a format to change dumping options.
Supported schemas
Currently, those schemas are supported:
- plain dict
- dataclasses
- pydantic models - requires the
pydanticextra - attrs - requires the
attrsextra
The schema is automatically inferred from the config class.
Other schemas can be added by subclassing Schema: Config.register_schema(MySchema(...)).
You can also force the schema by directly overriding the SCHEMA class attribute on your config.
This can be used to disable auto selection, or pass arguments to the schema instance.
[!WARNING] When using pydantic, you have to supply the
ClassVartype annotations to all class variable you override otherwise pydantic will treat those as its own fields and complain.
Conversions
For all schemas and formats, common built in types are handled when dumping.
[!IMPORTANT] Keep in mind that only
attrsandpydanticsupport casting when loading the config.
You can add custom encoders with Config.ENCODERS.
For pydantic, stick with the standard way of doing it.
Contributing
See contributing guide.
Metadata
Release files for zenconfig 2.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| zenconfig-2.2.0.tar.gz | 7.9 kB | With provenance | Details for zenconfig-2.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| zenconfig-2.2.0-py3-none-any.whl | Python 3 | none | any | Details for zenconfig-2.2.0-py3-none-any.whl |
Total release size: 21.2 kB
Release files / zenconfig-2.2.0.tar.gz
| Download URL | zenconfig-2.2.0.tar.gz |
|---|---|
| Size | 7.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f5c8b7470c2288fe3c44af50b83552f659380479834247a670ea3b9fc95d888e
|
|
BLAKE2b-256 checksum How to use checksums |
1dbb969caeead72816d4036597ef76dc0254010c170689ddd5a82dd24839d8ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 17, 2025.
Transparency logRelease files / zenconfig-2.2.0-py3-none-any.whl
| Download URL | zenconfig-2.2.0-py3-none-any.whl |
|---|---|
| Size | 13.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dffc90a4ad8a89654bed617383227ef59b7be0bc913e5254faa243df5eca0303
|
|
BLAKE2b-256 checksum How to use checksums |
56b91336db716ebb4b7964f3bc8344134f16b739e47c933c72dbe210b0469ed2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 17, 2025.
Transparency logSecurity for zenconfig 2.2.0
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for zenconfig-2.2.0.tar.gz
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 17, 2025.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.