NADI -- Network Analysis and Data Integration with a Domain Specific Language

NADI -- Network Analysis and Data Integration with a Domain Specific Language - Published in JOSS (2025)

https://github.com/nadi-system/nadi-system

Science Score: 98.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 4 DOI reference(s) in README and JOSS metadata
  • Academic publication links
    Links to: joss.theoj.org, zenodo.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Keywords

domain-specific-language geographical-information-system hydrology network-analysis plugin-system
Last synced: 6 months ago · JSON representation ·

Repository

Domain Specific Programming language for Network Analysis and Data Integration (NADI) System. The repo contains command line tool, IDE, python library, etc.

Basic Info
Statistics
  • Stars: 4
  • Watchers: 0
  • Forks: 0
  • Open Issues: 0
  • Releases: 4
Topics
domain-specific-language geographical-information-system hydrology network-analysis plugin-system
Created 10 months ago · Last pushed 6 months ago
Metadata Files
Readme Contributing License Citation

README.md

Nadi System

joss zenodo

Collection of Utilities to do Network Analysis and Data Integration. This is made targeting analysis of point data in a river system but it should work for any network analysis that work on directed tree network.

The main component of the NADI System is the DSL. It can be used for network based data analysis. The repo contains the tools for using nadi through Command Line Interface (CLI), Integrated Development Environment (IDE), mdbook (documentation writing tool), or as a python library.

The overall NADI workflow is shown below. This repository contains the components for the Network Analysis part of the system.

Nadi Workflow

Theory

The data associated with points in a river system is loaded as a network, and along side the functions loaded through the plugins, the Domain Specific Programming language (DSL) can be used to run different arithmetic, logical, or functional analysis on the metadata of the points.

This allows us to do network based data analysis quickly, with intuitive syntax compared to using general purpose programming language like Python. But the general purpose languages have more flexibility, so a way to couple with them is provided through the plugin mechanism.

Further Reading

Please refer to the NADI Book for details on the key concepts, the syntax of the language, and other components of the NADI System.

For developers the API documentation is on docs.rs.

Usage Instructions

Video Demo: https://www.youtube.com/watch?v=qKsrigRrPKo Web User Manual: https://nadi-system.github.io PDF User Manual: https://nadi-system.github.io/data/nadi-book.pdf Dev Reference: https://docs.rs/nadicore/latest/nadicore/

Installation

Prebuilt binaries are available for windows in the releases page. Use the nadi-ide binary for the GUI, refer to Nadi Book for details on other binaries.

Nadi IDE Screenshot

If you want to build it from source, which works on Linux, Windows, MacOS and Android (Termux, but without the IDE), clone this repository. And build it with cargo as follows:

bash git clone https://github.com/Nadi-System/nadi-system cd nadi-system cargo build --release

The compiled binaries will be in target/release directory. You can run nadi-ide from there for GUI, or nadi for CLI.

Or you can directly do the following: bash cargo run --release --bin nadi-ide

OS Specific Instructions

Some OS might not come with the system dependencies required for the NADI System.

One dependencies of nadi-ide (rfd) suggests the following dependencies:

| Distribution | Installation Command | |-----------------|--------------------------| | Fedora | dnf install gtk3-devel | | Arch | pacman -S gtk3 | | Debian & Ubuntu | apt install libgtk-3-dev |

Besides that you might need the following for Debian: - build-essential - libatk1.0-0 - libglib2.0-dev

If you cannot compile the program in your OS, please make an issue, even if you're able to solve it, that will help other people using the same OS.

The developer has only tested compilation on, Arch Linux and Windows OS.

Tests

You can run tests using the cargo command, this will run the tests in all the components as well as their documentation.

bash cargo test

Components

Nadi System consists of the following components:

Nadi Core

Core library in Rust, it has the basic data structures and the logic for the plugin system.

Nadi Plugin

This is a macro library that facilitates writing nadi plugins.

Nadi CLI

Command Line Interface (CLI) to run nadi tasks file from terminal. Can visualize the parsed tasks, or run them.

Nadi IDE

Integrated Development Environment (IDE) for Nadi tasks. You can use this for writing your nadi tasks script, browse documentations, visualize network, run tasks, etc. You do not need to install any other program if you want to use Nadi by itself if you install it.

Nadi Python Library

You can install this and run nadi from python, you can use python syntax to define your own functions as well as run the functions loaded from nadi plugins. This gives better flexibility for research purposes, and for prototyping.

Plugins

There are some plugins that are given by default called internal plugins. And some you can get from nadi-plugins-rust repository.

Nadi GIS

Geographic Information System (GIS) tool for nadi. It can help download stream lines (NHDPlus), USGS streamgages, basins, etc as well as run network detection algorithm for detecting network that is the backbone of nadi system.

Nadi GIS is available as a command line utility as well as a QGIS plugin.

Contributing

You can contribute to NADI System even without coding experience in Rust by reporting bugs, suggesting features, and helping with documentation.

Please refer to CONTRIBUTING.md for further details on specific roles and tasks you can do.

And please refer to architecture.md file to read how the components of the NADI are arranged in this repository.

Future Work

  • Implement timeseries data types with gaps
  • Add syntax to access timeseries data directly,
    • $ for series, and $$ for timeseries might work, with $ also falling back to get series data without time from timeseries, if there is no series with that name.
    • Also means we have to add a generic data type for task system, enum of (Attribute, Series, Timeseries, etc)
  • Only internal plugins can be run without dot syntax. All external plugins need the plugin name to access the functions.
  • Add user defined functions. Maybe only environmental function for now? See if node/network function can be done easily.
  • Add for loop, for looping through Array and Table Keys.
  • Implement .0 type syntax for array member access like with attrmap member access.
  • Write a nadi-server CLI tool, that opens a server. It opens up an API where users can send tasks to run, and it can return the output from that. It should have mutable and immutable option. In the immutable option users can only run immutable functions.
  • Write editor modes for nadi, maybe using lsp so users can expand it to their editors with minimal work.
    • Currently, besides the NADI IDE, there are some syntax highlight available for web (through highlight.js), and sublime syntax files in extra/syntax-highlight directory.
    • There is no intelligent analysis of scripts, you can only run it to get errors. Better error handling while parsing, and then

Owner

  • Name: Nadi System
  • Login: Nadi-System
  • Kind: organization

JOSS Publication

NADI -- Network Analysis and Data Integration with a Domain Specific Language
Published
August 27, 2025
Volume 10, Issue 112, Page 8655
Authors
Gaurav Atreya ORCID
Department of Chemical and Environmental Engineering, University of Cincinnati, OH, USA
Todd Steissberg ORCID
U. S. Army Engineer Research and Development Center (ERDC), Davis, CA, USA
Patrick A. Ray ORCID
Department of Chemical and Environmental Engineering, University of Cincinnati, OH, USA
Editor
Mengqi Zhao ORCID
Tags
hydrology river graph

Citation (CITATION.cff)

cff-version: "1.2.0"
authors:
- family-names: Atreya
  given-names: Gaurav
  orcid: "https://orcid.org/0000-0002-0234-2165"
- family-names: Steissberg
  given-names: Todd
  orcid: "https://orcid.org/0000-0003-3744-701X"
- family-names: Ray
  given-names: Patrick A.
  orcid: "https://orcid.org/0000-0001-9495-2317"
contact:
- family-names: Atreya
  given-names: Gaurav
  orcid: "https://orcid.org/0000-0002-0234-2165"
doi: 10.5281/zenodo.16956958
message: If you use this software, please cite our article in the
  Journal of Open Source Software.
preferred-citation:
  authors:
  - family-names: Atreya
    given-names: Gaurav
    orcid: "https://orcid.org/0000-0002-0234-2165"
  - family-names: Steissberg
    given-names: Todd
    orcid: "https://orcid.org/0000-0003-3744-701X"
  - family-names: Ray
    given-names: Patrick A.
    orcid: "https://orcid.org/0000-0001-9495-2317"
  date-published: 2025-08-27
  doi: 10.21105/joss.08655
  issn: 2475-9066
  issue: 112
  journal: Journal of Open Source Software
  publisher:
    name: Open Journals
  start: 8655
  title: NADI -- Network Analysis and Data Integration with a Domain
    Specific Language
  type: article
  url: "https://joss.theoj.org/papers/10.21105/joss.08655"
  volume: 10
title: NADI -- Network Analysis and Data Integration with a Domain
  Specific Language

GitHub Events

Total
  • Create event: 15
  • Issues event: 21
  • Release event: 2
  • Watch event: 3
  • Delete event: 3
  • Issue comment event: 27
  • Push event: 83
Last Year
  • Create event: 15
  • Issues event: 21
  • Release event: 2
  • Watch event: 3
  • Delete event: 3
  • Issue comment event: 27
  • Push event: 83

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 16
  • Total pull requests: 0
  • Average time to close issues: 9 days
  • Average time to close pull requests: N/A
  • Total issue authors: 3
  • Total pull request authors: 0
  • Average comments per issue: 2.19
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 16
  • Pull requests: 0
  • Average time to close issues: 9 days
  • Average time to close pull requests: N/A
  • Issue authors: 3
  • Pull request authors: 0
  • Average comments per issue: 2.19
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • amcandio (8)
  • jhwohlgemuth (7)
  • mengqi-z (1)
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels

Packages

  • Total packages: 2
  • Total downloads:
    • cargo 8,830 total
  • Total dependent packages: 0
    (may contain duplicates)
  • Total dependent repositories: 0
    (may contain duplicates)
  • Total versions: 12
  • Total maintainers: 1
crates.io: nadi

CLI tool for running nadi task system

  • Documentation: https://docs.rs/nadi/
  • License: GPL-3.0-only
  • Latest release: 0.7.0
    published 8 months ago
  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 370 Total
Rankings
Dependent repos count: 21.3%
Dependent packages count: 28.1%
Average: 48.1%
Downloads: 94.8%
Maintainers (1)
Last synced: 6 months ago
crates.io: nadi_core

Core library for Nadi systems, for use by plugins

  • Versions: 11
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 8,460 Total
Rankings
Dependent repos count: 28.8%
Dependent packages count: 33.9%
Average: 53.1%
Downloads: 96.6%
Maintainers (1)
Last synced: 6 months ago

Dependencies

Cargo.lock cargo
  • 626 dependencies
Cargo.toml cargo
nadi-cli/Cargo.lock cargo
  • 182 dependencies
nadi-cli/Cargo.toml cargo
nadi-ide/Cargo.lock cargo
  • 596 dependencies
nadi-ide/Cargo.toml cargo
nadi-py/Cargo.lock cargo
  • 178 dependencies
nadi-py/Cargo.toml cargo
nadi_core/Cargo.lock cargo
  • 166 dependencies
nadi_core/Cargo.toml cargo
  • rstest 0.22.0 development
  • abi_stable 0.11.3
  • anyhow 1.0.86
  • cairo-rs 0.20.7
  • chrono 0.4.38
  • colored 2.1.0
  • filetime 0.2.25
  • nadi_plugin 0.7.0
  • nom 7.1.3
  • number_range 0.3.2
  • regex 1.11.1
  • string-template-plus 0.4.3
  • subprocess 0.2.9
  • termimad 0.31.1
nadi_plugin/Cargo.lock cargo
  • convert_case 0.6.0
  • either 1.13.0
  • itertools 0.13.0
  • prettyplease 0.2.22
  • proc-macro2 1.0.86
  • quote 1.0.37
  • syn 2.0.77
  • unicode-ident 1.0.13
  • unicode-segmentation 1.12.0
nadi_plugin/Cargo.toml cargo
nadi-py/pyproject.toml pypi