Checking for non-preferred file/folder path names (may take a long time depending on the number of files/folders) ...
This resource contains some files/folders that have non-preferred characters in their name. Show non-conforming files/folders.
This resource contains content types with files that need to be updated to match with metadata changes. Show content type files that need updating.
| Authors: |
|
|
|---|---|---|
| Owners: |
|
This resource does not have an owner who is an active HydroShare user. Contact CUAHSI (help@cuahsi.org) for information on this resource. |
| Type: | Resource | |
| Storage: | The size of this resource is 9.9 KB | |
| Created: | Apr 03, 2026 at 5:29 p.m. (UTC) | |
| Last updated: | Apr 03, 2026 at 9:34 p.m. (UTC) | |
| Citation: | See how to cite this resource |
| Sharing Status: | Public |
|---|---|
| Views: | 19 |
| Downloads: | 1 |
| +1 Votes: | Be the first one to this. |
| Comments: | No comments (yet) |
Abstract
The NRDS Client Visualizer is a web-based interface for exploring the NextGen Research DataStream through interactive maps and feature-based analysis. Built with a React frontend and Tethys backend, it supports geospatial visualization of catchments, nexus points, flowpaths, and CONUS gauges, along with time series analysis for catchments and nexus features. Users can click map features or use linked selectors to retrieve model results directly in the interface. The visualizer also supports browsing outputs from CFE_NOM and LSTM across available forecasts, helping users quickly access, inspect, and download NRDS results stored in the project’s S3-hosted data infrastructure. In that sense, it functions not only as a viewer, but as a practical bridge between cloud-hosted hydrologic simulations and day-to-day research workflows. By making NextGen outputs easier to navigate visually, the NRDS Client Visualizer improves how open hydrologic forecast data can be explored, interpreted, and applied by CIROH researchers and other water practitioners.
Subject Keywords
Content
README.md
NextGen Research Datastream (NRDS) Visualizer
![]() |
Funding for this project was provided by the National Oceanic & Atmospheric Administration (NOAA), awarded to the Cooperative Institute for Research to Operations in Hydrology (CIROH) through the NOAA Cooperative Agreement with The University of Alabama (NA22NWS4320003). |
This app was created using an experimental Tethys + React app scaffold. It uses React for the frontend of the app and Tethys as the backend.

- Geospatial visualization of catchments, nexus points, flowpaths, and conus gauges
- Time series analysis of catchments and nexus points
Built on the Tethys Platform (Swain et al., 2015), it enables web-based exploration of model outputs (CIROH, 2025).
Usage Guide
Assited using launchApp Script
One of the advantages of the launchApp.sh script is that it allows the user to run the application inside a container, so no need to install extra python dependencies or npm packages
You should be able to see multiple outputs through the UI:
Unassisted Usage
Define the env variables and running the container
```bash
Set environment variables
export TETHYS_CONTAINER_NAME="tethys-nrds" \ TETHYS_REPO="awiciroh/tethys-nrds" \ TETHYS_TAG="latest" \ NGINX_PORT=80 \ SKIP_DB_SETUP=false \ CSRF_TRUSTED_ORIGINS="[\"http://localhost:${NGINX_PORT}\",\"http://127.0.0.1:${NGINX_PORT}\"]" ```
Run container
bash
docker run --rm -d \
-p "$NGINX_PORT:$NGINX_PORT" \
--name "$TETHYS_CONTAINER_NAME" \
-e SKIP_DB_SETUP="$SKIP_DB_SETUP" \
-e NGINX_PORT="$NGINX_PORT" \
-e CSRF_TRUSTED_ORIGINS="$CSRF_TRUSTED_ORIGINS" \
"${TETHYS_REPO}:${TETHYS_TAG}"
Verify deployment:
```bash docker ps
CONTAINER ID IMAGE PORTS NAMES
b1818a03de9b awiciroh/tethys-nrds:latest 0.0.0.0:80->80/tcp tethys-nrds
```
Access at: http://localhost:80
Visualization Features
Nexus points can be visualized when the user selects the output that wants to visualize. Time series can be retrieved by clicking on any of the Nexus points, or by changing the select dropdown assigned to the Nexus.
Catchments time series can be retrieved by clicking on any of the Catchments polygons, or by changing the select dropdown assigned to the Catchments.

Data from CFE_NOM and LSTM can be retrieved for the avaialble forecasts for the Nexus and Catcments
This functionality allows the user to be able to quicklu search the data they want from the S3 bucket containing the output of the NextGen DataStream. They can explore and download as needed.
Development Installation
You need to install both the Tethys dependencies and the node dependencies.
The webpack dev server is configured to proxy the Tethys development server (see webpack.config.js). The app endpoint will be handled by the webpack development server and all other endpoints will be handled by the Tethys (Django) development server. As such, you will need to start both in separate terminals.
-
First create a Virtual Environment with the tool of your choice and then run the following commands
-
Install libmamba and make it your default solver (see: A Faster Solver for Conda: Libmamba):
```bash conda update -n base conda conda install -n base conda-libmamba-solver conda config --set solver libmamba
``` 2. Install the Tethys Platform
Using
conda```bash conda install -c conda-forge tethys-platform django=
`` or usingpip```` pip install tethys-platform django=
```
-
Create a
portal_config.ymlfile :To add custom configurations such as the database and other local settings you will need to generate a portal_config.yml file. To generate a new template portal_config.yml run:
bash tethys gen portal_configYou can customize your settings in the portal_config.yml file after you generate it by manually editing the file or by using the settings command command. Refer to the Tethys Portal Configuration documentation for more information.
-
Configure the Tethys Database
There are several options for setting up a DB server: local, docker, or remote. Tethys Platform uses a local SQLite database by default. For development environments you can use Tethys to create a local server:
bash tethys db configure -
Install Node Version Manager and Node.js:
5.1 Install Node Version Manager (nvm): https://github.com/nvm-sh/nvm?tab=readme-ov-file#install--update-script
5.2 CLOSE ALL OF YOUR TERMINALS AND OPEN NEW ONES
5.3 Use NVM to install Node.js 20:
bash nvm install 20 nvm use 20 -
Install the PDM dependency manager:
bash pip install --user pdmNOTE: if you have previously installed pdm in another environment, uninstall pdm first (
pip uninstall pdm), and then reinstall as shown above with the new environment active. -
Clone the app and install into the Tethys environment in development mode:
bash git clone https://github.com/CIROH-UA/ngiab-client.git cd ngiab-client pdm install npm install --include=dev cd ../
PDM Tips
See below for more PDM tips like how to manage dependencies, install dependencies, and run scripts.
Install only dev dependencies
-
Install all dev dependencies (test & lint)
bash pdm install -G:all -
Install only test dependencies
bash pdm install -G test -
Install only lint and formatter dependencies
bash pdm install -G lint
Managing dependencies
-
Add a new dependency:
-
Add the package using
pdm:bash pdm add <package-name> -
Manually add the dependency to the
install.yml.IMPORTANT: Dependencies are not automatically added to the
install.ymlyet! -
Add a new dev dependency:
bash pdm add -dG test <package-name> pdm add -dG lint <package-name>NOTE: Just use
pdmto install and manage dev dependencies. Theinstall.ymldoes not support dev dependencies, but they shouldn't be needed in it anyway, right? -
Add a new optional dependeny:
bash pdm add -G <group-name> <package-name>NOTE: You'll need to decide whether or not to add the optional dependencies to the
install.ymlb/c it does not support optional dependencies. You may consider usingpdmto manage the optional dependencies. -
Remove a dependency:
-
Remove it from the
pyproject.yamland lock file:bash pdm remove --no-sync <package-name> -
Manually remove it from the
install.yml -
If you want to remove it from the environment, use
piporcondato remove the package.IMPORTANT: TL;DR: Running
pdm removewithout the--no-syncwill remove nearly all of the dependencies in your environment. Whilepdm removeis capable of removing the package from the environment, runningpdm removewithout the--no-syncoption can break your Tethys environment. This is becausepdmwill attempt to get the environment to match the dependencies listed in yourpyproject.toml, which usually does not include all of the dependencies of Tethys.
PDM Scripts
The project is configured with several PDM convenience scripts:
```bash
Run linter
pdm run lint
Run formatter
pdm run format
Run tests
pdm run test
Run all checks
pdm run all ```
Formatting and Linting Manually
This package is configured to use yapf code formatting
-
Install lint dependencies:
bash pdm install -G lint -
Run code formatting from the project directory:
```bash yapf --in-place --recursive --verbose .
Short version
yapf -ir -vv . ```
-
Run linter from the project directory:
bash flake8 .NOTE: The configuration for yapf and flake8 is in the
pyproject.toml.
Testing Manually
This package is configured to use pytest for testing
-
Install test dependencies:
bash pdm install -G test -
Run tests from the project directory:
bash pytestNOTE: The configuration for pytest and coverage is in the
pyproject.toml.
Build Node Modules
Webpack is configured to bundle and build the React app into the tethysapp/<app_package>/public/frontend directory. Before building a Python distribution for release, you should build using this command:
npm run build
Test Node Modules
Use the following commands to lint and test the React portion of the app.
npm run lint
npm run test
The linting capability is powered by eslint and a number of plugins for React. The testing capabilities include jest, jsdom, testing-framework, user-event, and a few other JavaScript testing utilties to make it easy to test the frontend of the React-Tethys app.
Acknowledgements
The React + Django implementation is based on the excellent work done by @Jitensid that can be found on GitHub here: Jitensid/django-webpack-dev-server.
Contribute
Please feel free to contribute!
Additional Metadata
| Name | Value |
|---|---|
| page_url | https://nrds.ciroh.org/ |
Related Resources
| Title | Owners | Sharing Status | My Permission |
|---|---|---|---|
| CIROH Featured Apps | James Dolinar | Public & Not Shareable | Open Access |
Credits
Funding Agencies
This resource was created using funding from the following sources:
| Agency Name | Award Title | Award Number |
|---|---|---|
| National Oceanic and Atmospheric Administration (NOAA), University of Alabama | None | NA22NWS4320003 to University of Alabama |
How to Cite
This resource is shared under the Creative Commons Attribution CC BY.
http://creativecommons.org/licenses/by/4.0/

Comments
There are currently no comments
New Comment