Thank you for your interest in contributing to Hatchling! This guide will help you get started with our development workflow and contribution standards.
We use Conventional Commits for automated versioning and changelog generation.
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
- feat: New features (triggers minor version bump)
- fix: Bug fixes (triggers patch version bump)
- docs: Documentation changes
- refactor: Code refactoring without functional changes
- test: Adding or updating tests
- chore: Maintenance tasks, dependency updates
- ci: Changes to CI/CD configuration
- perf: Performance improvements
- style: Code style changes (formatting, etc.)
# Good commit messages
feat: add support for Claude 3.5 Sonnet model
fix: resolve memory leak in streaming responses
docs: update API documentation for new providers
refactor: simplify provider registry initialization
test: add integration tests for OpenAI provider
chore: update dependencies to latest versions
# Breaking changes (use sparingly until v1.0.0)
feat!: change configuration file format
fix!: remove deprecated API methods
# With scope
feat(providers): add Anthropic Claude support
fix(mcp): resolve tool execution timeout
docs(api): update provider configuration guideFor guided commit messages, use commitizen:
# Install dependencies first
npm install
# Use commitizen for guided commits
npm run commit
# or
npx czThis will prompt you through creating a properly formatted commit message.
git clone https://github.com/YOUR_USERNAME/Hatchling.git
cd Hatchling# Install Python dependencies
pip install -e .
# Install Node.js dependencies for semantic-release
npm installgit checkout -b feat/your-feature-name
# or
git checkout -b fix/your-bug-fix- Write code following existing patterns
- Add tests for new functionality
- Update documentation as needed
- Follow PEP 8 style guidelines
# Run the test suite
python run_tests.py --regression --feature
# Run specific test categories
python run_tests.py --integration # Requires API keys/services
python run_tests.py --file test_specific_file.py# Use commitizen for guided commits
npm run commit
# Or commit manually with conventional format
git commit -m "feat: add your feature description"git push origin feat/your-feature-nameThen create a pull request on GitHub.
Use conventional commit format for PR titles:
feat: add new LLM provider supportfix: resolve streaming timeout issuedocs: update installation guide
Include in your PR description:
- What: Brief description of changes
- Why: Reason for the changes
- How: Implementation approach (if complex)
- Testing: How you tested the changes
- Breaking Changes: Any breaking changes (if applicable)
- Code follows existing style and patterns
- Tests added for new functionality
- Documentation updated (if needed)
- Commit messages follow conventional format
- All tests pass
- No breaking changes (unless intentional and documented)
- Follow PEP 8 style guidelines
- Use type hints where appropriate
- Write docstrings for public functions and classes
- Keep functions focused and small
- Use meaningful variable and function names
- Update relevant documentation for changes
- Use clear, concise language
- Include code examples where helpful
- Keep README.md up to date
- Regression: Ensure existing functionality works
- Feature: Test new functionality
- Integration: Test with external services (requires setup)
# All tests
python run_tests.py --all
# Specific categories
python run_tests.py --regression
python run_tests.py --feature
python run_tests.py --integration
# Skip slow tests
python run_tests.py --skip slow
# Only run specific tags
python run_tests.py --only feature,regression- Add tests for new features
- Test edge cases and error conditions
- Use descriptive test names
- Follow existing test patterns
Releases are fully automated using semantic-release with GitHub App integration:
- Commits are analyzed for conventional commit format
- Version is calculated based on commit types
- Changelog is generated from commit messages
- Version files are updated (pyproject.toml, CHANGELOG.md)
- Changes are committed back to repository using GitHub App
- GitHub release is created with release notes and tags
feat:commits → Minor version (0.4.0 → 0.5.0)fix:commits → Patch version (0.4.0 → 0.4.1)feat!:orBREAKING CHANGE:→ Major version (0.4.0 → 1.0.0)- Other types → No release
- Issues: Report bugs or request features via GitHub Issues
- Discussions: Ask questions in GitHub Discussions
- Documentation: Check docs/articles/ for detailed guides
- Code: Look at existing code for patterns and examples
- Be respectful and inclusive
- Focus on constructive feedback
- Help others learn and grow
- Follow GitHub's community guidelines
Thank you for contributing to Hatchling! 🚀