Releases: Deltares/Ribasim
v2026.1.0-rc2
This second pre-release for v2026.1.0 adds a QGIS plotting pane with water balance and fractional flow plots, a new Observation node, and allocation control for the TabulatedRatingCurve.
We fully switched from Arrow to NetCDF-based I/O, and have a new set of icons for our nodes.
Breaking changes: Arrow support was removed and NetCDF is now the only format for results.
model.to_fews was removed. The Ribasim QGIS plugin now requires QGIS 3.40 or newer.
Added
- Add Observation node. #2950
- Add implicit listen edges to Link table on write. #2949 #2969
- Add a Boolean for allocation-controlled behavior. #2912
- Add allocation-controlled TabulatedRatingCurve. #2907
- Add guide for installing other Ribasim versions. #2906
- Add VS Code guide. #2857
- Add allocation technical reference documentation. #2809
- Add section on debugging unexpected flow rates. #2814
- QGIS: Add experimental QGIS 4 support. #2960
- QGIS: Add configurable
RIBASIM_HOME. #2919 - QGIS: Support running Ribasim models. #2881
- QGIS: Load external NetCDF input. #2880
- QGIS: Add Plotly widget and NetCDF results support. #2903
- QGIS: Add water balance plot. #2939
- QGIS: Add fraction plotting. #2968
Changed
- Default to NetCDF for results storage. #2855
- Complete writing remaining results to NetCDF. #2856
- Remove Arrow support. #2937
- Remove
model.to_fews; add CF attributes to NetCDF input. #2938 - Introduce Node table at Model level again. #2886
- Use
RIBASIM_HOMEconsistently in tooling and scripts. #2891 - Set default interpolation behavior to block/constant. #2909 #2896
- Set default basin route priority to
0. #2942 - Rename allocation output terminology from realized to supplied. #2962
- Switch between control state and
ribasim.allocation. #2808 - Require QGIS 3.40 (LTR) or newer. #2862
- Use new icons for
model.plot()and docs. #2917 #2916 - Keep external file paths in Python model handling. #2943
- Add lazy reading and writing in Python. #2878
- Remove migration warnings on model load. #2826
Fixed
- Handle allocation case with zero links. #2959
- Fix default subnetwork ID to
1in Julia core. #2835 - Skip Junction in route-priority allocation problem building. #2801
All changes
What's Changed
- Pin PythonCall and juliacall to v0.9.31 by @visr in #2795
- Piracy: force
has_concretizationby @visr in #2796 - Update pre-commit hooks by @evetion in #2798
- Update pixi lockfile by @evetion in #2799
- skip junction in route priority allocation problem building by @verheem in #2801
- Fix typos and grammar errors in documentation by @Copilot in #2807
- Add technical reference docs by @verheem in #2809
- Replace cascading polder example by @verheem in #2811
- Add section on debugging unexpected flow rates by @visr in #2814
- Use Julia 1.12 and Pkg workspaces by @visr in #2815
- Update Julia manifest by @evetion in #2816
- Update pre-commit hooks by @evetion in #2818
- Update OrdinaryDiffEq by @visr in #2817
- Update pixi lockfile by @evetion in #2819
- Use Runic as Julia formatter by @visr in #2821
- Fix invalid binding errors reported by JETLS. by @visr in #2822
- Update AppxManifest.xml by @evetion in #2820
- Enable more ruff rules, and fix violations by @visr in #2823
- Use older runic pre-commit hook by @visr in #2825
- Stop threading by @visr in #2824
- Remove all migration warnings on model load by @visr in #2826
- Address Python test warnings by @visr in #2827
- Fix CLI threading logic by @visr in #2828
- Update PkgToSoftwareBOM requirement to 0.1.17 in /core by @dependabot[bot] in #2829
- Add compat for root-only deps, run dependabot on root by @visr in #2834
- fix default subnetwork id to 1 at Julia side by @verheem in #2835
- Switch between control state and ribasim.allocation by @verheem in #2808
- Update pixi lockfile by @evetion in #2847
- Switch from PackageCompiler to JuliaC without trimming by @visr in #2761
- Improve version mismatch docs and logging by @visr in #2849
- No convergence on ubuntu by @verheem in #2812
- Uncomment "netcdf dimensions" tests by @visr in #2854
- Add VSCode guide by @visr in #2857
- Various doc improvements by @visr in #2858
- Fix QGIS UI test script by @visr in #2861
- Update Julia manifest by @evetion in #2865
- Run all tests models with allocation by @verheem in #2810
- Require QGIS 3.40 (LTR), take 2 by @visr in #2862
- QGIS: Remove vendored tomllib by @visr in #2866
- Complete writing remaining results to net cdf by @verheem in #2856
- Bump prefix-dev/setup-pixi from 0.9.3 to 0.9.4 by @dependabot[bot] in #2872
- Update pixi lockfile by @evetion in #2871
- Update pre-commit hooks by @evetion in #2870
- Update rust edition and dependencies by @visr in #2873
- MSIX: Add
AppListEntry="none"by @visr in #2874 - Test reading NetCDF files from Delft-FEWS by @visr in #2859
- default to netCDF format for results storage by @verheem in #2855
- Update Julia manifest by @evetion in #2877
- Enhance documentation and support for NetCDF format in Ribasim API by @verheem in #2876
- Switch from pre-commit to prek by @visr in #2882
- Implement "Run Ribasim model" context menu by @visr in #2881
- Introduce Node table at Model again. by @evetion in #2886
- Use RIBASIM_HOME everywhere by @visr in #2891
- Update from Julia 1.12.4 to 1.12.5 by @visr in #2895
- Update pixi lockfile by @evetion in #2897
- Update Julia manifest by @evetion in #2898
- Exit QGIS better in Docker test by @visr in #2893
- [Python] Lazy reading and writing. by @evetion in #2878
- Add icon generator script + input file in util by @Fati-Mon in #2890
- change results documentation to netcdf format by @verheem in #2894
- Load NetCDF input in QGIS by @verheem in https://github.com...
v2026.1.0-rc1
This is the first pre-release running up to the stable v2026.1.0 release.
It is a release candidate, and we recommend most users to stick with v2025.6.0 for now.
We expect to make more breaking changes and add features before the final release.
This release sees significant performance increases for the core as well as the QGIS plugin, which especially help large models.
Route priority in allocation was added to steer the path taken by allocated water.
Breaking changes: In the Node table, source_priority has been renamed to route_priority, and the optional active column was removed.
Note that Ribasim Python will migrate existing models automatically, see also the new guide on updating Ribasim.
If nodes where set to inactive, they will have to be removed manually first.
The ribasim executable was moved to the bin subfolder, so users may need to update their PATH or RIBASIM_EXE environment variables.
Added
- Add Windows installation script. #2682
- Add ResidenceTime tracer. #2701
- Add allocation route priorities. #2731
- Document control by allocation. #2698
- Document installing QGIS plugin from qgis.org. #2687
- Add diagram for physical-allocation interaction. #2712
- Add "getting started" section to documentation. #2734
- Expand saveat documentation for months and years. #2709
- Delwaq: Generate more modular inputs. #2745
- Log full configuration. #2730
- Add indexes to database for QGIS performance. #2763
- Improve database read performance of the core. #2762
- Let
run_ribasimuseRIBASIM_EXEif set. #2783
Changed
- Optimize Jacobian computation for large models. #2624 #2685
- Allow replacing/deleting links. #2733
- Move
ribasimexecutable tobindirectory. #2758 - Remove feature where nodes can be inactive. #2764
- Make database reproducible by fixing timestamp. #2765
- By default, all nodes get a subnetwork ID of 1. #2766
- Deprecate
run_ribasim'scli_pathforribasim_exe. #2783 - Rename
source_prioritytoroute_priority. #2768
Fixed
- Fix "database disk image is malformed" error. #2763
- Fix timing of vertical forcing in allocation. #2739
- Fix reading uninitialized memory during allocation. #2691
- Validate Delwaq substance names. #2744
All changes
What's Changed
- Add a Windows installation script by @visr in #2682
- Document installing QGIS plugin from qgis.org by @visr in #2687
- Rename project to workspace in pixi.toml by @visr in #2683
- ci: Teamcity cleanup, updates and disable minio upload. by @evetion in #2689
- Update pre-commit hooks by @evetion in #2694
- Update pixi lockfile by @evetion in #2695
- Update Julia manifest by @evetion in #2693
- Replace CompatHelper.jl with dependabot by @visr in #2692
- Bump prefix-dev/setup-pixi from 0.9.2 to 0.9.3 by @dependabot[bot] in #2696
- Bring back #2624 better by @SouthEndMusic in #2685
- Add ResidenceTime tracer by @evetion in #2701
- Document control by allocation by @simulutions in #2698
- Fix the last Heisenbug by @simulutions in #2691
- Remove duplicate documentation by @simulutions in #2708
- Expand saveat documentation for months and years by @visr in #2709
- Add diagram for the physical <-> allocation interaction by @SouthEndMusic in #2712
- Prepare for datacompy 0.19 breaking changes by @visr in #2714
- Add RUF ruff rules by @visr in #2715
- Docs: cross reference global and local
source_priorityby @visr in #2718 - Update datacompy to 0.19.0 by @visr in #2722
- Bump actions/checkout from 5 to 6 by @dependabot[bot] in #2728
- Recommend Pixi VSCode Extension by @visr in #2732
- Log full configuration. by @evetion in #2730
- Allow replacing/deleting links. by @evetion in #2733
- Add a "getting started" section by @visr in #2734
- Use TimeZones.jl v 1.22.2 by @visr in #2738
- Add allocation route priorities by @simulutions in #2731
- Polder management with allocation by @simulutions in #2739
- Validate Delwaq substance names. by @evetion in #2744
- [Delwaq] More includes for LWKM. by @evetion in #2745
- Update pre-commit hooks by @evetion in #2747
- Update pixi lockfile by @evetion in #2748
- Unpin pandas-stubs now we use pandera 0.27 by @visr in #2750
- Update Julia Manifest.toml by @visr in #2751
- Create MSIX app package by @visr in #2710
- Remove activity by @evetion in #2764
- Add indexes to geopackage. by @evetion in #2763
- [core] Use SQLite fork for faster read performance. by @evetion in #2762
- Generate consistent binary Geopackage by @evetion in #2765
- Add UserDemand migration for removed
activefield by @evetion in #2772 - default subnetwork_id = 1 by @simulutions in #2766
- Bump peter-evans/create-pull-request from 7 to 8 by @dependabot[bot] in #2769
- Bump actions/upload-artifact from 5 to 6 by @dependabot[bot] in #2770
- Fix UserDemand migration by @evetion in #2775
- Let run_ribasim use RIBASIM_EXE if set by @visr in #2783
- Prepare changelog for v2026.1.0.dev1 by @visr in #2785
- source_priority to route_priority by @simulutions in #2768
- Preparations for pre-releases by @visr in #2784
- Bump version to 2026.1.0-rc1 by @visr in #2787
Full Changelog: v2025.6.0...v2026.1.0-rc1
v2025.6.0
This release brings significant improvements to the QGIS plugin, allocation, and CLI latency. The QGIS plugin is now published in the QGIS plugin repository and has a simplified UI; you can drag a TOML to QGIS to open a model. The black screen in the iMOD plugin is fixed in the latest version of the iMOD plugin, and the Arrow errors on loading results are also fixed.
Iteratively working on a model in a Python session has become easier now that model.<node_type>.add can replace existing nodes, and run_ribasim(toml_path) shows you live progress in all editors.
Breaking changes: There are two changes that shouldn't be breaking but might affect some users nonetheless. The input_dir default has been changed to "input". Python models now forbid any extra values in schema validation for stricter data integrity.
Added
- Add
run_ribasim(toml_path)convenience function. #2653 - Allow replacing nodes with add API. #2664
- Flow communication between primary and secondary networks. #2556
- Read NetCDF files with demand_priority. #2604
- Make reduction factor thresholds configurable. #2592 #2681
- QGIS: Add menu and dropdown interface. #2634
- Add docs on reloading model in QGIS plugin guide. #2583
- Document
pandasrequirement for QGIS plugin. #2642
Changed
- Set
input_dirdefault to "input". #2641 - Python: Forbid any extra values in (base)model for stricter validation. #2595
- Support Scientific Python SPEC 0 for broader compatibility. #2630
- QGIS: Always use GDAL instead of pyarrow for better stability. #2591
- Publish QGIS plugin. #2654 #2658
- Improved build performance and compilation. #2652
Fixed
- Finalize progress bar. #2665
- Fix Junctions with subnetwork ID. #2633
- Delwaq: Restore correct water/mass balance with Junctions. #2607
- Delwaq: Limit endtime for partially failed Ribasim runs. #2637
- Delwaq: Improved performance of flow boundary concatenation. #2597
- Fix remaining DelWAQ netCDF warnings. #2621
- Fix DataInterpolations integration bug. #2576
- QGIS: Fix empty Arrow results. #2585
- Log clear error on decreasing area in
S(h). #2600 - QGIS: Faster results drawing. #2618
- QGIS: Fix crash on Reload Ribasim model. #2661
- Reset
ribasim_versioninmodel_post_init. #2578 - Convert Path to str with
.as_posix()for cross-platform compatibility. #2579 - Support pydantic 2.12. #2650
All changes
What's Changed
- Use threads in CI. by @evetion in #2574
- Fix DataInterpolations integration bug by @SouthEndMusic in #2576
- Convert path to str with
.as_posix()by @visr in #2579 - Reset
ribasim_versioninmodel_post_initby @visr in #2578 - Add docs on reloading model in QGIS plugin guide by @visr in #2583
- Fix empty Arrow results by @visr in #2585
- Update typing in Ribasim Python by @visr in #2581
- Small interpolation improvements by @SouthEndMusic in #2589
- QGIS: Always use GDAL instead of pyarrow by @visr in #2591
- Switch to quarto-actions/publish by @visr in #2593
- [python] Forbid any extra values in (base)model by @evetion in #2595
- Use quarto-publish task by @visr in #2594
- [delwaq] Improved performance of flow boundary concatenation. by @evetion in #2597
- Bump prefix-dev/setup-pixi from 0.9.0 to 0.9.1 by @dependabot[bot] in #2601
- Log clear error on decreasing area in S(h) by @simulutions in #2600
- Update Julia manifest by @evetion in #2606
- Update pre-commit hooks by @evetion in #2609
- Update Julia manifest by @evetion in #2611
- Update pixi lockfile by @evetion in #2610
- Update pixi lockfile by @evetion in #2613
- Update pre-commit hooks by @evetion in #2612
- [QGIS] Faster results drawing. by @evetion in #2618
- Add edge_coordinates attributes to generate.py by @visr in #2619
- [delwaq] Restore correct water/mass balance with Junctions by @evetion in #2607
- [ci] Skip failing allocation test on Linux. by @evetion in #2620
- Read NetCDF files with demand_priority by @visr in #2604
- Fix remaining DelWAQ netCDF warnings by @visr in #2621
- Rebase PackageCompiler fork by @visr in #2622
- Order, order! by @evetion in #2625
- Revert skipping of Outlet allocation test. by @evetion in #2626
- Flow communication between primary and secondary networks by @SouthEndMusic in #2556
- Support Scientific Python SPEC 0 by @visr in #2630
- Set JULIA_CONDAPKG_BACKEND to Null by @visr in #2635
- [qgis] Add menu and dropdown. by @evetion in #2634
- [delwaq] Limit Delwaq endtime for partially failed Ribasim runs. by @evetion in #2637
- Bugfix: junctions with subnetwork ID by @simulutions in #2633
- Pass profile path for QGIS (plugins). by @evetion in #2640
- Use Julia 1.12, Pkg workspaces and JuliaC sans trimming by @visr in #2629
- [docs] Document
pandasrequirement for QGIS plugin. by @evetion in #2642 - Set
input_dirdefault to "input" by @visr in #2641 - Try JULIA_CPU_TARGET native by @visr in #2644
- Go back to Julia 1.11 by @visr in #2649
- Try pydantic 2.12.2 by @visr in #2650
- Split test_offline_delwaq_coupling by @visr in #2651
- Bump prefix-dev/setup-pixi from 0.9.1 to 0.9.2 by @dependabot[bot] in #2655
- QGIS release worthy by @evetion in #2658
- Get QGIS plugin ready to publish by @visr in #2654
- Set QGIS plugin prefix by @visr in #2659
- Don't specialize on build, take 2 by @visr in #2652
- Remove scripts/ tests/ from QGIS zip by @visr in #2660
- Make
is_layer_visiblemore robust by @visr in #2661 - Allow replacing nodes with add API by @visr in #2664
- Formulate in terms of flows, solve in terms of storages by @SouthEndMusic in #2624
- Add
run_ribasim(toml_path)function by @visr in #2653 - Finalize progress bar by @visr in #2665
- Revert "Formulate in terms of flows, solve in terms of storages (#2624)" by @visr in #2667
- Bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in #2668
- Improved testing for subnetwork communication by @simulutions in #2647
- [QGIS] Also visualize Area layers. by @evetion in #2673
- Update changelog for v2025.6.0 by @visr in #2676
- Use
warningsfor replacing nod...
v2025.5.0
This release focuses on improving allocation capabilities and performance optimizations.
We linearize the optimization problem, and Pump and Outlets can now listen to allocation to set the flow rate.
NetCDF output has been added, as well as experimental support for NetCDF input.
DiscreteControl now supports an upper and lower threshold to model hysteresis.
Editing models in QGIS is no longer supported; the plugin widget has been reduced one button.
The Ribasim Python installation section allows you to pick your favorite package manager.
Lastly, Ribasim is now multithreaded!
Breaking changes: In the DiscreteControl / condition table, greater_than has been renamed to threshold_high, and the optional threshold_low column was added.
The surface_runoff column was added to Basin / static and Basin / time.
Note that Ribasim Python will migrate existing models automatically, see also the new guide on updating Ribasim.
Added
- Add
surface_runoffto Basin fluxes. #2402 - Support NetCDF results. #2497
- Support NetCDF input. #2542
- Add multithreading. #2562
- Implement hysteresis on DiscreteControl. #2564
- Add
FlowBoundary / areapolygons. #2537 - Native multi-objective optimization in allocation. #2522
- Add control by allocation functionality. #2401
- FlowDemand supports multiple priorities. #2500
- Report cause of infeasibility in allocation problems. #2398 #2481
- Add
convergenceanddtto results for performance monitoring. #2405 - Warn when reading a new model with an old Ribasim Python version. #2410
- Add instructions to install using Pixi. #2415
- Add guide on updating Ribasim models. #2489
- Support DiscreteControl listening to a Basin's storage. #2573
Changed
- Allow two incoming control links for Pump and Outlet. #2531
- Use FlowDemand demand as minimum Pump/Outlet flow when allocation is not active. #2506
- Expand and improve LevelDemand functionality with absolute error handling. #2386 #2515
- Allocation optimization with warm start for better performance. #2466
- Scale storage and flow in allocation for numerical stability. #2407
- Switch from UMFPACK to KLU sparse linear solver for performance. #2391
- Use pandera v0.25, and revert using pyarrow dtypes. #2450
- QGIS: remove editing features for simplified workflow. #2472
- Use smooth interpolation of ContinuousControl and TabulatedRatingCurve functions. #2446 #2458
- Use a Reynolds based threshold for the ManningResistance relaxed root 2544
- Demand nodes with timeseries now use block interpolation 2568
Fixed
- Core model initialization speedup. #2548 #2533
- Fix validation error on multiple incoming control links. #2535
- Improve error message for DiscreteControl with no data. #2540
- Make convergence finite to avoid numerical issues. #2534
- Cache FlowDemand lookup to avoid expensive operations in
water_balance!. #2523 - Increase stacksize on Windows to 8 MB to prevent stack overflow. #2546
- Align timestep allocated and realized results in
allocation.arrow. #2554 - Support GeoPandas 1.1. #2547
All changes
What's Changed
- Generate a Ribasim-python SBOM by @deltamarnix in #2342
- Allocation renewal by @SouthEndMusic in #2266
- [TC] Implement custom Teamcity logging for reporting tests. by @evetion in #2348
- Use mirrors-typos to avoid tag warnings by @visr in #2387
- Explicit imports, complete the root project by @visr in #2392
- Use PrecompileTools and Preferences to compile specialized basic model on build. by @evetion in #2114
- Switch from UMFPACK to KLU sparse linear solver by @visr in #2391
- Pixi: initialize julia before SBOM and Quarto render by @visr in #2394
- better initial value of programming goal value by @simulutions in #2397
- Avoid running allocation models in regression and integration tests by @SouthEndMusic in #2396
- Go to DataInterpolations release by @visr in #2404
- allocation_init: Unique flow conservation constraint names based on node type by @jarsarasty in #2406
- Add convergence and dt to output. by @evetion in #2405
- Improve Pixi dev doc by @visr in #2409
- Add custom Copilot instructions by @visr in #2411
- Fix remove_link method call to remove_edge in delwaq generate.py by @Copilot in #2413
- Add surface_runoff to Basin by @evetion in #2402
- Scale storage and flow in allocation by @SouthEndMusic in #2407
- Migrate surface_runoff in Ribasim Python. by @evetion in #2416
- make_user_demand_allocated_bound by @SouthEndMusic in #2419
- Report cause of infeasibility by @simulutions in #2398
- Update pre-commit hooks by @evetion in #2428
- [docs] Some fixes by Sonnet. by @evetion in #2430
- Update Julia manifest by @evetion in #2423
- Fix Python test warnings by @visr in #2422
- Update pixi lockfile by @evetion in #2429
- Warn Python users of version incompatibilities (adds
packagingdep) by @visr in #2410 - Documenting phased approach for model building with associated data n… by @gijsber in #2427
- Remove CairoMakie from root project by @visr in #2441
- [Delwaq] Limit graph cycle detection to length 2. by @evetion in #2442
- control by allocation by @simulutions in #2401
- Add concentration interpolation objects by @SouthEndMusic in #2426
- Use averaged normalized convergence error by @evetion in #2448
- Improve fraction plot recipe. by @evetion in #2453
- Use pandera v0.25, and revert using pyarrow dtypes by @visr in #2450
- Fix s3_download.py to error when remote path does not exist by @Copilot in #2454
- Improve continuous control performance by @SouthEndMusic in #2446
- Update Julia manifest by @evetion in #2455
- Bump prefix-dev/setup-pixi from 0.8.10 to 0.8.11 by @dependabot[bot] in #2456
- Add instructions to install using Pixi by @visr in #2415
- Smoother rating curve by @SouthEndMusic in #2458
- Support giving
model_dirtorun_delwaqby @visr in #2465 - Test piecewise linear basin profile by @SouthEndMusic in #2395
- QGIS: remove editing features by @visr in #2472
- Use
engine: juliaandjuliacallin docs by @visr in #2474 - Use patched PackageCompiler to reduce artifacts folder by @visr in https://github.com/Deltares/Ribasi...
v2025.4.0
This release had a big push on the stability and performance for large models.
Users can now also provide a level-storage relation in Basin / profile.
This means old models need to be migrated by reading them into Ribasim Python, and writing them out.
We are working on reformulating the allocation problem.
Until this work is finished, allocation remains an experimental feature of Ribasim.
Added
- Reload Ribasim model in QGIS. #2307
- Support storage column in Basin / profile #2278
- Allow Junction to Terminal links. #2295
- Add model performance debugging guide #2308
- Make FlowBoundary interpolation method configurable #2285
- Output interpolated Basin / profile in debug mode #2344
- Write log file via BMI #2370
Changed
- Reformulate the allocation problem. #2266
- Mark allocation as experimental. #2266
- Low storage threshold based on 10 cm depth #2357
- Stability: decrease relative tolerance over time. #2277
- Use block interpolation for FlowBoundary by default #2285
- Remove backtracking, add more caching #2359
- More realistic smoothing around
Δh = 0in ManningResistance. #2365
Fixed
- Fix writing results on
saveat = 0#2305 - Fix error in flow limiter #2334
- Fix cyclic Basin forcing #2313
- BMI: return 1 on update if solve not successful #2341
All changes
What's Changed
- Continuous control docs fix by @SouthEndMusic in #2245
- Update to Julia 1.11.5 by @visr in #2243
- Reduce residual calls by @SouthEndMusic in #2242
- Bump prefix-dev/setup-pixi from 0.8.5 to 0.8.8 by @dependabot in #2250
- Refactor parameter initialization by @SouthEndMusic in #2251
- Update Delwaq artifact rule by @visr in #2257
- Fix QGIS Docker CI; add pandas and return code by @evetion in #2256
- Use CVector for our state by @visr in #2258
- Update pre-commit hooks by @evetion in #2270
- Update pixi lockfile by @evetion in #2271
- CompatHelper: bump compat for DifferentiationInterface to 0.7 for package core, (keep existing compat) by @github-actions in #2276
- Add alternative installation method using pixi for Ribasim in the docs by @simulutions in #2275
- Decrease relative tolerance over time. by @evetion in #2277
- Allow Junction to Terminal links by @visr in #2295
- Only run CI on relevant commits. by @evetion in #2292
- New integration test model by @visr in #2264
- Update Julia manifest by @evetion in #2268
- Remove callstacks from dev docs by @visr in #2302
- Use tasks for s3 download and upload by @visr in #2301
- Allow Plotly 6 by @visr in #2303
- QGIS reload Ribasim model by @evetion in #2307
- Fix writing result on water_balance_error callback error. by @evetion in #2305
- Add julia task that can generate the SBOM for Ribasim.jl by @deltamarnix in #2306
- Add debugging guide to the docs by @evetion in #2308
- Run
generate-sbom-ribasim-coretogether with manifest updates by @visr in #2310 - Fix s3-download for new folders. by @evetion in #2316
- Update Julia manifest by @evetion in #2312
- Don't reresolve test environment by @visr in #2324
- Update rust to 1.87 by @visr in #2318
- Update pre-commit hooks by @evetion in #2333
- [TC] Try to use cache with --check-bounds=yes. by @evetion in #2332
- Formulate basin properties in flow limiter based on
uinstead ofduby @SouthEndMusic in #2334 - Update pixi lockfile by @evetion in #2317
- Fix cyclic Basin forcing by @SouthEndMusic in #2313
- Support storage column in basin profile by @simulutions in #2278
- Configurable FlowBoundary interpolation by @SouthEndMusic in #2285
- Add CArrays methods by @visr in #2330
- Use
check-bounds=yeswhen starting Julia by @evetion in #2345 - migration for new storage column by @simulutions in #2343
- BMI: return 1 on update if solve not successful by @visr in #2341
- Simplify exact integration by @SouthEndMusic in #2347
- Add migrate-model task by @visr in #2358
- Low storage threshold based on 10 cm depth by @SouthEndMusic in #2357
- Adjustments to the tabulated rating curve by @peter-n-jansson in #2346
- Add drought test by @SouthEndMusic in #2337
- output interpolated basin profile in debug mode by @simulutions in #2344
- Switch to latest
SparseConnectivityTracerrelease by @SouthEndMusic in #2361 - Remove backtracking, add more caching by @SouthEndMusic in #2359
- Update pre-commit hooks by @evetion in #2364
- Update pixi lockfile by @evetion in #2362
- Update Julia manifest by @evetion in #2363
- CI: Allow more differences between solvers by @visr in #2367
- revert relaxed root by @simulutions in #2365
- Bump prefix-dev/setup-pixi from 0.8.8 to 0.8.10 by @dependabot in #2374
- Write log file via BMI by @visr in #2370
- Error message when no basins by @simulutions in #2360
- Update changelog by @visr in #2377
- fix mistaker in run invalid models by @simulutions in #2379
- Convert docs from ipynb to qmd by @visr in #2376
- Prepare release v2025.4.0 by @visr in #2380
New Contributors
- @simulutions made their first contribution in #2275
- @peter-n-jansson made their first contribution in #2346
Full Changelog: v2025.3.0...v2025.4.0
v2025.3.0
The only breaking change in this release is to disallow connecting a single FlowBoundary to multiple Basins.
There are large improvements in the ability to visualize results on the map in QGIS.
We also welcome the Junction node to the family, which will help laying out networks in a recognizable manner.
Added
- Add spatio-temporal results layers to QGIS. #2208
- Add topological (straight line) link view toggle to QGIS. #2208
- Added Junction node type. #2175
- Write results and log bottlenecks also on an interrupt or crash. #2191 #2200
- Log computation time and save it to
solver_stats.arrow. #2209 - Experimental support for writing the model network and results into files used by Delft-FEWS,
model.to_fews. #2161 - Document
results/concentration.arrow. #2165
Changed
- Allow max 1 outflow neighbour for FlowBoundary. #2192
- Automatic differentiation is enabled by default again,
autodiff = true, leading to better performance. #2137 #2183
All changes
What's Changed
- Use named function as weight function by @visr in #2146
- CI: Force rebuilding on tags by @evetion in #2152
- Pixi update pyarrow by @visr in #2154
- VSCode parallel tests by @visr in #2153
- [skip ci] Trigger TC builds on PRs. by @evetion in #2155
- [skip ci] Add SonarCloud properties by @evetion in #2156
- Add
model.to_fews(region_dir)by @visr in #2161 - Document concentration results by @visr in #2165
- CompatHelper: bump compat for DataInterpolations to 8 for package core, (keep existing compat) by @github-actions in #2168
- Use DataInterpolations v8 by @visr in #2170
- Introduce differentiation interface by @SouthEndMusic in #2137
- Write concentration.nc to Delft-FEWS by @visr in #2167
- Update Julia to 1.11.4 by @visr in #2181
- Use
autodiff = Trueas the default again by @visr in #2183 - Update Julia manifest by @evetion in #2184
- Simplify "Pre-commit auto update" by @visr in #2185
- Update pre-commit hooks by @evetion in #2186
- Update pixi lockfile by @evetion in #2187
- Write results also on an interrupt or crash by @visr in #2191
- List
optimization_typeinallocation_flow.arrowby @visr in #2195 - Allow max 1 outflow neighbour for FlowBoundary by @visr in #2192
- Implement success by @visr in #2200
- Replace \n by newline in Mermaid diagram labels by @visr in #2194
- Implement Junction Node by @evetion in #2175
- Update pixi lockfile by @evetion in #2205
- Update Julia manifest by @evetion in #2201
- Add computation time by @visr in #2209
- Bump prefix-dev/setup-pixi from 0.8.3 to 0.8.4 by @dependabot in #2210
- Use OrdinaryDiffEqDifferentiation 1.6 by @visr in #2211
- Add temporal Flow and Basin results to QGIS. by @evetion in #2208
- Don't automatically save the layer style on changes. by @evetion in #2213
- Update Julia manifest by @evetion in #2212
- Add
label_flow_ratefunction to QGIS by @visr in #2217 - Disable scratch layer warning on project close while using Ribasim. by @evetion in #2218
- Add temporal allocation output layers. by @evetion in #2215
- Fix QGIS not loading concentration arrow on both codepaths. by @evetion in #2219
- QGIS format labels better by @visr in #2220
- Fix Allocation Flow Result in QGIS shifts due to link_id 0. by @evetion in #2223
- Update basin.qmd by @Fati-Mon in #2135
- Use view to avoid allocations in flow limiter by @visr in #2224
- Fix incorrect label placement for topology in QGIS. by @evetion in #2228
- Make QGIS line markers follow topology by @evetion in #2236
- Bump prefix-dev/setup-pixi from 0.8.4 to 0.8.5 by @dependabot in #2235
- Reduce allocations in residual function by @visr in #2234
- [skip ci] Docs: Fix unit notation for Outlet. by @evetion in #2240
- Prepare release 2025.3.0 by @visr in #2237
Full Changelog: v2025.2.0...v2025.3.0
v2025.2.0
In this release, time is of the essence. We now support dynamic Pumps and Outlets, as well as DiscreteControl thresholds.
For each node, timeseries can be marked as cyclic, such that yearly recurring timeseries can be easily used without repetition.
We also developed tools to compare model input in Python.
The most visible change is the renaming of Edge to Link. Like always, existing models are migrated to the new version by reading them with Ribasim Python, and writing out the updated version. For now in Python model.edge will continue to work to ease the transition.
Added
- Check Model equality in Python. #2057
- Compare two models in Python. #2080
- Support cyclic input timeseries. #2081 #2102
- Time dependent
greater_thanthresholds in DiscreteControl. #2079 - Validation error on connector nodes having the same from and to Basin. #2112
- Support time dependent Pump and Outlet tables. #2110
Changed
Fixed
- Faster initialization of large tables. #2026
- Declare incompatibility with Pandera v0.23+. #2120
- Decrease the smoothing around
Δh = 0in ManningResistance. #2136
All changes
What's Changed
- Update Julia to 1.10.8 by @visr in #2017
- Concrete return type of
BMI.get_value_ptrby @visr in #2018 - Edit some pixi dependencies by @visr in #2021
- Rename Edge to Link by @evetion in #2023
- Pixi: use default as our dev environment by @visr in #2024
- Update Julia manifest by @github-actions in #2027
- Update pixi lockfile by @github-actions in #2030
- Fix link_type migration by @visr in #2025
- Speed up the loading of large tables by @visr in #2026
- Fix colname migration utility function by @visr in #2032
- Update to Julia 1.11 by @visr in #2031
- Avoid Plotly 6 by @visr in #2034
- CompatHelper: bump compat for LinearSolve to 3 for package core, (keep existing compat) by @github-actions in #2043
- Allow ruff-vscode to fix notebooks again by @visr in #2047
- Unblock and update ComponentArrays by @visr in #2049
- Source priority input by @SouthEndMusic in #2022
- Update pixi lockfile by @github-actions in #2052
- Don't remove or reset artifacts anymore by @visr in #2050
- Set pixi-version to v0.41.1 by @visr in #2053
- Go back to the latest pixi release by @visr in #2055
- Fix extra newlines in codegen output on Windows by @visr in #2054
- [CI] Quote all branches with a /. by @evetion in #2061
- Implement model equality by @evetion in #2057
- Use PAT instead of default token to trigger automatic PRs. by @evetion in #2063
- Update to OteraEngine v1.1 by @visr in #2065
- Format all the YAMLs by @visr in #2066
- Make it easier to review Julia manifest updates by @visr in #2069
- Bump prefix-dev/setup-pixi from 0.8.1 to 0.8.2 by @dependabot in #2071
- Update Julia manifest by @evetion in #2070
- Convert autodiff Boolean to ADTypes by @visr in #2076
- Upgrade to DataInterpolations v7 by @visr in #2019
- Implement
diffon Models. by @evetion in #2080 - Time dependent thresholds by @SouthEndMusic in #2079
- Update Manifest, test ComponentArrays fix by @visr in #2083
- Bommelerwaard test model by @SouthEndMusic in #2056
- Quiet datacompy by @visr in #2087
- Bump prefix-dev/setup-pixi from 0.8.2 to 0.8.3 by @dependabot in #2089
- Store state node IDs in parameters by @visr in #2086
- Modify QGIS style symlinking by @visr in #2093
- Add cyclic forcing support by @SouthEndMusic in #2081
- Remove PR template by @visr in #2100
- Fix artifact location of Delwaq on TC. by @evetion in #2107
- Try unsetting SSL env vars once by @visr in #2099
- Run DataFrame validators ASAP. by @evetion in #2104
- Update
priority->demand priorityin docs for demand nodes by @SouthEndMusic in #2109 - Remove RibasimMakieExt by @visr in #2113
- Support more cyclic timeseries by @SouthEndMusic in #2102
- Make min_upstream_level and max_downstream_level controllable by @visr in #2088
- Validate return links by @SouthEndMusic in #2112
- Update Julia manifest by @evetion in #2116
- Coerce geometries to 2D by @visr in #2111
- Replace ComponentVector with Vector by @visr in #2115
- Fix DelWAQ artifact name by @visr in #2119
- Update pixi lockfile by @evetion in #2117
- Don't overload Base.dirname by @visr in #2123
- Revert "Make min_upstream_level and max_downstream_level controllable… by @visr in #2125
- Leave user data out of
allocation.arrowfor priorities for which the user does not have a demand by @SouthEndMusic in #2131 - test
LevelDemandexcess in results by @SouthEndMusic in #2132 - Add temporal Pump and Outlet. by @evetion in #2110
- Decrease relaxed root coefficient to 1e-5 by @visr in #2136
- Write changelog for release by @visr in #2144
Full Changelog: v2025.1.0...v2025.2.0
v2025.1.0
The first release of 2025 makes the Ribasim core more robust and stable, and speeds up
initialization for large models. The biggest new feature is the experimental support for
calculating tracers in Ribasim directly, which will hopefully make it easier to track where
the water resources are heading.
Added
- Remove Z coordinate on constructing Node in Python. #1986
- Add "Basin / subgrid_time" table. #1975
- Sign Ribasim binaries. #2007
- Experimental: Calculate tracer concentrations internally. #1849
- Document parsing Delwaq results. #1845
Removed
- Drop Python 3.10 support. #2012
Changed
- Allocation: optimize per source. #1927
- The Edge table no longer supports
subnetwork_id; this is automatically inferred. #1956
Fixed
- ManningResistance is more stable around Δh=0. #1896
- Fixes to Delwaq model generation. #1903 #1917 #1948
- Add step limiter to avoid negative flows or too large flows. #1911 #1912
- Fix README.md in builds. #1935 #1938
- Speed up initialization. #1977
- Automatically name index in Python. #1974
- Table sorting related fixes. #2003
All changes
What's Changed
- Remove database from struct Toml by @visr in #1882
- Revert to old tolerances for level control. by @evetion in #1893
- Use
hatch buildrather thanpython -m buildby @visr in #1891 - Add pixi command to generate delwaq input for a given model by @evetion in #1895
- Document parsing Delwaq results. by @evetion in #1845
- Save all results via saving callback (follow up) by @SouthEndMusic in #1896
- Add explanation of water balance error options by @SouthEndMusic in #1899
- Update compat requirements for stdlibs by @visr in #1898
- Fix duplicate boundaries in Delwaq generation. by @evetion in #1903
- Calculate tracer concentrations internally by @evetion in #1849
- Minor edits of comments by @visr in #1908
- Add
step_limiter!to avoid negative flows or too large flows by @SouthEndMusic in #1911 - Introduce experimental config section and use it for concentrations. by @evetion in #1909
- Update interpolation type parameters by @SouthEndMusic in #1913
- Switch to Julia 1.11.1 by @visr in #1914
- Added DVC, teamcity-messages and Julia TC integration by @evetion in #1915
- [WQ] Drop duplicate boundaries instead of making them unique. by @evetion in #1917
- Finetune
step_limiter!by @SouthEndMusic in #1912 - Add forgotten contact.qmd. by @evetion in #1924
- Update pre-commit hooks by @github-actions in #1923
- Update Julia manifest by @github-actions in #1925
- Update pixi lockfile by @github-actions in #1926
- Callstack visualization by @SouthEndMusic in #1922
- Some small tweaks to the callstack plots. by @evetion in #1928
- Return nothing from mutating BMI functions by @visr in #1931
- Use FlatVector for generating concentration table by @SouthEndMusic in #1933
- Fix README.md in builds by @visr in #1935
- Add some basic concentration tests. by @evetion in #1934
- CompatHelper: bump compat for StructArrays to 0.7 for package core, (keep existing compat) by @github-actions in #1939
- Bump codecov/codecov-action from 4 to 5 by @dependabot in #1940
- Fix test_version during release process and simplify versions in README.md by @visr in #1938
- Remove isolated nodes from Delwaq network. by @evetion in #1948
- Refactor of concentration code by @SouthEndMusic in #1929
- Fix description of
FlowBoundaryin docs by @SouthEndMusic in #1950 - Avoid
curl_easy_setopterror logs by @Manangka in #1641 - Allocation: optimize per source by @SouthEndMusic in #1927
- Get rid of
Base.RefValuefields by @SouthEndMusic in #1954 - Edits to tutorial text by @visr in #1951
- Exclude fewer Ruff rules by @visr in #1955
- Add allocation training model by @SouthEndMusic in #1958
- Get rid of specifying sources in allocation by edges by @SouthEndMusic in #1956
- Not so auto update by @visr in #1959
- Remove unused outstate config option by @visr in #1967
- Put level as the first column in basin.arrow by @visr in #1971
- Automatically name index by @visr in #1974
- Speed up initialization by @visr in #1977
- Add
Basin / subgrid_timetable by @visr in #1975 - Bump schema version to 3 by @visr in #1979
- Add generated, performant snake_case for NodeID. by @evetion in #1982
- Don't update concentrations if not opting in to feature by @visr in #1980
- Update pre-commit hooks by @github-actions in #1983
- Update pixi lockfile by @github-actions in #1984
- Update Julia manifest by @github-actions in #1985
- Update Julia manifest by @github-actions in #1990
- Update pre-commit hooks by @github-actions in #1989
- Fix for OteraEngine v1 by @visr in #1991
- Update pixi lockfile by @github-actions in #1992
- Remove Z coordinate on constructing Node by @visr in #1986
- refactor: change to
depends-onby @tdejager in #1993 - Update pixi lockfile by @github-actions in #1995
- Sorting things out by @visr in #2003
- CompatHelper: bump compat for Makie in [weakdeps] to 0.22 for package core, (keep existing compat) by @github-actions in #2005
- Switch artefact to a signed one. by @evetion in #2007
- Use interpolations to update forcing in Basin by @visr in #2006
- Make nightly release by @evetion in #2008
- Drop Python 3.10 support by @visr in #2012
- Remove prerequisites from tutorial by @visr in #2009
- Fix minio upload of binaries by @evetion in #2014
- Prepare release v2025.1.0 by @visr in #2013
New Contributors
Full Changelog: v2024.11.0...v2025.1.0
v2024.11.0
This major new release contains many improvements. A new formulation allows much smaller water balance errors, which is combined with several performance improvements. Ribasim Python does more validation that was previously only done in the core. The Ribasim QGIS plugin now sets the relations between tables for easier model inspection. Adding min_upstream_level and max_downstream_level to Pump and Outlet means DiscreteControl is often no longer needed.
The most significant breaking change is making the node_id and edge_id the index of the Node and Edge table; these need to be globally unique.
Starting from this release Ribasim is labeled as beta software. Since development is currently mainly driven by applications in the Dutch water system, we expect that addition work needs to be done for general use outside the Netherlands.
For coupled simulation with MODFLOW and/or MetaSWAP, this release is part of the iMOD Coupler, specifically release v2024.4.0
Added
- Support discrete control based on an external concentration condition. #1660
- Add
results/solver_stats.arrowwith solver statistics over time. #1677 - Add icon to
ribasim.exeon Windows. #1712 - Save QGIS styling in the model database. #1713
- Add Delwaq coupling guide. #1619
- Solver speedup due to backtracking relaxation. #1761
- Reject adding a duplicate edge in Python. #1719
- Support transient UserDemand return factor. #1727
- Document the interpolation of input data. #1720
- Automate Jacobian sparsity detection. #1606
- Support specifying the
edge_idasmodel.edge.add(a, b, edge_id=5). #1737 - Use https://ribasim.org/ to host our documentation. #1736
- Validate geometry types in Python. #1760
- Add relationships between tables in QGIS. #1755
- Support migrating from older Ribasim versions in Python. #1764
- Add quick start guide to docs. #1787
- Add
min_upstream_levelandmax_downstream_levelto Pump and Outlet. #1792 - Add
max_downstream_levelto TabulatedRatingCurve. #1795 - Validate edge connections in Python. #1765
- Add low storage reduction factor to ManningResistance. #1796
Changed
- Refactor of the core to ensure smaller water balance errors. #1819
- Make
node_idglobally unique. #1717 - Make the Node ID the index of the Node table, and Edge ID for Edge. #1737
- Make more Python functions private. #1702
- Put the contents of the CLI zips in a folder. #1722
- Changed water balance error definition. #1767
- Disallow missing priority parameter when using allocation. #1745
- Rename Outlet's
min_crest_leveltomin_upstream_level. #1788 - Only allow flow under gravity in TabulatedRatingCurve. #1795
- Use
dtype_backend="pyarrow"for Pandas DataFrames. #1781
Fixed
All changes
What's Changed
- Use install-ci on CI by @visr in #1656
- Update release process a bit by @visr in #1657
- Update basin.qmd by @Fati-Mon in #1662
- Remove
SmoothInterpolationas a dependency by @SouthEndMusic in #1649 - Delwaq pixi run install-ci by @visr in #1664
- Listen to concentration by @SouthEndMusic in #1660
- test
libribasim.get_value_ptrwith all names by @SouthEndMusic in #1665 - Refactor build pipeline by @Manangka in #1645
- Ruff: apply all fixes by @visr in #1667
- Add technical documentation for allocation by @Jingru923 in #1579
- Fix development tools by @deltamarnix in #1670
get_value_ptr("basin.subgrid_level")now return non-nan values by @Jingru923 in #1671- Update pre-commit hooks by @github-actions in #1673
- Update pixi lock file by @github-actions in #1692
- Pin older Delwaq build by @evetion in #1694
- Add
Makieextension to Ribasim core by @SouthEndMusic in #1675 - Write output table with solver stats per saveat by @SouthEndMusic in #1677
- Fix links in Python README.md files by @visr in #1696
- Use
BackTrackingin non-linear interations by @SouthEndMusic in #1697 - Make more python functions private by @SouthEndMusic in #1702
- Plot labels + clean up running instructions in examples notebook by @SouthEndMusic in #1699
- Enforce aspect ratio bound and limit figure size in docs by @SouthEndMusic in #1706
- Update pixi lockfile by @github-actions in #1708
- Update GitHub action for updating lockfiles by @visr in #1701
- Use pixi to fix julia package permissions on Windows by @evetion in #1710
- Update figures in README and docs homepage by @SouthEndMusic in #1711
- [chore] Make mypy happy again by @evetion in #1714
- Add "add icon" step to windows pipeline by @Jingru923 in #1712
- Save QGIS styles in geopackage and remove them from QGIS plugin by @evetion in #1713
- Use a fixed relaxation factor of 0.1 by @visr in #1715
- Add Delwaq coupling guide by @evetion in #1619
- Regression tests for ODE solver and integration tests for production model is in place by @Jingru923 in #1695
- Make node_id globally unique (again) by @evetion in #1717
- no more Zip bomb from built binaries by @Jingru923 in #1722
- Duplicate edges by @Jingru923 in #1719
- fix regression test after global uniq id by @Jingru923 in #1728
- Use targets for windows specific pipeline by @evetion in #1731
- Support transient user demand return factor by @Jingru923 in #1727
- Interpolation documentation by @SouthEndMusic in #1720
- Symbolic Jacobian sparsity by @visr in #1606
- Make edge_id user configurable by @evetion in #1737
- Document dependency use by @SouthEndMusic in #1738
- Add CNAME file for docs deployment by @evetion in #1742
- clarify priority in user demand node by @Jingru923 in #1746
- Use relaxed square root for ManningResistance by @SouthEndMusic in #1750
- Use ribasim.org domain name by @visr in #1736
- Load qml styles in QGIS by @evetion in #1748
- Move from ReTestItems to TestItemRunner by @visr in #1758
- Remove TimerOutputs by @visr in #1749
- refactor
get_influxfor performance by @SouthEndMusic in #1753 - Validate geometry types in Python. by @evetion in #1760
- Remove
buildpackage from our environment. by @deltamarnix in #1766 - Initial qgis test pla...
v2024.10.0
For this release we said goodbye to the problematic FractionalFlow node, but welcome the ContinuousControl as a long requested feature.
Added
- Control: Add ContinuousControl node type. #1602
- Control: Support listening to flow through connector nodes. #1594
- Validate that TabulatedRatingCurve levels are above Basin bottom. #1607
- Validate that Outlet crest levels are above Basin bottom. #1607
- Always show convergence bottlenecks. #1636
- Docstrings for Ribasim Python. #1643
- Allocate to UserDemand from directly connected Basin if possible. #1581
- Add
basin_state.arrowresults. #1626 - Also write stacktraces to
ribasim.log. #1653
Changed
- Require QGIS 3.34 (LTR) or newer for Ribasim QGIS plugin.
Fixed
- Compatibility with latest NumPy, Pandera and PyArrow releases. #1618
- LevelDemand can now be without
min_levelormax_level. #1629
Removed
- Removed unused urban runoff variable from Basin. #1611
- Removed unneeded static table from Terminal. #1624
- Removed FractionalFlow node. #1616
All changes
What's Changed
- change the names of artifacts by @Jingru923 in #1572
- quick fix the name of our executables by @Jingru923 in #1578
- Fix QGIS crash on plugin initialization by @visr in #1580
- Add controllable parameters table by @SouthEndMusic in #1584
- Update Julia manifest by @github-actions in #1598
- Support listening to flows trough conservative connector nodes by discrete control by @SouthEndMusic in #1594
- CompatHelper: bump compat for TranscodingStreams to 0.11 for package core, (keep existing compat) by @github-actions in #1604
- Fix cascading polders image in docs by @visr in #1613
- Stop using local JULIAUP_DEPOT_PATH by @visr in #1614
- Use the latest greatest Python deps by @evetion in #1618
- Use pixi update to update lockfile by @visr in #1622
- Validate level with upstream basin by @Jingru923 in #1607
- Remove urban_runoff from Basin by @visr in #1611
- Remove
Terminal / statictable by @visr in #1624 - Fix DataInterpolations to 0.5.2 by @visr in #1628
- Remove FractionalFlow by @visr in #1616
- Require QGIS 3.34 (LTR); remove activation scripts by @visr in #1627
- Take discontinuities in flow introduced through BMI into account by @SouthEndMusic in #1634
- Fix the failing pipeline by @Manangka in #1640
- Always show convergence bottlenecks by @visr in #1636
- Resolve the SSL error produced when running the build task on windows by @Manangka in #1644
level_demandcan now be without max_level or min_level by @Jingru923 in #1629- Remove unapplied patches by @Manangka in #1646
- QGIS: Update minimal TOML with new required fields by @visr in #1647
- Update install.qmd by @Fati-Mon in #1642
- Update docstrings of Ribasim python API by @SouthEndMusic in #1643
- Add
ContinuousControlnode by @SouthEndMusic in #1602 - Improve subprocess docs by @visr in #1650
- Allocate to UserDemand from directly connected basin if possible by @SouthEndMusic in #1581
- Add
basin_state.arrowresults by @visr in #1626 - Log stacktraces by @visr in #1653
- Prepare release 2024.10.0 by @visr in #1654
Full Changelog: v2024.9.0...v2024.10.0