NiFi development guide
This guide is for contributors changing NiFi flows, custom processor scripts, or Python extension processors in this repository.
Scope
Use this page for day-to-day development tasks:
modifying NiFi templates and controller-service wiring,
adding/updating script-based processors (
ExecuteStreamCommand),adding/updating Python extension processors (
FlowFileTransform),running local quality checks before opening a PR.
Quick start
From the repository root:
cd deploy
source export_env_vars.sh
make start-nifi
Then open NiFi at https://localhost:8082.
Repository map
nifi/user_templates/: exported workflow templates.nifi/user_scripts/processors/: script-based processors run byExecuteStreamCommand.nifi/user_scripts/utils/: shared helpers for scripts/extensions.nifi/user_python_extensions/: Python extension processors exposed in the NiFi UI.nifi/user_scripts/tests/: tests and local helper scripts.docs/nifi/: NiFi-facing developer and usage docs.
Pick the right processor approach
Use script-based processors (ExecuteStreamCommand) when:
you need a fast stdin->stdout transform,
you do not need first-class processor properties/relationships in the UI.
Use Python extension processors when:
you want the processor to appear as a native NiFi processor,
you need explicit processor properties and stronger integration.
See also:
Development loop
Script-based processors
Edit/create a script in
nifi/user_scripts/processors/.Validate script input/output locally.
Configure/update
ExecuteStreamCommandin NiFi.Run flow and inspect success/failure relationships.
Local test example:
echo '[{"text":"hello"}]' | python3 nifi/user_scripts/processors/clean_doc.py text_field_name=text
Python extension processors
Edit/create a processor in
nifi/user_python_extensions/.Restart the NiFi service (or reload processors in UI) to pick up changes.
Reconfigure/test the processor in the flow.
If dependencies changed:
Update
nifi/requirements.txt.Rebuild the NiFi image:
bash nifi/recreate_nifi_docker_image.sh
Quality checks
Run the same core checks as CI:
python -m ruff check scripts nifi/user_python_extensions --select F,E9
python -m mypy --config-file pyproject.toml nifi/user_python_extensions scripts
Optional test run:
python -m pytest nifi/user_scripts/tests -q
Debugging
NiFi logs:
docker logs -f --tail 300 cogstack-nifi
In the NiFi UI, use processor bulletins and data provenance to inspect failures.
For script processors, write useful errors to
stderrand exit non-zero.
Where to document available processors
Recommended location: docs/nifi/.
Keep implementation guidance in:
docs/nifi/processor_scripting.mddocs/nifi/user_scripts.mddocs/nifi/user_python_extensions.md
Keep processor inventory on processors catalog.
For each processor entry, include:
processor name and source file path,
processor type (script-based or extension),
expected input and output format,
required properties/arguments,
common failure modes and example usage.