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)
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
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
- Host: GitHub
- Owner: Nadi-System
- License: gpl-3.0
- Language: Rust
- Default Branch: main
- Homepage: https://nadi-system.github.io/
- Size: 3.27 MB
Statistics
- Stars: 4
- Watchers: 0
- Forks: 0
- Open Issues: 0
- Releases: 4
Topics
Metadata Files
README.md
Nadi System
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.
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.

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
.0type syntax for array member access like with attrmap member access. - Write a
nadi-serverCLI 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 havemutableandimmutableoption. In the immutable option users can only run immutable functions. - Write editor modes for nadi, maybe using
lspso 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-highlightdirectory. - There is no intelligent analysis of scripts, you can only run it to get errors. Better error handling while parsing, and then
- Currently, besides the NADI IDE, there are some syntax highlight available for web (through highlight.js), and sublime syntax files in
Owner
- Name: Nadi System
- Login: Nadi-System
- Kind: organization
- Repositories: 1
- Profile: https://github.com/Nadi-System
JOSS Publication
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
Rankings
Maintainers (1)
crates.io: nadi_core
Core library for Nadi systems, for use by plugins
- Documentation: https://docs.rs/nadi_core/
- License: GPL-3.0-only
-
Latest release: 0.7.2
published 6 months ago
Rankings
Maintainers (1)
Dependencies
- 626 dependencies
- 182 dependencies
- 596 dependencies
- 178 dependencies
- 166 dependencies
- 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
- 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
