Changelog
Changelog goes here! Please add your entry to the bottom of one of the lists below!
Unreleased
2.3.0 (September 22, 2026)
Add an
as_optional_pathaccessor for optional path configuration values.
2.2.1 (January 28, 2026)
Narrow
Pathtemplate shorthand handling to concretepathlib.Pathvalues for more accurate type checking.Fix
confuse.Pathwhich now points toconfuse.templates.Pathinstead ofpathlib.Path.
Other changes
Require
typing_extensionson older Python versions (and usetypingon newer versions). [#189](https://github.com/beetbox/confuse/issues/189)
2.2.0 (January 28, 2026)
New features
Ship inline type information via a
py.typedmarker for type checkers.Tighten and extend type hints across the public API, templates, and sources.
Other changes
Drop support for Python 3.9.
Add strict mypy configuration and align tests/examples with the new typing.
Include
docsandtestsdirectory in source distributions.
2.1.0 (October 27, 2025)
New features
Added typehints to
as_*functions which allows for enhanced type checking and IDE support.
Other changes
Drop support for versions of Python below 3.9.
Removed ‘u’ prefix from string literals for Python 3.0+ compatibility.
Removed a number of python 2 leftovers.
Removed deprecated
pkgutil.get_loaderusage in favor ofimportlib.util.find_specfor better compatibility with modern Python versions.Added a minimal release workflow for GitHub Actions to automate the release process.
Added support for Python 3.13 and Python 3.14.
Modernized package and tests setup.
2.0.1 (April 01, 2023)
Other changes
Remove a
<4Python version requirement bound.
2.0.0 (July 16, 2022)
Other changes
Drop support for versions of Python below 3.6.
1.7.0 (November 27, 2021)
New features
Add support for reading configuration values from environment variables (see
EnvSource).
Bug fixes
Resolve a possible race condition when creating configuration directories.
1.6.0 (September 26, 2021)
New features
A new
Configuration.reloadmethod makes it convenient to reload and re-parse all YAML files from the file system.
1.5.0 (June 28, 2021)
New features
A new
MappingValuestemplate behaves likeSequencebut for mappings with arbitrary keys.A new
Optionaltemplate allows other templates to be null.Filenametemplates now have an option to resolve relative to a specific directory. Also, configuration sources now have a corresponding global option to resolve relative to the base configuration directory instead of the location of the specific configuration file.
Bug fixes
There is a better error message for
Sequencetemplates when the data from the configuration is not a sequence.
1.4.0 (November 21, 2020)
Bug fixes
pathlib.PurePathobjects can now be converted toPathtemplates.AttrDictnow properly supports (over)writing attributes via dot notation.
1.3.0 (June 27, 2020)
New features
When using
Noneas a template, the result is a value whose default isNone. Previously, this was equivalent to leaving the key off entirely, i.e., a template with no default. To get the same effect now, useconfuse.REQUIREDin the template.
Other changes
Break up the
confusemodule into a package. (All names should still be importable fromconfuse.)
1.2.0 (June 26, 2020)
New features
floatvalues (like4.2) can now be used in templates (just like42works as aninttemplate).It’s now possible to provide custom PyYAML
Loaderobjects for parsing config files.
Bug fixes
The
FilenameandPathtemplates now correctly accept default values.
1.1.0 (April 08, 2020)
New features
A new
Pathtemplate produces a pathlib Path object.String templates support environment variable expansion.
Other changes
Drop support for Python 3.4 (following in the footsteps of PyYAML).
1.0.0 (May 30, 2019)
Other changes
The first stable release, and the first that beets depends on externally.