Release notes
1.6.0 (2026-10-27)¶
- MDU files containing an obsolete keyword no longer load (FMModel raises "Unknown keywords are detected"), matching the D-Flow FM kernel. The matching model fields are removed, and ProcessFluxIntegration is deprecated.
- structure files with keywords that the models do not
know now fail to load with "Unknotead of
dropping them silently. Structure files that use
locationFileare written as structure file version
Feat¶
- models: remove obsolete keywords (#1259)
- mdu: remove obsolete MDU keywords from the models
- extforce-convert: split combined meteo quantities into per-component bcAscii blocks (#1268)
- structure: support locationFile and reject unknown keywords (#1234)
Fix¶
- extforce-convert: write one .bc file when quantities share a path (#1262)
- utils: resolve forcing file paths to prevent mount errors (#1256)
Refactor¶
- mba: write the [General] block explicitly when saving mass balance area files (#1271)
1.5.0 (2026-10-08)¶
BREAKING CHANGE¶
- TimToForcingConverter.convert is no longer a static method; construct the converter and pass conversion config to init (units is now required and keyword-only), then call convert(vector_quantities=...).
Feat¶
- models: add Gate class with validation and comprehensive test coverage (#1229)
- extforce_convert: support vector quantities in TIM to BC conversion (#1209)
- extforce: support legacy FILETYPE=12 / dataFileType=map with ncFlow alias (#1212)
Fix¶
- extforce_convert: name the sorsin TIM columns from the inifield, new ext, old ext and substance file (#1231)
1.4.0 (2026-09-16)¶
Feat¶
- extforce-convert: support METHOD=0 (block-from), multi ExtForceFileNew entries, and spatial TIM-to-BC conversion (#1201)
- ext: add BubbleScreen support and source-sink variant conversion tests (#1052)
1.3.0 (2026-09-14)¶
Feat¶
- dflowfm: support lateral discharge conversion and validation (#1178)
1.2.0 (2026-09-09)¶
Feat¶
- extforce-convert: support new WAQ quantities in spatial conversion (#1169)
- extforce_convert: convert mass balance areas to a separate _mba.ini file (#1191)
- converters,tests: add factor quantity base conversion and align operand handling (#1184)
Fix¶
- extforce-convert: preserve [General] metadata in generated ext and structure files (#1198)
- extforce_convert: create the MDU [output] section when absent (#1195)
- models,utils,data: tighten filetype validation and add setup files (#1162)
1.1.0 (2026-09-03)¶
Feat¶
- ext: add Spatial block and extend extforce_convert to produce it (#1177)
- extforce_convert: support substance files in the external forcing converter (#999)
- operand: accept readable string constants alongside deprecated single-char values (#1137)
- extforce_convert: add data-driven quantity rename table for sea ice and meteo quantities (#1151)
Fix¶
- structure: normalize structure type to canonical camelCase for Pydantic v2 discriminator (#1186)
- ext: keep existing .bc files intact when saving a non-recursively loaded ExtModel (#1187)
- converters: remove delta suffix from source/sink salinity and temperature variables (#1163)
- ci: standardize poetry version key, replace branch names and actions/checkout references with specific commit hashes
- bc: guard ForcingData Union so DiskOnlyFileModel is only valid under non-recursive loads (#1172)
- data: update external forcing unsupported quantities and error messages (#1147)
- timeseries: add validation to ensure datablock columns match quantity unit pairs (#1135)
- models: consolidate maxitverticalforestersal/tem into single maxitverticalforester field (#1132)
- models: add stemheightconvention support to vegetation models (#1123)
- writer: add required attributes for mesh1d topology, xy, edge, and node coordinates (#1124)
- tests: remove warnings and fix warning-triggering test code (#1131)
- dimr: resolve DeprecationWarning from naive creationDate default (#1120)
- serializer: ensure z value is checked for None before yielding
1.0.1 (2026-05-19)¶
Fix¶
- ini/util: normalize camelCase alias keys in location validator (#1092)
- core: make FilePathStyleConverter compare by value (#1089)
- sourcesink: support .bc files on discharge and Delta-suffix fields (#1087)
- meteo: lowercase attribute names with deprecated camelCase aliases (#1084)
- ext: restore Boundary.forcingfile single-value form (#1080)
- dimr: always emit
and keep mixed components on save (#1056) - mdu: preserve empty string on waqoutputdir/trtdef/trtl assignment (#1054)
Refactor¶
- ci: migrate workflows to shared Deltares composite actions (#1065)
1.0.0 (2026-04-13)¶
First stable major release. This version consolidates the Pydantic v2 migration
and modernizes the CI/packaging infrastructure. See the notes below before
upgrading from 0.x.
BREAKING CHANGE¶
- core: migrate all model modules to Pydantic v2. Pydantic v1 validator
decorators (
@validator,@root_validator) are replaced with Pydantic v2 equivalents (@field_validator,@model_validator,@model_serializer,ConfigDict). Downstream code that relied on Pydantic v1 validation APIs or model internals must be updated. - core: clean up remaining Pydantic v2 migration issues (#1022).
- ci: modernize CI and packaging infrastructure (#1040). The project now builds and is tested against Python 3.10–3.14 on Linux, macOS, and Windows.
Feat¶
- deps: support Python 3.14 (#1011).
- deps: allow pandas 2.x and 3.x (#1027).
- config: add
pydantic-settingsfor enhanced configuration management (included in the 1.0.0b5 preview, promoted in 1.0.0).
Fix¶
- mdu: preserve empty string on
Output.outputdirassignment (#1049). - Install missing deps in the wheel-test workflow (#1048).
- core: clean up Pydantic v2 validation issues across multiple models (#1033).
- docs: fix broken links (#1024).
- docs: fix broken links and add openpyxl dependency for supported functionalities table.
- ci: consolidate docs workflows and fix security and deployment bugs (#1018).
- deps: add
pytest-envdependency for testing environment. - docs: update CI badge to point to the test suite in documentation.
- docs: remove reference to model engines in library description.
- update wheel-test workflow to accept dynamic Git ref input.
1.0.0b5 (2026-02-26)¶
Feat¶
- config: add
pydantic-settingsfor enhanced configuration management
1.0.0b4 (2025-09-03)¶
1.0.0b3 (2025-08-29)¶
1.0.0b2 (2025-08-17)¶
Refactor¶
- dflowfm: restore init.py imports for improved API usability
- core: migrate all model modules to Pydantic v2 and improve validation architecture (#832)
- core: migrate all model modules to Pydantic v2 and improve validation architecture
0.10.1 (2025-11-07)¶
Fix¶
- dependencies: correct installation of optional dependencies from PyPI (#1003)
- dependencies: correct installation of optional dependencies from PyPI
0.10.0 (2025-11-06)¶
0.9.9 (2025-11-03)¶
Feat¶
- FMModel: update physics parameters and handle new keywords (#994)
- extforce_convert: enhance parameter and prefix quantity handling (#976)
Fix¶
- extforce_convert: ensure case-insensitive matching for unsupported quantities (#988)
- average-type: add average type as mean if not given (#991)
- extforce_convert: correct averaging type parsing and mapping (#987)
- mdu_parser: improve
path_relative_to_parenthandling (#982)
Refactor¶
- mdu_parser: improve
path_relative_to_parenthandling
0.9.8 (2025-10-20)¶
Feat¶
- extforce_convert: improve relative path resolution for initial and parameter files (#966)
- mdu: support
yyyymmddfor startDateTime/stopDateTime (#953) - cli: add --path-style argument to control file path formatting (#951)
Fix¶
- netcdf-reader: map link1d2d_contact_type to avoid IndexError
- mdu_parser: only update field value if unset (#962)
- inifield: set averaging fields default to None
0.9.7 (2025-09-26)¶
Fix¶
- path: resolve root dir with UNC-compatible relative paths (#950)
Refactor¶
- extforce: sync quantities with kernel and centralize unsupported/deprecated handling (#929)
0.9.6 (2025-09-04)¶
Fix¶
- fix pyyaml import error (#939)
0.9.5 (2025-09-03)¶
Fix¶
- extforce_convert: ensure all fields are saved in IniFieldModel (#938)
- mdu_parser: improve deprecated keyword handling and clean logic (#934)
Refactor¶
- extold: externalize quantities and headers to YAML (#925)
1.0.0b3 (2025-08-29)¶
0.9.4 (2025-08-29)¶
Feat¶
- mdu_parser: extend MDUParser with delete_line, repr, and clean methods (#924)
Fix¶
- extold/models: fix NudgeSalinityTemperature parameter quantity (#923)
1.0.0b2 (2025-08-17)¶
Feat¶
- extforce: add new parameter quantities and extend converter support (#909)
- extforce: add new parameter quantities and extend converter support
- converter: support dynamic attributes (tracerFallVelocity and tracerdecaytime) for the extoldforcing (#817)
- ci: improve release workflow with version and branch setup (#878)
- ci: improve release workflow with version and branch setup
Fix¶
- converter: propagate area parameter from ExtOldForcing to new SourceSink model
- extforce: new external forcing files name conflict with existing file (#897)
Refactor¶
- dflowfm: restore init.py imports for improved API usability
- extoldforcing: normalize tracer field names
tracerfallvelocity/tracerdecaytime(#911) - extoldforcing: normalize tracer field names
- converters: abstract conversion logic for T3D and CMP files, fix label issue (#896)
- converters: abstract conversion logic for T3D and CMP files
- core: migrate all model modules to Pydantic v2 and improve validation architecture (#832)
- core: migrate all model modules to Pydantic v2 and improve validation architecture
- ext: read child files as
DiskOnlyFileModel(recurse=False) (#892) - ext: simplify logic and read child files as DiskOnlyFileModel
- mdu: enhance MDU parser with structured line and section handling (#881)
- mdu: enhance MDU parser with structured line and section handling
0.9.3 (2025-08-17)¶
Feat¶
- extforce: add new parameter quantities and extend converter support (#909)
- converter: support dynamic attributes (tracerFallVelocity and tracerdecaytime) for the extoldforcing (#817)
- ci: improve release workflow with version and branch setup (#878)
Fix¶
- tests: remove obsolete reference to HYDROLIB-core in crsloc.ini
- converter: propagate area parameter from ExtOldForcing to new SourceSink model
- extforce: new external forcing files name conflict with existing file (#897)
Refactor¶
- dimr: improve serialization safety by replacing minidom with lxml
- extoldforcing: normalize tracer field names
tracerfallvelocity/tracerdecaytime(#911) - extoldforcing: normalize tracer field names
- converters: abstract conversion logic for T3D and CMP files, fix label issue (#896)
- converters: abstract conversion logic for T3D and CMP files
- ext: read child files as
DiskOnlyFileModel(recurse=False) (#892) - ext: simplify logic and read child files as DiskOnlyFileModel
- mdu: enhance MDU parser with structured line and section handling (#881)
- mdu: enhance MDU parser with structured line and section handling
1.0.0b1 (2025-07-04)¶
Refactor¶
- storagenode: Migrate
StorageNodeto pydantic v2 (#847) - storagenode: Migrate
StorageNodeto pydantic v2 (#847) - onedfield: Migrate
OneDFieldto pydantic v2 (#848) - onedfield: migrate to Pydantic v2
- structure: Migrate
structuremodule to pydantic v2 (#845) - structure: Migrate
structuremodule to pydantic v2 - obs: migrate ObservationCrossSection and
ObservationPointmodels to Pydantic v2 (#844) - obs: migrate ObservationCrossSection and
ObservationPointmodels to Pydantic v2 (#844) - models:
extmodels to Pydantic v2 (#841) - models:
extmodels to Pydantic v2 (#841) - inifield: migrate IniField to Pydantic v2 and improve input handling (#843)
- inifield: migrate IniField to Pydantic v2 and improve input handling (#843)
- models: migrate to the gui module to Pydantic v2 #842)
- models: migrate to the gui module to Pydantic v2 #842)
0.9.2 (2025-06-26)¶
Feat¶
- converter: support relative paths, polygon meteo files, and extend boundary condition handling (#861)
- also write
in case of fmcomponent.process==1 (#854)
0.9.1 (2025-05-30)¶
Feat¶
- parser: refactor and enhance
read_polyfilefunctionality (#550) (#828) - CrossLocModel: extend CrossLocModel to accept a single cross-section (#820)
- crossloc: improve validation and test support for single cross-section use
Fix¶
- path: improve relative and case-insensitive path resolution (#829)
- test: ignore version lines in file comparison to prevent test failures (#819)
Refactor¶
- core: restructure base and model modules, improve test coverage (#834)
- dimr: refactor dirm tests and modules (#826)
0.9.0 (2025-05-16)¶
Feat¶
- extforce: Introduce External forcing conversion tool with modular converters (UNST-8490, UNST-8528, UNST-8553) (#647)
- meshkernel: support refined parameters and clipping inside polygons with holes (#776)
0.8.1 (2025-02-04)¶
Feat¶
- Support Fortran scientific notation in .tim files (e.g., 1d0) (#720)
- Corrected comment for layerType (#697)
Fix¶
- failing docs (#728)
0.8.0 (2024-07-09)¶
Feat¶
- Prevent duplicate contacts/links in
Link1d2dby replacing Link1d2d._process() with properties (#674) - Move jadelvappos to physics section. (#672)
- Make research wave section optional again. (#671)
- Fix remaining keywords (#670)
- Add support for spaces polyline names (#652)
- Add support for optional [sedtrails] research section. (#651)
- Don't write keywords with None values (#663)
- Add/move more mdu keywords (#654)
- Raise error for unknown keywords (#632)
- Added support for research keywords (#642)
- Add support for python 3.12 (#640)
- Use caching to prevent reading files multiple times (#641)
- Add missing mdu keywords (#628)
- properly writing number of processes in dimr_config.xml (#623)
Fix¶
- Ensure mesh_2d_edge_x and mesh_2d_edge_y are written to nc file. (#645)
- locationtype should not be written for CrossSections or ObservationCrossSections (#683)
0.7.0 (2024-03-11)¶
Feat¶
- Use new
contacts_setfunction from MeshKernel 4.0.2 (#575) - Bump MeshKernel version to ^4.0.2 (#594)
- Add support for Python 3.10 (#586)
Fix¶
- It is not possible to refine meshes with cell sizes smaller than 10 m (#611)
- Fix show tree output for old external forcing file (ExtOldForcing class) (#581)
0.6.1 (2024-01-12)¶
0.6.0 (2023-11-16)¶
Feat¶
- Add filetype 10 (polyfile) to class ExtOldFileType (#565)
- Add missing oldext quantities (#557)
Fix¶
- Rainfall Runoff .bui file with multiple stations gives parse error
0.5.2 (2023-04-19)¶
Fix¶
- failing unittest + SonarCloud security issue (#541)
0.5.1 (2023-04-17)¶
Feat¶
- Add the quantity
nudge_salinity_temperatureto ext old file header. - Support the old style external forcings file
- Add support for several coastal MDU keywords
- Add support for *.tim files and *.bc files in the structure file
- Support meteo blocks in external forcings file (#477)
- Remove indentation from MDU file
- Add 4 missing 1D2D settings to FMModel
- Support *.tim files
- Add XYN classes to public API (#492)
- Include old and new observation crossections into MDU FMModel.output class (#470)
- Support observation crosssection .pli via existing PolyFile class (#464)
- Add support for 3D Z-sigma settings in MDU
- Support loading+saving models with configurable OS path style formats (#361)
- Add support for observation point xyn files (#472)
- Support filepath as str besides Path for all model classes under FileBasedModel (#469)
- Add validation for NaN values in datablocks
Fix¶
- Fixed issues with the new release script
- Special characters should be parsed correctly from file
- MDU keywords such as 1d2dLinkFile are written to file without comments (#528)
- UGRID network files without faces should be accepted
- correct handling of whitespace and comments in observation point .xyn files (#508)
- Fix resolving of relative paths containing
..when not using theresolve_casingoption. - ignore trailing values or text on polyline data lines to better support boundary polyfiles (#482)
- Reading invalid formatted plifile should raise error instead of warning
- polyline serializer should print empty trailing comment lines
Refactor¶
- Make sure of the new Pydantic 1.10 functionality
0.4.1 (2023-01-26)¶
Fix¶
_add_nodes_to_segmentsfixed (#440)
0.4.0 (2023-01-23)¶
Feat¶
- Remove io namespace and add convenient imports/API at several directory levels (#438)
- Added the option for all supported files to customize the float formatting when saving (#406)
- Suppress warning in polyfile parser that the white space at the start of the line is ignored (#409)
- Change data block default spacing from 4 to 2 (#407)
- Add support for non-recursively loading models (#401)
Fix¶
- Fixed polylinefile validation for Structure and its subclasses (#416)
- Rename variable in generate_nodes function (#437)
- Ensure that QuantityUnitPairs that are not part of a vector are correctly parsed (#420)
- Enum values are incorrectly written to files (#403)
Refactor¶
- Small refactoring of the VectorQuantityUnitPairs and VectorForcingBase (#422)
- Move the base module in XYZ back to IO (#418)
- Refactored support for vectors in .bc files (#394)
0.3.1 (2022-10-25)¶
Feat¶
- option
resolve_casingto fix filepath casing between different OS's. - Added support for the use of vectors within forcing models with a t3d or timeseries function type.
- Added possibility to take structure positions into account when discretizing 1d mesh
- Add support for branches.gui file (#333)
- Drop extra fields for INIBasedModels if they are not in file format definition
- Support crs file for observation cross sections (#289)
- implement mesh generation for pipes (#294) and fix support different reference system (#298) (#299)
- removed the writeBalanceFile keyword from the mdu
- support copying generic files/models (#281)
- Support extra MDU sections (#284)
- add binder support with a dockerfile (#264)
Fix¶
- Add backwards compatibility for the old "percentage from bed" vertical position type.
- Fix freeze when printing a ForcingModel with multiple [forcing] blocks by omitting the datablocks.
- T3D header is not correct (#356)
- Change AutoStart type from bool to int (#349)
- Skip serialization of empty INI properties when configured (#336)
- Net writer should not produce NaN as fill values (#363)
- Change type of xcoordinates and ycoordinates in Lateral class from int to float (#351)
- Fix that single structure in StructureModel class is correctly converted to a list (#352)
- Ensure poly files can be saved (#344)
- write correct branchorder to net file (#335)
- add zdatum vertical position type (#324)
- parse vertical positions to list (#325)
- make
has_z_valuesparameter optional inpolyfile.parser.read_polyfile(#312) - Remove unnessary indent in .bc datablocks (#304)
- Fix the types of 4 fields in the MDU file (#283)
Refactor¶
- Location specification root validator (#347)
0.3.0 (2022-07-11)¶
Fix¶
- Add water level location validation DamBreaks
- allow empty file paths in the .fnm file
- Add modeltype 21 to RR node for open water precipitation/evaporation (#261)
- filemodel: ResolveRelativeMode is incorrectly set when reading a model with 'pathsRelativeToParent' set to false (#259)
Feat¶
- network: additional mesh funcs dhydamo
- support .bc files and more in lateral discharge (#244)
- add support for observation point ini file (#236)
- support .bc files and more in lateral discharge
Refactor¶
- rr: place all RR-related code+tests in own rr subpackage (#235)
- remove dead code of _process_edges_for_branch
0.2.1 (2022-03-15)¶
Fix¶
- parser: correctly parse model input fields with leading digits, such as 1D2DLinkFile.
- parser: allow empty friction specification in all crossdef types. (#206).
0.2.0 (2021-12-17)¶
Added¶
- RainfallRunoff files: NodeFile (#138) and LinkFile (#140)
- D-Flow FM files:
- Initial field files: IniFieldModel, also added 1D Field INI format: OneDFieldModel (#119).
- 1D Roughness INI files: FrictionModel (#118).
- Storage node files: StorageNodeModel (#131).
- General structure: GeneralStructure (#79).
- Many additions to the API documentation.
Changed¶
- All classes that have fields with "keyword values" (such as
frictionType = WhiteColebrook) now use Enum classes for those values. See for example FrictionType and FlowDirection (#98) - All crosssection definition type now supported as subclasses of CrossSection (#117)
- Cross section definition and location classes have been moved from
hydrolib.core.io.ini.modelstohydrolib.core.io.crosssection.models. (#149) - Changed behavior for file paths in saved files (#96). More information about: technical background and a tutorial.
Fixed¶
- Too strict validation of optional fields in culvert (#75), pump (#76), weir (#77), orifice (#78).
- Floating point parser breaks reading/writing of keyword UnifFrictCoef1D2D (#103)
- DIMR config has invalid control element for a single component model (#127)
- DataBlockINIBasedModel.datablock should also support strings (astronomic in .bc files) (#137)
- Saving .bc files incorrectly writes repeated key names as a semicolon-separated list (#101)
- Do not write absolute file paths to file (#96)
0.1.5 (2021-11-02)¶
0.1.4 (2021-11-02)¶
0.1.3 (2021-08-05)¶
Fix¶
- netcdf serialization path.
0.1.2 (2021-08-05)¶
Fix¶
- test_version: Fix updated version
0.1.1 (2021-08-05)¶
Fix¶
- NetworkModel: Fix default init of Network within NetworkModel