Major features and improvements
- Added support for passing keyword arguments such as
use_cacheorreplacetoOmegaConf.register_new_resolver()when registering custom resolvers withOmegaConfigLoader: a resolver inCONFIG_LOADER_ARGS["custom_resolvers"]can now be given as a(callable, kwargs)tuple. A resolver that is already registered is skipped unlessreplace=Trueis passed. - Added the option to allow data to be injected at run time when using the
KedroServiceSession. - Added pre-loading of raw configuration in serving mode to improve request handling performance.
- Added node groups to the project snapshot. Each
PipelineSnapshothas agroupslist ofGroupSnapshotentries with the group's nodes, dependencies, inputs and outputs, also returned byGET /snapshot.get_project_snapshottakes agroup_byargument to choose the grouping strategy,GET /snapshottakes it as a query parameter, and eachPipelineSnapshotrecords it ingroup_by. - Added
kedro.inspection.validate_deployment_groupingto check a node grouping before deployment. It reports datasets kept in memory that are passed between groups, cycles between groups, and datasets passed between groups on local disk.
Bug fixes and other changes
- Fixed the project snapshot (
kedro inspectandGET /snapshot) listing parameter inputs such asparams:model_options.test_sizeandparametersas datasets when a dataset factory pattern, for example a catch-all{default}, matches their names. - Fixed MemoryDataset losing its empty sentinel identity after pickle/unpickle, which could cause load() to return the sentinel instead of raising DatasetError.
- Fixed
AttributeErrorwhen naming a node built from a callable object, such as a class instance with__call__, and no explicit name. The node name now falls back to the class name. - Fixed typed parameter validation binding a
params:input to the wrong function argument when a node declared with a dict of inputs leaves an earlier argument to its default. The typed requirement was taken from an argument the node never receives, so a run could fail on a type the user never asked for. - Fixed
--load-versions(andDataCatalog.from_config(load_versions=...)) rejecting a dataset name that the catalog resolves through a user catch-all pattern, even though the name is in the catalog and returns a versioned dataset. - Fixed
Pipeline.only_nodes_with_namespaces(andkedro run --namespaces) raisingValueError: Pipeline nodes must have unique nameswhen a namespace is selected together with one it already covers, such as--namespaces a,a.b. - Stream outputs from generator nodes decorated with
functools.wraps, and reject these nodes when asynchronous loading and saving is enabled. A decorator that consumes the generator, for example withlist(), still has its result saved once. - Fixed the
runnerentry in therun_paramspassed to hooks: it now carries the runner name, instead of'None'for a default run or thereprof the runner instance, which included a memory address. Applies to bothKedroSessionandKedroServiceSession. - Fixed
az://andabfs://container@accountpaths losing the container name. - Fixed
OmegaConfigLoaderignoringconfig_loader["globals"]set after a${globals:}interpolation was resolved. - Added
@experimentaltag toKedroServiceSessionand the HTTP server (create_http_server) to clarify their experimental status. - Fixed CLI error messages being replaced by
NoneType: Noneand the "Kedro project not found" hint being skipped with Click 8.5.
Security hardening
- Logging configuration now applies
KEDRO_LOGGING_MODULE_ALLOWLISTtoclass,ext://, andQueueHandlerlistenerreferences. Bare names, private objects, attribute chains, andcfg://are no longer supported. AQueueHandlerqueuefactory must bequeue.Queueorqueue.SimpleQueue, and alistenermust be aQueueListenersubclass. Use fully qualified names and allowlist trusted custom modules;sys.stdoutandsys.stderrremain allowed by default. These checks reduce risk, but logging configuration must still come from a trusted source. See the logging documentation for migration guidance.
Thanks to leetomo2528, and to Hongwei Li, Junmin Zhu, Zhun Wang, Jiacheng Zhong, Han Dai, Suyue Guo, Songyang Peng and Ziyue Pan, for independently and responsibly reporting this issue.
Community contributions
Many thanks to the following Kedroids for contributing PRs to this release: