# NeMo Data Designer Plugins
[](https://nvidia-nemo.github.io/DataDesignerPlugins/)
First-class NVIDIA-provided plugins for [NeMo Data Designer](https://github.com/NVIDIA-NeMo/DataDesigner).
This repository is the NVIDIA-maintained curated first-party plugin catalog for
Data Designer.
## Quick Start
```bash
git clone git@github.com:NVIDIA-NeMo/DataDesignerPlugins.git
cd DataDesignerPlugins
make sync
```
Create a new plugin:
```bash
uv run ddp new my-plugin
```
This generates a column generator by default. Pass `--type seed-reader` or
`--type processor` to scaffold those plugin types instead. Each scaffold creates
a complete plugin skeleton under `plugins/data-designer-my-plugin/` with config,
implementation, entry point, docs, tests, and CODEOWNERS. See
[docs/authoring.md](docs/authoring.md) for the full authoring guide.
## Repository Structure
```
DataDesignerPlugins/
|-- devtools/
| `-- ddp/ # Monorepo management tooling (ddp CLI, dev-only)
|-- catalog/ # Machine-consumable plugin catalog data
|-- plugins/ # One directory per plugin (auto-discovered by uv)
| `-- data-designer-template/ # Reference implementation
`-- docs/ # Zensical documentation source
```
Each plugin is an independent Python package with its own `pyproject.toml`, docs, tests, and CODEOWNERS. The root workspace auto-discovers plugins via `plugins/*`.
## Plugin Catalog
The default NVIDIA plugin catalog URL is:
```text
https://nvidia-nemo.github.io/DataDesignerPlugins/catalog/plugins.json
```
`catalog/plugins.json` is the checked-in JSON catalog registry for released Data
Designer plugin packages.
The published Pages site serves that catalog together with the static Python
package index at `https://nvidia-nemo.github.io/DataDesignerPlugins/simple/`.
See [docs/catalogs.md](docs/catalogs.md) for catalog discovery, catalog
fields, `install` metadata, trust expectations, and external catalog setup
guidance.
## Development
For a review of the current branch or a pull request, use the [`review-code` skill](.agents/skills/review-code/SKILL.md).
Use the repo's `Makefile` targets for all development tasks:
```bash
make sync # Install all packages (uv sync --all-packages)
make lint # Lint and format check (ruff)
make format # Auto-fix lint issues and reformat
make test # Test each plugin in an isolated venv
make validate # Run assert_valid_plugin on all entry points
make check # Verify generated plugin docs, catalog validity, CODEOWNERS, and license headers
make plugin-docs # Regenerate docs/plugins/ from per-plugin docs and metadata
make catalog PLUGIN=data-designer-my-plugin # Register a package for its first release
make package-index # Add catalog JSON and the static package index to site/
make qa-package-index # Build/install a plugin through a scratch local package index
make docs # Build the Zensical documentation site
make docs-server # Serve docs locally at http://localhost:8000
make all # lint + test + validate + check + docs (full local CI)
```
To test a single plugin in isolation:
```bash
make test-plugin PLUGIN=data-designer-my-plugin
```
If you change plugin docs or ownership, regenerate derived files:
```bash
make plugin-docs # Regenerate plugin documentation site inputs
make codeowners # Regenerate CODEOWNERS
make update-license-headers # Fix SPDX headers
```
Register a package in the catalog only when preparing that package's first
release:
```bash
make catalog PLUGIN=data-designer-my-plugin
```
## The `ddp` CLI
The `ddp` command manages the monorepo. Run `uv run ddp --help` to see all subcommands:
| Command | Description |
|---------|-------------|
| `ddp new <name>` | Scaffold a new plugin |
| `ddp catalog register <plugin>` | Register one package for first release catalog discoverability |
| `ddp catalog check` | Validate the checked-in catalog JSON |
| `ddp validate` | Validate all installed plugins |
| `ddp plugin-docs` | Generate plugin docs site inputs |
| `ddp package-index` | Build, validate, merge, and QA the static package index |
| `ddp codeowners` | Aggregate CODEOWNERS to stdout |
| `ddp license-headers` | Add or check SPDX license headers |
| `ddp bump <plugin> <part>` | Bump a plugin's semantic version |
| `ddp check-release <plugin> <version>` | Validate plugin metadata for release |
## Releasing
```bash
make bump PLUGIN=data-designer-my-plugin PART=patch # Bump version (major/minor/patch)
git add plugins/data-designer-my-plugin/pyproject.toml
git commit -m "chore(data-designer-my-plugin): bump version to 0.1.1"
make release PLUGIN=data-designer-my-plugin PUBLISH=1 # Build, tag, push, and publish the GitHub Release
```
Before a package's first release, register it once with
`make catalog PLUGIN=data-designer-my-plugin` and commit `catalog/plugins.json`.
See [docs/releasing.md](docs/releasing.md) for the full release guide.
## Contributing
Community contributions are welcome. External contributors are expected to open an issue and wait for the `triaged` label before beginning implementation or opening a pull request. See [CONTRIBUTING.md](CONTRIBUTING.md) for the contribution workflow and enforcement details.
## License
Apache-2.0. See [LICENSE](LICENSE).