Before You Start
For Bug Reports or Feature Requests
Check existing issues
Search existing issues to see if your bug or feature has already been reported.
Open an issue
Create a new issue with:
- Clear description
- Steps to reproduce (for bugs)
- Use cases and impact (for features)
For serious security bugs, follow the security policy instead of opening an issue.
For Code Contributions
Look for issues labeled “help wanted” for good starting points.Code Formatting
Proper formatting is enforced by CI. Run formatters before committing.Rust Code Formatting
TOML File Formatting
The project uses Tombi for TOML formatting.Linting
Run Clippy before submitting your PR.The
-D warnings flag treats warnings as errors. Fix all warnings before submitting.Testing Requirements
All PRs must pass the test suite.Run Tests Locally
Add Tests for New Code
- New features: Add unit tests and integration tests
- Bug fixes: Add regression tests that would have caught the bug
- Refactors: Ensure existing tests still pass
Pull Request Guidelines
Creating a PR
Create a feature branch
feature/add-order-validationfix/orderbook-race-conditionrefactor/simplify-driver-logic
Commit your changes
See Commit Message Style.
PR Checklist
Before submitting, ensure:- Code is formatted with
just fmtandjust fmt-toml - Clippy passes with
just clippy - Tests pass locally
- New code has tests
- PR description clearly explains the change
- Related issue is linked (if applicable)
PR Description Template
When you create a PR, GitHub will show a template. Fill it out completely:Commit Message Style
Write clear, descriptive commit messages.Format
Good Examples
Bad Examples
Code Review Process
Address feedback
- Respond to comments
- Make requested changes
- Push new commits (don’t force-push during review)
Review Expectations
For contributors:- Be responsive to feedback
- Be open to suggestions
- Ask questions if something is unclear
- Constructive feedback
- Clear explanations for requested changes
- Timely responses
Code Style Guidelines
Import Organization
Group imports logically:Prefer Type Imports
Import types at the module level instead of using full paths:Comments
Use comments sparingly:- Don’t comment obvious code
- Do comment complex algorithms or non-obvious logic
- Do comment “why”, not “what”
- Do document public APIs
Error Handling
Useanyhow::Result for functions that can fail:
Rewards for Contributors
Earn 100 DAI for merged PRs that solve “help wanted” issues!
- Ensure your PR is merged
- Include a Gnosis Chain address in your PR description or DM mastercow.eth on Discord
Getting Help
Community Support
- Discord: CoW Protocol Discord
- Forum: CoW Protocol Forums
Development Questions
If you’re stuck:- Check the documentation
- Search existing issues and discussions
- Ask in Discord (be specific about your problem)
What to Contribute
High-Impact Contributions
Bug Fixes
Fix reported issues, especially those affecting users
Performance
Optimize slow code paths or reduce resource usage
Tests
Improve test coverage for critical code
Documentation
Clarify confusing docs or add missing examples
Areas Needing Help
Check issues labeled:Summary: Pre-PR Checklist
Before submitting your PR:- Write clear commit messages
- Fill out PR template completely
- Link related issues
- Respond to review feedback
Next Steps
Setup Guide
Set up your development environment
Testing Guide
Learn how to test your changes
Playground
Test in a full local environment
GitHub Issues
Find issues to work on
