The plugin system is currently **experimental** and under active development. The documentation, examples, and plugin interface are subject to significant changes in future releases. If you encounter any issues, have questions, or have ideas for improvement, please consider starting [a discussion on GitHub](https://github.com/NVIDIA-NeMo/DataDesigner/discussions).
# Example Plugin: Index Multiplier
In this guide, we will build a simple plugin that generates values by multiplying the row index by a user-specified multiplier. Admittedly, not the most useful plugin, but it demonstrates the required steps 😜.
A Data Designer plugin is implemented as a Python package with three main components:
1.**Configuration Class**: Defines the parameters users can configure
2.**Task Class**: Contains the core implementation of the plugin
3.**Plugin Object**: Connects the config and task classes to make the plugin discoverable
Let's build the `data-designer-index-multiplier` plugin step by step.
## Step 1: Create a Python package
Data Designer plugins are implemented as Python packages. We recommend using a standard structure for your plugin package.
For example, here is the structure of a `data-designer-index-multiplier` plugin:
```
data-designer-index-multiplier/
├── pyproject.toml
└── src/
└── data_designer_index_multiplier/
├── __init__.py
└── plugin.py
```
## Step 2: Create the config class
The configuration class defines what parameters users can set when using your plugin. For column generator plugins, it must inherit from [SingleColumnConfig](../code_reference/column_configs.md#data_designer.config.column_configs.SingleColumnConfig) and include a [discriminator field](https://docs.pydantic.dev/latest/concepts/unions/#discriminated-unions).
```python
from typing import Literal
from data_designer.config.column_configs import SingleColumnConfig
class IndexMultiplierColumnConfig(SingleColumnConfig):
"""Configuration for the index multiplier column generator."""
# Configurable parameter for this plugin
multiplier: int = 2
# Required: discriminator field with a unique Literal type
# This value identifies your plugin and becomes its column_type
The implementation class defines the actual business logic of the plugin. For column generator plugins, it inherits from [ColumnGenerator](../code_reference/column_generators.md#data_designer.engine.column_generators.generators.base.ColumnGenerator) and must implement a `metadata` static method and `generate` method:
- **`CELL_BY_CELL`**: Generates one cell at a time
-`generate` must take as input a `dict` with key/value pairs for all previous columns and return a `dict` with an additional key/value for the generated cell
- Supports concurrent workers via a `max_parallel_requests` parameter on the configuration
Plugins are discovered automatically using [Python entry points](https://packaging.python.org/en/latest/guides/creating-and-discovering-plugins/#using-package-metadata). It is important to register your plugin as an entry point under the `data_designer.plugins` group.