Contributing to OpenWorkflow Open Specification
Thank you for your interest in contributing to the OpenWorkflow Open Specification! This document provides guidelines for contributing to the specification and ecosystem.
Ways to Contribute
1. Specification Improvements
- Clarify existing specifications
- Propose new features or patterns
- Fix typos or errors
- Add examples and use cases
- Improve documentation
2. Connector Contributions
- Submit community connectors to the registry
- Improve existing connectors
- Add tests and documentation
- Fix bugs
3. SDK Development
- Implement SDKs for new languages
- Improve existing SDK implementations
- Add features and bug fixes
- Write tests
4. Example Projects
- Create example connectors and workflows
- Share real-world use cases
- Write tutorials and guides
Getting Started
-
Fork the repository
git clone https://github.com/Open-Workflow/OpenWorkflow-Specification.git
cd OpenWorkflow-Specification -
Create a branch
git checkout -b feature/my-contribution -
Make your changes
- Follow existing patterns and style
- Add tests if applicable
- Update documentation
-
Submit a pull request
- Provide clear description
- Reference related issues
- Ensure tests pass
Specification Changes
Proposal Process
Major changes to the specification follow this process:
- Open an issue describing the proposed change
- Discuss with the community and maintainers
- Create a proposal document if needed
- Submit PR with specification changes
- Review and iterate based on feedback
- Approval by maintainers
- Merge and version bump
What Requires a Proposal
- New schema fields or structures
- Breaking changes to existing specs
- New execution modes or patterns
- Changes to core concepts
What Doesn't Require a Proposal
- Clarifications and typo fixes
- Additional examples
- Documentation improvements
- Non-breaking additions
Connector Submissions
Connector Quality Guidelines
Connectors submitted to the public registry should:
-
Be well-documented
- Clear description of functionality
- Usage examples
- API documentation for all actions
-
Have proper error handling
- Graceful failure modes
- Helpful error messages
- Retry logic for transient failures
-
Include tests
- Unit tests for handlers
- Integration tests with real services
- Example workflows
-
Follow security best practices
- Secure credential handling
- Input validation
- No hardcoded secrets
-
Be maintained
- Responsive to issues
- Regular updates
- Clear deprecation policy
Submission Process
# 1. Validate your connector
smartify validate connector.yaml
# 2. Test locally
smartify test connector.yaml
# 3. Submit to registry
smartify publish connector.yaml
# 4. Create PR to add to community index
# Edit: registry/community-connectors.yaml
Code Style
YAML/JSON
- Use 2 spaces for indentation
- Quote string values consistently
- Add comments for complex configurations
- Order fields logically (required fields first)
Example:
connector:
type: connector
kind: http
name: my-connector
namespace: myorg
version: 1.0.0
displayName: My Connector
description: Clear description here
actions:
- name: action_name
description: What this action does
input:
type: object
properties:
required_field:
type: string
description: Field description
optional_field:
type: string
default: "default value"
Python
- Follow PEP 8
- Type hints for all functions
- Docstrings for public APIs
- Descriptive variable names
JavaScript/TypeScript
- Use ESLint with recommended config
- Async/await over callbacks
- Type definitions for TypeScript
- JSDoc for documentation
Go
- Follow standard Go conventions
- Run gofmt before committing
- Use meaningful variable names
- Write tests
Documentation
Writing Style
- Clear and concise: Get to the point quickly
- Examples first: Show before explaining
- Complete: Don't assume knowledge
- Searchable: Use clear headings and keywords
Documentation Structure
specs/
├── plugin-schema.md # Technical specification
├── sdk-contract.md # SDK requirements
└── ...
examples/
├── weather/ # Complete example
│ ├── README.md # Usage guide
│ ├── connector.yaml # Connector definition
│ └── ...
└── ...
Testing
Connector Tests
# tests/test_weather.py
from openworkflow.testing import MockSmartify, mock_action
from weather import get_current_weather
def test_get_weather_success():
result = get_current_weather({"location": "San Francisco"})
assert result["status"] == "success"
assert "temperature" in result
def test_get_weather_invalid_location():
with pytest.raises(ValueError):
get_current_weather({"location": ""})
Workflow Tests
# Test workflow with mock inputs
smartify workflow test workflow.yaml \
--input location="Test City" \
--mock weather.get_current_weather='{"temperature": 72}'
Versioning
The specification follows semantic versioning:
- Major (2.0.0): Breaking changes
- Minor (1.1.0): New features, backward compatible
- Patch (1.0.1): Bug fixes, clarifications
Communication
- GitHub Issues: Bug reports, feature requests
- Discussions: Questions, brainstorming
- Discord: Real-time chat (community.openworkflowspec.org)
- Email: security@openworkflow.ai (security issues only)
Code of Conduct
Our Standards
- Respectful: Treat everyone with respect
- Inclusive: Welcome diverse perspectives
- Constructive: Provide helpful feedback
- Professional: Keep discussions on-topic
Unacceptable Behavior
- Harassment or discrimination
- Trolling or insulting comments
- Publishing others' private information
- Other unprofessional conduct
License
By contributing, you agree that your contributions will be licensed under the Apache 2.0 License.
Recognition
Contributors will be:
- Listed in CONTRIBUTORS.md
- Mentioned in release notes
- Acknowledged in the project
Questions?
- Read the FAQ
- Ask in Discussions
- Join our Discord
Thank you for contributing to OpenWorkflow! 🚀