Releases: Deltares/hydromt_wflow
Release list
v1.0.2
v1.0.2 (3 March 2026)
What's Changed
New
- Added Pandas 3.0 support (#713)
Fixed
workflows.demand.surfacewaterfrac_usedsynchronize nodata value and fill value to prevent skipping interpolation. (#706)
Full Changelog: v1.0.1...v1.0.2
v1.0.1
v1.0.0
What's Changed
v1.0.0 (18 December 2025)
Overview
Version 1.0.0 is a major release that introduces full support for Wflow.jl 1.0.0 and drops support for all earlier Wflow.jl versions.
This is also the release in which the hydromt-core dependency is upgraded to version 1, aligning hydromt_wflow with the new hydromt architecture and APIs.
An explicit upgrade path is provided via the upgrade_to_v1_wflow function to help users migrate existing models.
For more information, see the migration guide
Architecture and Model Structure
The internal model structure has been refactored around hydromt-core v1 concepts.
The model root is now managed by a ModelRoot class, and configuration, static maps, forcing, states, geometries, and outputs are implemented as ModelComponent classes with a uniform data access pattern.
Component and method names were harmonized with Wflow.jl conventions, including renaming grid to staticmaps and standardizing static map, state, and geometry names.
Configuration and Setup Changes
TOML configuration handling was redesigned to match Wflow.jl 1.0.0.
Configuration options are now added incrementally by setup methods rather than generated from a full template.
Several setup methods were renamed or split for clarity, and clipping a model is now handled through a single clip method.
Users can explicitly control variable names in static maps and selected geometries, enabling multiple variants of the same parameter within one model.
Lakes, Reservoirs, and Rivers
Lakes and reservoirs are now handled through a unified reservoir framework.
Reservoirs can be added or overwritten, and a combined reservoir geometry is generated by default.
River setup logic was split into generic and model-specific parts, improving reuse and maintainability.
Sediment-related workflows were updated to prepare only sediment-relevant variables.
Compatibility, Fixes, and Cleanup
The minimum supported Python version was raised to 3.11.
Legacy functionality tied to older Wflow versions and deprecated dependencies was removed, including pcraster support and model-level get/set/read/write methods.
Numerous bug fixes and behavioral improvements were included, particularly around upgrading models, reservoir handling, forcing generation, and geometry processing.
Added
- config component
WflowConfigComponent: represents the Wflow configuration TOML file. - staticmaps component
WflowStaticMapsComponent: represents Wflow static and cyclic data (used to be grid). - forcing component
WflowForcingComponent: represents Wflow input forcing data. - states component
WflowStatesComponent: represents Wflow input states data. - geoms component
WflowGeomsComponent: represents Wflow staticgeoms data. - output_grid
WflowOutputGridComponent, output_scalarWflowOutputScalarComponentand output_csvWflowOutputCsvComponentcomponents: represent Wflow outputs (used to be results). - write_geoms: added function arguments
to_wgs84to convert the geometry to WGS84 before writing it to file. PR #432 - Reservoirs can now overwrite or be added to existing ones in the model. PR #515
- Create a combined staticgeom for all reservoirs "reservoirs.geojson". PR #515
- upgrade_to_v1_wflow: convert models for Wflow.jl version < 1.0.0 to Wflow.jl version 1. PR #364
- Allow users to choose the names of each variables in staticmaps.nc files or the same of some of the staticgeoms (eg lakes, reservoirs). PR #364
- setup_areamap: if the map is linked to a Wflow variable, the TOML file can now be updated to link the new created map to the right Wflow.jl variable. PR #364
- Support more lake/reservoir output variables in the upgrade to v1 function. (#661)
- Revised version 1.0 of the landuse parameter mapping tables. (#670)
Changed
- Increased minimum python version to 3.11 according to https://scientific-python.org/specs/spec-0000/
- Model root is now a
ModelRootclass. To access the root path, usewflow.root.path. - Model components like config, forcing are now
ModelComponentclasses.
To access the inherent data objects (dictionary, xarray.Dataset etc.) of the components, thedataproperty is now used.
Eg wflow.config.data, wflow.staticmaps.data - The names of some of the model components have changed:
gridtostaticmaps. - setup_config: the method now explicitly uses a dictionary with the options to add/update.
- utils.read_csv_results has been renamed to utils.read_csv_output.
- Reverted the use of TOMLkit dependency
- Renamed
WflowModeltoWflowSbmModel. This also affects the cli commandhydromt <build/update> wflow, which now becomeshydromt <build/update> wflow_sbm. - Split
WflowModelintoWflowBaseModelcontaining all generic parts of all wflow models, like components and some setup functions, andWflowSbmModel, containing the specific parts for the wflow_sbm concept. WflowSedimentModelandWflowSbmModelboth inherit fromWflowBaseModeland extend it for their specific use cases.- The old
WflowModel.setup_rivershas been split into three parts:WflowBaseModel.setup_rivers,WflowSbmModel.setup_riversandWflowSbmModel.setup_river_roughness. Where the first contains the generic river setup logic, the second Sbm-specific implementations, and the third contains manning roughness implementations. - Clipping a model is now done by calling a single clip method. This function can be called with the
hydromt updatecli command. - upgrade_to_v1_wflow: Function now also updates any input variables that link to
netcdf.variable.nametonetcdf_variable_name. - Existing forcing file is now overwritten if the model is in w+ mode (build with --fo).(#598)
- Update values used in example yamls to new defaults used in Wflow.jl (#589)
- Improve behavior of
merge_reservoirs, to merge values based on their ID rather than all non-missing pixels. (#597) - Rename standard names to no longer use "instantaneous" in the name (#601)
- setup_reservoirs has been renamed to setup_reservoirs_simple_control for sbm. The default output geom is meta_reservoirs_simple_control.geojson. PR #515
- setup_lakes has been renamed to setup_reservoirs_no_control for sbm. Arguments of the functions have been updated as well. The default output geom is meta_reservoirs_no_control.geojson. PR #515
- setup_lakes has been renamed to setup_natural_reservoirs for sediment. Arguments of the functions have been updated as well. The default output geom is meta_natural_reservoirs.geojson. PR #515
- workflows.waterbodies has been renamed to workflows.reservoirs. PR #515
- Support for Wflow.jl >= 1.0.0 kernel. The main implication is for the generation of the TOML file. Consequently support for Wflow.jl < 1.0.0 has been dropped (see below). PR #364
- All default names in staticmaps.nc and states have been redefined and harmonized. PR #422
- Some of the geoms names have changed: gauges to outlets and subcatch to subcatchment. PR #422
Wflow._configis no longer a dictionary but atomlkit.TOMLDocumentto ensure structure of existing toml files are preserved upon write.
Due to this change we discourage users from modifying the config structure by hand, and instead rely onWflow.set_configto avoid issues. (#387)- setup_constant_pars: add the constant value to the TOML rather than creating an extra map in staticmaps.nc. The values should then be linked to the Wflow.jl variable name. PR #364
- setup_lulcmaps and equivalents: parameters to prepare from the mapping table are now linked to Wflow.jl variable names (dictionary and not list) to allow for renaming. PR #364
- setup_output_config_timeseries, setup_outlets, setup_gauges: the option to save parameters to netcdf scalar file as been renamed from
netcdftonetcdf_scalarto better match the TOML file structure. PR #364 - Changed name of
g_ttparameter tog_ttm, to align with the changes in Deltares/Wflow.jl#512 - setup_soilmaps [sediment]: add small and large aggregates to soil composition (additional to clay/silt/sand). Composition is now in fraction and not percentage. PR #331
- setup_soilmaps [sediment]: additional parameters are prepared by the method (e.g. soil mean diameter, Govers transport capacity parameters). PR #331
- setup_constant_pars [sediment]: added additional default values for sediment density and particle diameters. PR #331
- setup_riverbedsed [sediment]: added option to derive Kodatie transport capacity parameters based on streamorder mapping. PR #331
- setup_rivers, setup_lakes, setup_reservoirs [sediment]: only create wflow sediment variables and not a mix of sbm and sediment ones. PR #364
- Grid data is masked to subcatchment on
set_gridnow instead of onwrite_grid(#349) - Signature of the standalone set_config and get_config functions, config is now first argument
- TOML file options are added on the fly by each setup method rather than starting from a complete template.
- The default landuse mapping tables are now the revised version (1.0). The previous version is still available as variant version 0.8. (#670)
- vegetation_crop_factor: values for cells without vegetation in the mapping tables are now nodata values. After mapping and resampling, nodata values are filled with 1. (#670)
- When using
setup_reservoirs_simple_control, the tables for reservoir accuracy and reservoir timeseries are written to the [model's root]/validation. (#631) - ``setup...
v1.0.0-rc3
What's Changed
- fixed bug in WflowStaticmapsComponent.set by @Tjalling-dejong in #605
- fix: use contains_source instead of in datacatalog.sources for core v1 by @LuukBlom in #609
- Remove passthrough functions on models by @savente93 in #613
- Bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in #625
- Bump actions/download-artifact from 5 to 6 by @dependabot[bot] in #626
- Bump prefix-dev/setup-pixi from 0.9.1 to 0.9.2 by @dependabot[bot] in #611
- Write reservoir_accuracy to a validation folder by @deltamarnix in #631
- Pin landuse column names to a fixed set by @deltamarnix in #623
- Update pixi lockfile and SBOM by @github-actions[bot] in #637
- fix buffer in river workflow if dem was not upscaled by @hboisgon in #638
- Fix writing of forcing component by @deltamarnix in #641
- 351 update documentation by @LuukBlom in #600
- Fixed error when clipping model states by @Tjalling-dejong in #644
- Changed cold start flag to true in model conversion code by @Tjalling-dejong in #642
- try fixing docs workflow by @hboisgon in #650
- Fix setup_forcing by @savente93 in #649
- update hydromt core links to new docs structure by @hboisgon in #655
- Bump prefix-dev/setup-pixi from 0.9.2 to 0.9.3 by @dependabot[bot] in #654
- Update hydromt core by @deltamarnix in #653
- Add latest to docs switcher by @deltamarnix in #657
Full Changelog: v1.0.0rc2...v1.0.0-rc3
v1.0.0rc2
In v1.0.0rc2, lakes and reservoirs were merged into a single structure in Wflow.jl, prompting updates to related functions and parameters. Several new model components were introduced,
including those for configuration, static maps, forcing, states, geoms, and various output types. The minimum supported Python version was raised to 3.11.
The model root is now managed by a ModelRoot class, and model components such as config and forcing are now ModelComponent classes, with their data accessed via a data property.
Component and method names were updated for clarity, including renaming "grid" to "staticmaps" and splitting or renaming several setup methods. The process for clipping a model was simplified to a single clip method.
Reservoir handling was enhanced, allowing overwriting or adding reservoirs, and a combined staticgeom for all reservoirs is now created. The release also included various bug fixes,
such as improved handling in upgrade_to_v1_wflow, correct addition of states in setup_floodplains, and better clipping and snapping of 1D rivers.
The use of the tomlkit dependency was reverted, and the standard naming conventions were updated. Finally, the workflows.waterbodies module was renamed to workflows.reservoirs,
and the release included documentation improvements and updates to example configurations.
Added
- config component
WflowConfigComponent: represents the Wflow configuration TOML file. - staticmaps component
WflowStaticMapsComponent: represents Wflow static and cyclic data (used to be grid). - forcing component
WflowForcingComponent: represents Wflow input forcing data. - states component
WflowStatesComponent: represents Wflow input states data. - geoms component
WflowGeomsComponent: represents Wflow staticgeoms data. - output_grid
WflowOutputGridComponent, output_scalarWflowOutputScalarComponentand output_csvWflowOutputCsvComponentcomponents: represent Wflow outputs (used to be results). - write_geoms: added function arguments
to_wgs84to convert the geometry to WGS84 before writing it to file. PR #432 - Reservoirs can now overwrite or be added to existing ones in the model. PR #515
- Create a combined staticgeom for all reservoirs "reservoirs.geojson". PR #515
Changed
- Increased minimum python version to 3.11 according to https://scientific-python.org/specs/spec-0000/
- Model root is now a
ModelRootclass. To access the root path, usewflow.root.path. - Model components like config, forcing are now
ModelComponentclasses.
To access the inherent data objects (dictionary, xarray.Dataset etc.) of the components, thedataproperty is now used.
Eg wflow.config.data, wflow.staticmaps.data - The names of some of the model components have changed:
gridtostaticmaps. - setup_config: the method now explicitly uses a dictionary with the options to add/update.
- utils.read_csv_results has been renamed to utils.read_csv_output.
- Reverted the use of TOMLkit dependency
- Renamed
WflowModeltoWflowSbmModel. This also affects the cli commandhydromt <build/update> wflow, which now becomeshydromt <build/update> wflow_sbm. - Split
WflowModelintoWflowBaseModelcontaining all generic parts of all wflow models, like components and some setup functions, andWflowSbmModel, containing the specific parts for the wflow_sbm concept. WflowSedimentModelandWflowSbmModelboth inherit fromWflowBaseModeland extend it for their specific use cases.- The old
WflowModel.setup_rivershas been split into three parts:WflowBaseModel.setup_rivers,WflowSbmModel.setup_riversandWflowSbmModel.setup_river_roughness. Where the first contains the generic river setup logic, the second Sbm-specific implementations, and the third contains manning roughness implementations. - Clipping a model is now done by calling a single clip method. This function can be called with the
hydromt updatecli command. - upgrade_to_v1_wflow: Function now also updates any input variables that link to
netcdf.variable.nametonetcdf_variable_name. - Existing forcing file is now overwritten if the model is in w+ mode (build with --fo).(#598)
- Update values used in example yamls to new defaults used in Wflow.jl (#589)
- Improve behavior of
merge_reservoirs, to merge values based on their ID rather than all non-missing pixels. (#597) - Rename standard names to no longer use "instantaneous" in the name (#601)
- setup_reservoirs has been renamed to setup_reservoirs_simple_control for sbm. The default output geom is meta_reservoirs_simple_control.geojson. PR #515
- setup_lakes has been renamed to setup_reservoirs_no_control for sbm. Arguments of the functions have been updated as well. The default output geom is meta_reservoirs_no_control.geojson. PR #515
- setup_lakes has been renamed to setup_natural_reservoirs for sediment. Arguments of the functions have been updated as well. The default output geom is meta_natural_reservoirs.geojson. PR #515
- workflows.waterbodies has been renamed to workflows.reservoirs. PR #515
Fixed
- upgrade_to_v1_wflow: fixed bug for [model] options that kept the same name in Wflow v1. (e.g. type, river_routing, land_routing). PR #487
- setup_floodplains: states were not correctly added to the model config. PR #486
- setup_1d_model_connection: improve clipping and snapping of 1D river with wflow basins/river. PR #416
- Fix wflow build config example in the docs. PR #486
- Fix crop_factor and water_frac values for grassland in CORINE. PR #523
- included
floodplain_water_flow__manning_n_parameterin naming script (#529)
Removed
- Reverted use of tomlkit (#529)
v1.0.0rc1
This is a pre-release version to start testing support for Wflow.jl version 1.0.0. The main changes are
linked to the TOML file options. We have dropped support for Wflow.jl < 1.0.0, but we allow users
to upgrade their models to the new version using the upgrade_to_v1_wflow function. If you do not want
to upgrade your model, you can use an older release of hydromt_wflow.
In addition, we have updated the default grid names (staticmaps.nc) and states names to be more
consistent and closer to the Wflow.jl names. We also added the possibility to choose the names of the
variables in staticmaps.nc files in each of the setup methods. This allows users to have several versions
of the same variable in the staticmaps.nc file using different options (eg. landuse_corine, landuse_vito, etc.).
Finally, some of the staticgeoms names have changed, in particular gauges is now outlets and has been
replaced in the input section of the TOML as well in order to save outputs for these locations.
Added
- upgrade_to_v1_wflow: convert models for Wflow.jl version < 1.0.0 to Wflow.jl version 1. PR #364
- Allow users to choose the names of each variables in staticmaps.nc files or the same of some of the staticgeoms (eg lakes, reservoirs). PR #364
- setup_areamap: if the map is linked to a Wflow variable, the TOML file can now be updated to link the new created map to the right Wflow.jl variable. PR #364
Changed
- Support for Wflow.jl >= 1.0.0 kernel. The main implication is for the generation of the TOML file. Consequently support for Wflow.jl < 1.0.0 has been dropped (see below). PR #364
- All default names in staticmpas.nc and states have been redefined and harmonized. PR #422
- Some of the geoms names have changed: gauges to outlets and subcatch to subcatchment. PR #422
- setup_constant_pars: add the constant value to the TOML rather than creating an extra map in staticmaps.nc. The values should then be linked to the Wflow.jl variable name. PR #364
- setup_lulcmaps and equivalents: parameters to prepare from the mapping table are now linked to Wflow.jl variable names (dictionary and not list) to allow for renaming. PR #364
- setup_output_config_timeseries, setup_outlets, setup_gauges: the option to save parameters to netcdf scalar file as been renamed from
netcdftonetcdf_scalarto better match the TOML file structure. PR #364 - Changed name of
g_ttparameter tog_ttm, to align with the changes in Deltares/Wflow.jl#512 - setup_soilmaps [sediment]: add small and large aggregates to soil composition (additional to clay/silt/sand). Composition is now in fraction and not percentage. {R #331
- setup_soilmaps [sediment]: additional parameters are prepared by the method (e.g. soil mean diameter, Govers transport capacity parameters). PR #331
- setup_constant_pars [sediment]: added additional default values for sediment density and particle diameters. PR #331
- setup_riverbedsed [sediment]: added option to derive Kodatie transport capacity parameters based on streamorder mapping. PR #331
- setup_rivers, setup_lakes, setup_reservoirs [sediment]: only create wflow sediment variables and not a mix of sbm and sediment ones. PR #364
- Grid data is masked to subcatchment on
set_gridnow instead of onwrite_grid(#349) - Signature of the standalone set_config and get_config functions, config is now first argument
- TOML file options are added on the fly by each setup method rather than starting from a complete template.
Fixed
- Updated installation guide (#376)
Deprecated
- Support for building/updating models for Wflow.jl version < 1.0.0. We encourage you to upgrade your model to the new version using
upgrade_to_v1_wflowor use an older release of hydromt_wflow if you do not want to upgrade your model. PR #364 - setup_soilmaps: drop possibility to derive parameters based on soil texture as InfiltCapSoil parameter is no longer supported in Wflow.jl 1.0.0 (duplicate of ksat_vertical). PR #334
Removed
- Dropped support for
pcrasterand removed deprecated pcrm module. PR #408
Full Changelog: v0.8.0...v1.0.0rc1
v0.8.0
This release enables the user to interpolate rainfall station data and use it as model forcing. In addition, there is now support for inversely clipping your model and to compute domestic water demand. Furthermore, the user can now add irrigation areas to their models in the form of a vector file and derive model parameters based on the soil texture.
Added
- setup_precip_from_point_timeseries: method to interpolate rainfall station data as model forcing. PR #315
- Added support for inverse clipping by using the
inverse_clip=Trueflag in theclip_gridmethod. PR #336 - setup_domestic_demand_from_population: method to compute domestic demand from population and water use per capita. PR #334
- setup_irrigation_from_vector: method to add irrigation areas from a vector file. PR #334
- setup_soilmaps: possibility to derive parameters based on soil texture. Added defaults for InfiltCapSoil. PR #334
Changed
- setup_allocation_areas: added a minimum area threshold (50 km2) to filter too small allocation areas. PR #334
Fixed
- setup_rivers: fixed bug if manning or gvf methods are used to compute river depth. PR #334
- setup_lulcmaps_with_paddy: input.vertical.kvfrac is set to kvfrac in config. PR #362
- create_lulc_lai_mapping_table: hardcoded x and y dim names are now set to raster.y_dim and raster.x_dim. PR #362
Full Changelog: v0.7.1...v0.8.0
v0.7.1
Officially drop support for python 3.9.
Added
- setup_ksatver_vegetation: method to calculate KsatVer_vegetation to account for biologically-enhanced soil structure in KsatVer. PR #313
- setup_lulcmaps_from_vector: method to prepare LULC map and params from a vector input rather than raster. PR #320
Deprecated
- Support for python 3.9 (already not supported in previous releases).
v0.7.0
This release adds support to create water demand and allocation related data (available since Wflow.jl version 0.8.0).
For now, the new methods for demands support is limited to already gridded input datasets.
The release also includes support for the paddy land use type and additional landuse parameters (crop coefficient and root uptake).
Added
- setup_lulcmaps_with_paddy: method to add paddy to the model. Adding paddies leads to changes in landuse and soil parameters. PR #226
- setup_domestic_demand and setup_other_demand: methods to prepare water demands for different sectors using gridded datasets. PR #226
- setup_irrigation: method to prepare irrigation areas and parameters. PR #226
- setup_allocation_areas: method to prepare allocation areas for water allocation. PR #226
- setup_allocation_surfacewaterfrac: method to prepare surface water fraction for water allocation. PR #226
Changed
- setup_lulcmaps prepares new vegetation parameters (crop coefficient kc and h values). PR #226
- set_grid supports several cyclic time dimensions. PR #226
Fixed
- Error in computation of LAI values from mapping to landuse in setup_laimaps. PR #297
- IO error for write_states in write. PR #297
- Creating the staticgeoms folder if it does not already exist (eg when dir_input is provided). PR #297
- Pedo-transfer function for estimation of residual water content. PR #300
v0.6.1
This release mainly contains small bugfixes and limits xarray version to 2024.03.0
Added
- Added "fillna_method" option for setup_temp_pet_forcing by @tnlim
- Output filenames can now be specified in the model.write function. More detailed arguments should still be specified in each individual write* methods. PR #286
Changed
- Individual methods like write_forcing will not longer write the config file if config settings get updated. Always call write_config as the last write method. PR #286
- More uniform handling of the date typing when reading/writing dates from the wflow toml files. PR #286
Fixed
- Wrong dtype for columns when reading a mapping table in setup_laimaps_from_lulc_mapping . PR #290
- Read/write staticgeoms if dir_input folder is present in the wflow toml file. PR #286
- Creating subfolders for the config file of wflow in write_config. PR #286
- Fixed access to functions in the pcrm module (read_staticmaps_pcr, write_staticmaps_pcr). PR #293
- Bug in setup_pet_forcing when doing time resampling. PR #294