Contributing to Haystack
We welcome contributions from the community! Whether it is fixing a bug, adding a new feature, or improving documentation, your contribution is valued.
Getting Started
Development Setup
git clone https://github.com/deepset-ai/haystack.git
cd haystack
pip install -e ".[dev]"
Running Tests
# Unit tests
pytest tests/unit
# Integration tests (requires external services)
pytest tests/integration
# Specific component tests
pytest tests/unit/components/generators/
Contribution Areas
Components
Haystack's power comes from its component ecosystem. We welcome new components for:
- Document converters and preprocessors
- Embedding models and rankers
- LLM integrations (new providers, fine-tuned models)
- Document stores and retrievers
- Custom evaluation metrics
Integrations
External integrations live in haystack-extras or as standalone packages:
- New vector database backends
- Cloud provider integrations (AWS, GCP, Azure)
- Monitoring and observability tools
Documentation
- Tutorial improvements and new tutorials
- API documentation updates
- Usage examples and best practices
Pull Request Process
- Fork the repository and create a feature branch
- Write tests for any new functionality
- Format code with
blackandisort - Lint with
pylintand type check withmypy - Document new components with docstrings
- Submit a PR referencing any related issues
PR Checklist
- Tests added or updated
- Documentation updated
- Changelog entry added
- All CI checks pass
- No breaking API changes (or discussed and approved)
Component Development Guide
Each Haystack component follows a standard interface:
from haystack import component
@component
class MyComponent:
@component.output_types(output=str)
def run(self, input_text: str) -> dict:
return {"output": processed_text}
Components must:
- Declare input and output types
- Be serializable (for pipeline YAML export)
- Include comprehensive docstrings
- Have unit test coverage
Code of Conduct
We follow the Contributor Covenant code of conduct.
License
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.