Raven is a robust and flexible hydrological modelling framework, designed for application to challenging hydrological problems in academia and practice. This fully object-oriented code provides complete flexibility in spatial discretization, interpolation, process representation, and forcing function generation. Models built with Raven can be as simple as a single watershed lumped model with only a handful of state variables to a full semi-distributed system model with physically-based infiltration, snowmelt, and routing. The Raven Hydrological Framework supports a wide variety of modelling options, and sits atop a robust and extendible software architecture. It is being used by a number of organizations within Canada for reservoir management and flood forecasting. This flexibility encourages stepwise modelling while enabling investigation into critical research issues regarding discretization, numerical implementation, and ensemble simulation of surface water hydrological models.