Contributing
Trace is open source and community-driven. Contributions are welcome in many forms—code, documentation, bug reports, feature requests, and more.
Ways to contribute
Code
Fix bugs, implement features, or optimize performance. Browse issues labeled "good first issue" to get started.
View good first issues →Documentation
Improve guides, fix typos, add examples, or clarify confusing sections. Documentation is just as important as code.
Browse documentation →Bug reports
Found a bug? Report it with steps to reproduce, device details, and expected behavior. Good bug reports help us fix issues faster.
Report a bug →Feature requests
Have an idea? Open a discussion describing the use case and expected behavior. We prioritize features based on user feedback.
Suggest a feature →Translations
Help make Trace accessible to non-English speakers. Translate the app or documentation to your language.
View translations →Community
Help others in discussions, share your debugging workflows, or write tutorials. Community support is valuable.
Join discussions →Code contribution workflow
Find or create an issue
Browse open issues or create a new one to discuss your proposed changes. For significant features, open a discussion first to validate the approach before writing code.
Fork and clone
Fork the repository on GitHub, then clone your fork locally:
git clone https://github.com/Trace-iOS/TraceCreate a feature branch
Create a new branch from main:
git checkout -b feature/your-feature-nameWrite and test your changes
Follow the project's coding style. Write tests for new features. Run existing tests to ensure nothing breaks. See the building guide for development setup.
Submit a pull request
Push your branch and open a pull request on GitHub. Include a clear description of what changed and why. Reference any related issues. Participate in code review.
Guidelines
Code style
Follow Swift conventions and Apple's API Design Guidelines. Use SwiftLint configuration from the repository. Keep functions focused and well-named. Add comments for non-obvious logic.
Commit messages
Write clear commit messages in present tense: "Add WebSocket frame filtering" not "Added WebSocket frame filtering". Reference issue numbers when relevant.
Testing
Add tests for new features. Ensure existing tests pass. Manual testing on physical devices is important—simulators don't support Network Extension.
Documentation
Update relevant documentation when adding features. Include code examples where helpful. Keep the README and guides in sync with actual behavior.
Breaking changes
Avoid breaking changes when possible. If necessary, discuss in an issue first. Provide migration guides and deprecation warnings.
Recognition
Contributors are recognized in the project README, release notes, and on the website. Significant contributions may be highlighted in blog posts or on social media.
Ready to contribute?
Whether you're fixing a typo or implementing a major feature, your contribution helps make Trace better for everyone.