Development Setup#

This section collects the setup steps needed before building, testing, or contributing changes.

Package Installation#

If you are consuming NeMo Flow rather than developing this repository, install the published package for your language:

  • Rust: cargo add nemo-flow

  • Python: uv add nemo-flow or pip install nemo-flow

  • Node.js: npm install nemo-flow-node

Go, WebAssembly, and the raw FFI surface are currently experimental and remain source-first.

Source Development#

Install these tools before you start:

  • Rust stable

  • Python 3.11 or newer

  • uv

  • just

  • Go 1.21 or newer

  • Node.js LTS

  • wasm-pack

  • cargo-deny

If you touch Go, WebAssembly, or the raw FFI surface, build and validate those bindings from source in the same branch.

Clone the repository and build the workspace:

git clone <repo-url> && cd NeMo-Flow
uv sync
cargo install just --locked
uv run pre-commit install
just build-rust
just build-python
just build-node

Validate the source builds for the experimental bindings when you touch them:

cd go/nemo_flow
CGO_LDFLAGS="-L../../target/release" LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}../../target/release" go test -v ./...
cd ../..

wasm-pack test --node crates/wasm

Branch Naming#

Use these prefixes:

  • feat/

  • fix/

  • docs/

  • test/

  • refactor/

Code Style#

These style requirements keep contributions consistent across Rust, Python, Go, and general repository files.

Rust#

Use these Rust commands and conventions when changing the core runtime or Rust-facing API surface.

  • cargo fmt

  • cargo clippy -- -D warnings

  • cargo deny check

Python#

Use these Python commands and conventions when changing the wrapper package, tests, or docs tooling.

  • Ruff linting

  • Ruff formatting

  • ty type checking

General#

These general conventions apply across files and language surfaces.

  • Follow binding-appropriate naming conventions.

  • Keep SPDX headers intact.

  • Preserve the shared lifecycle and middleware model across bindings.