Current breaking changes
Hydra 1.4 and OmegaConf 2.4 are still under development. This page is a working inventory of changes currently known to require application updates. It is derived from their news fragments, may change, and may not yet be complete. The final release notes will be the authoritative list.
Hydra 1.4
- Python 3.7, 3.8, and 3.9 are no longer supported. Hydra requires Python 3.10 or newer.
- The unsupported Torchrun launcher and the
contribplugin area have been removed. - The experimental
on_compose_configcallback has been removed. It was never included in a stable Hydra release, but was available in Hydra 1.4 development versions from February 2025 through July 2026. - Parent traversal in Defaults List config paths is no longer accepted.
Hydra 1.1 compatibility behavior
version_base="1.1" is no longer accepted, and the following legacy behavior
has been removed:
- Omitting
config_pathno longer adds the calling directory to the config search path. hydra.job.chdirdefaults toFalse.- Config files using the
.ymlextension are rejected; use.yaml. - The old
{group: option, optional: true}Defaults List syntax is rejected; useoptional group: option. - Defaults List entries that replace Hydra config groups require the
overridekeyword. - Indexed Defaults List interpolations such as
${defaults.0.dataset}are no longer accepted. _group_and_name_are no longer expanded as symbolic package values.- The
strictargument tohydra.compose()has been removed. - ConfigStore schemas are no longer matched automatically by config name. Use explicit schema extension in the Defaults List.
Hydra 1.2 migration behavior
version_base="1.2" is no longer accepted, and the following migration paths
have been removed:
hydra.types.TargetConfhas been removed. Use a Structured Config with a_target_field.- The
hydra.experimentalcompose and initialization APIs have been removed. Import them fromhydra. hydra.job.chdir=nullis no longer accepted. Set it toTrueorFalse.- Direct callers of the internal
run_job()API must passhydra_context. - Third-party Sweepers must use the
HydraContextsupplied tosetup()to access the config loader. - Optuna Sweeper's deprecated
hydra.sweeper.search_spaceconfiguration has been removed. Usehydra.sweeper.params.
Instantiation
hydra.utils.instantiate()passes dataclass and attrs instances supplied as call-site arguments through unchanged instead of interpreting them as Structured Configs.hydra.utils.instantiate()resolves interpolations during recursive traversal instead of resolving the entire configuration before instantiation. With_recursive_=Falseand_convert_="none", Config containers are passed through without a final copy. See Instantiate resolution and call-site overrides.- Launcher and sweeper plugin configurations are instantiated non-recursively.
- Some security-sensitive modules can no longer be instantiated by default. This restriction is not a security boundary; do not rely on it to make untrusted configurations safe.
OmegaConf 2.4
- Python 3.6, 3.7, 3.8, and 3.9 are no longer supported. OmegaConf requires Python 3.10 or newer.
- Native tuples create immutable
TupleConfigvalues instead of mutableListConfigvalues, and conversion returns tuples instead of lists. See the OmegaConf tuple migration guide. OmegaConf.create(None)returnsNoneinstead of aDictConfigwrappingNone.OmegaConf.get_type()returnsNoneTypefor nodes containingNone, andNoneandNoneTypeannotations are validated.OmegaConf.resolve()raisesInterpolationToMissingValueErrorwhen an interpolation dereferences a missing (???) value instead of replacing the node with???.OmegaConf.to_container(..., resolve=True)resolves a custom resolver at most once per resolved node during a conversion pass. Code relying on repeated side effects from the same resolver may behave differently.- A backslash immediately before a key-path delimiter now escapes that delimiter. This changes the interpretation of key paths involving keys whose names end in a backslash.