Python-Hydrology-Tools: a list of open source hydrology packages
:droplet: This repository holds a list of open source Python packages interesting to Hydrologists
At a glance
- What is it?
- This repository is a curated list of open source Python packages for hydrologists, and the part that makes it more than a link dump is that each entry carries a version, a last release date and a maintenance marker, all refreshed by a script. It is a snapshot of the field's software health as much as a catalogue of it.
- Who is it for?
- Python-Hydrology-Tools fits a hydrologist choosing between modelling frameworks, or someone entering the field who needs to know which Python projects are still alive, and the maintenance markers are more useful than the descriptions. It is the wrong tool as a dependency, because it is a list and not a package, and it is the wrong tool if you need a catalogue of R, Julia or Fortran hydrology tools, since the scope is Python only.
- Can I use it commercially?
- Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
- Is it still maintained?
- Yes. The repository last received commits 7 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 24, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A list that a script keeps honest
The README describes the project as the author's attempt to list interesting open source Python projects that can be used in the field of hydrology, and it is attributed to Raoul A. Collenteur of Collenteur Hydroconsult GmbH.
The part that makes it more than a link dump is described in the second half of that opening paragraph. In a 2024 update, the author automated various tasks to maintain the quality of the list, and added more information about the packages that can serve as quality indicators. The description now lists when the last update on PyPI or Conda was, to highlight whether a package is probably active or inactive, and information about the FAIR repository, a description paper and continuous integration testing is included. The stated aim is that more and more packages develop according to common research software development best practices, and suggestions as issues or pull requests are welcome.
That is the real subject of the repository. A list of hydrology packages is useful, but a list of hydrology packages with a maintenance status attached is the thing a hydrologist actually needs, because the field is full of models that were published, cited once, and then never touched again.
The primary language is Python, the topics are hydrology, hydrologists and open-source, and the default branch is master.
Every row is a maintenance report
The table structure is where the work is. Each entry has a name, a description, a PyPI and Conda column, a docs column, a CI column and a paper column, and the description field carries the package version and the date of the last update, followed by a marker that says whether the package is probably active or probably inactive.
So a row tells you several things at once: the current version, when it was last released, whether the release was on PyPI, on Conda or on both, whether the project publishes documentation, whether it runs continuous integration, and whether there is a paper describing it. The FAIR repository column is the one that stands out, since a reference to a repository archive is a different kind of signal from a documentation link.
The examples in the catchment table show how the marker sorts the field. HydPy is at version 6.4.0 with a last update of 2026-06-23 and is marked active, SuperflexPy is at 1.3.3 with a last update of 2026-07-03 and is marked active, and NeuralHydrology at 1.13.0 with a last update of 2026-01-14 is marked active with a paper linked. CMF at 2.0.2 and HydroGR at 1.2.2 are also marked active.
Against that, SUMMA at 1.2.0 with a last update of 2019-01-16, Xanthos at 2.4.1 from 2021-08-10, SMARTPy at 0.2.2 from 2022-02-14, VIC at 0.0.1 from 2016-06-18 and wrfhydropy at 0.0.21 from 2024-02-16 are all marked inactive.
The categories are the sub-disciplines of hydrology
The list is organised by the branch of hydrology rather than by function, which is the right cut for a domain where a user usually arrives with a problem rather than a task. The table of contents gives the full set:
- [Catchment Hydrology](#catchment-hydrology)
- [Data Collection](#data-collection)
- [Evaluation](#evaluation)
- [Geospatial](#geospatial)
- [Groundwater](#groundwater)
- [Meteorological tools](#meteorological-tools)
- [Miscellaneous](#miscellaneous)
- [Optimization and Uncertainty](#optimization-and-uncertainty)
- [Statistics](#statistics)
- [Unsaturated Zone](#unsaturated-zone)
- [Legacy Packages](#legacy-packages)The last category, Legacy Packages, is the one that tells you the author is not going to quietly drop old software. Some of the most cited hydrological models in existence predate Python's packaging ecosystem, and a list that only showed what was updated this year would be a list nobody could use for a literature review.
The separation between Evaluation and Optimization and Uncertainty is also worth noting, because in a modelling workflow those are different activities. Evaluation is checking a model against observations, and optimization with uncertainty is fitting a model and quantifying what you do not know about it, and the packages that do one are not the packages that do the other.
The generator behind the README
The repository layout shows that the README is produced rather than written. At the root there is `list.json`, which is the data, and three Python scripts: `generate_list.py`, `update_list.py` and `check_urls.py`, plus a `scripts` directory and a `.github` directory for the workflows that run them.
The names line up with a maintenance pipeline. `update_list.py` is the task that refreshes the metadata, which means the last release date and the version for every entry, and the marker that depends on them. `generate_list.py` turns the data into the table. `check_urls.py` checks the links, which is the one that matters for a list this long, since a link to a moved repository is the most common way a list like this rots.
That is a more useful design than a hand-maintained table, and it explains the feature the README advertises. A quality indicator that a person typed in by hand would be wrong within a year, while one a script recomputes is right as long as the script runs.
The repository has no GitHub releases, which is right for a list, and the licence is not identified in the repository listing, with no licence file among the top-level entries. The links it contains point at other people's projects, each with its own licence, and the list itself states no grant for its own text and data.
Activity is inferred, and the inference has a failure mode
The marker in each description is derived from one fact, the date of the last update on PyPI or Conda, and the README is careful about the wording, saying the package is probably active or inactive rather than that it is.
That caution is justified, and it points at the limitation of the approach. A mature research package can go a long time without a release, because releasing is work and a working install is not urgent, and the list will mark it inactive for doing nothing wrong. The marker measures release activity, not maintenance health, and a project that ships continuously without releasing will look the same as one that is abandoned.
There is a second direction of error, which the other columns partly address. A package can have a recent release and no continuous integration, no repository archive and no paper, and the presence of the CI and FAIR columns is what lets a reader tell the two cases apart.
The version numbers also carry information. Several entries sit at 0.0.x, VIC at 0.0.1 and wrfhydropy at 0.0.21, which for a package on PyPI means the author has never claimed a stable API, and a team planning to build on one of those should read its documentation before assuming the interface will hold.
None of this makes the list wrong. It makes the marker a hint, and the README says as much.
What the list says about the state of the field
Reading the catchment table as a whole gives a picture that is more interesting than any individual entry.
The recently active packages are the ones that are either new frameworks or deliberately rearchitected ones. SuperflexPy, at 1.3.3 with a last update in July 2026, is described as a new open source framework for building conceptual hydrological models, and HydPy at 6.4.0 is a framework for the development and application of hydrological models based on Python. NeuralHydrology at 1.13.0 is a Python library to train neural networks with a strong focus on hydrological applications, and it is the kind of entry that did not exist a decade ago.
The inactive ones are the older generations. SUMMA, a hydrologic modeling framework for the systematic analysis of alternative model conceptualizations, last updated in 2019. Xanthos, an open-source hydrologic model in Python designed to quantify and analyze global water availability, last updated in 2021. VIC, the Variable Infiltration Capacity macroscale hydrologic model, last updated in 2016.
The pattern is not that the older models stopped working. It is that the community around them moved, and a user choosing a model today inherits both the code and the question of who maintains it. That is exactly the question the last update date answers, and it is why the list is worth reading even if you already know the models.
A snapshot, not a catalogue of hydrology
Two boundaries are worth stating plainly before anyone adopts this as a reference.
The first is scope. This is a list of Python packages, and a hydrologist's toolkit now routinely includes R packages, Julia packages, compiled Fortran models and command line tools, none of which appear here. The topics are hydrology, hydrologists, open-source and Python, and the README describes the repository as holding a list of open source Python packages interesting to hydrologists. Nothing in the documentation suggests an intention to widen beyond that.
The second is that the list is a snapshot with a generation date. The entries carry the version and last update date at the time the list was generated, and the README is explicit that this was added in a 2024 update with the automation that maintains it. Anyone reading a copy of the README from a year ago is reading a year-old assessment.
On maintenance, the repository is not archived, the last push was on 2026-10-18, and there are no GitHub releases, which is the right arrangement for a document rather than a package. The author also asks for suggestions as issues or pull requests, which means the list can be corrected by anyone who finds an omission, and a contributor can add the package they wish were there.
Editorial conclusion
Python-Hydrology-Tools fits a hydrologist choosing between modelling frameworks, or someone entering the field who needs to know which Python projects are still alive, and the maintenance markers are more useful than the descriptions. It is the wrong tool as a dependency, because it is a list and not a package, and it is the wrong tool if you need a catalogue of R, Julia or Fortran hydrology tools, since the scope is Python only. Verify first the activity marker of the specific package you plan to use, since it is inferred from the last release date, and check the package's own repository for the roadmap before committing a project to it.
Frequently asked questions
What is the Python-Hydrology-Tools repository?
It holds a list of open source Python packages that are interesting to hydrologists, curated by Raoul A. Collenteur of Collenteur Hydroconsult GmbH. In a 2024 update the author automated the maintenance of the list and added quality indicators per package.
How does the list show whether a hydrology package is still active?
Each entry records the package version and the date of its last update on PyPI or Conda, marked as probably active or probably inactive, and the table also carries columns for PyPI, Conda, documentation, continuous integration, a FAIR repository reference and a paper. The indicator is derived from the release date rather than from a review.
Which categories does the Python-Hydrology-Tools list cover?
Catchment Hydrology, Data Collection, Evaluation, Geospatial, Groundwater, Meteorological tools, Miscellaneous, Optimization and Uncertainty, Statistics, Unsaturated Zone, and a separate Legacy Packages category for software that is no longer updated.
How is the README of Python-Hydrology-Tools produced?
The repository generates it from data. It holds list.json alongside generate_list.py, update_list.py and check_urls.py, with a scripts directory and GitHub workflows, so the version, last update date and maintenance marker for each entry are recomputed rather than typed by hand.
Which hydrology modelling packages does the list mark as active?
In the catchment table, HydPy at 6.4.0 with a last update of 2026-06-23, SuperflexPy at 1.3.3 from 2026-07-03, NeuralHydrology at 1.13.0 from 2026-01-14, CMF at 2.0.2 from 2025-11-21 and HydroGR at 1.2.2 from 2025-10-18 are marked active, while SUMMA, Xanthos, SMARTPy, VIC and wrfhydropy are marked inactive.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/raoulcollenteur-python-hydrology-tools)Was this useful?