Thank you for your interest in contributing! We welcome contributions from the community.
See DEVELOPMENT.md for setup instructions, test commands, build processes, and LLVM maintenance guidance. For release notes, see CHANGELOG.md.
Before creating an issue, check existing ones to avoid duplicates. Include:
- Clear title and description
- Steps to reproduce (with example QIR files if applicable)
- Expected vs actual behavior
- Version information (Rust, Python, LLVM, OS)
- Error messages and stack traces
- Fork and create a branch from
main - Make your changes following our standards (see below)
- Add tests for new functionality
- Run
make testandmake lint- both must pass - Submit PR with clear description and reference relevant issues
PR Checklist:
- Tests pass (
make test) - Linters pass (
make lint) - Documentation updated (README, API docs, qtm-qir-reference.md if needed)
- Python stubs regenerated if API changed (
make stubs)
- Use
cargo fmtfor formatting - Fix all
clippywarnings:cargo clippy --all-targets --all-features -- -D warnings - Document public APIs with doc comments
- Avoid panics in library code - use
Resulttypes - Write unit tests for new functionality
- Follow PEP 8
- Use type hints
- Update
.pyistubs:make stubs - Test with Python 3.10-3.14
Use conventional commits:
type(scope): brief description
[optional body]
Types: feat, fix, docs, style, refactor, test, chore
Examples:
feat(decompose): add CY gate supportfix(validate): correct qubit count validationdocs: update LLVM installation instructions
See DEVELOPMENT.md for the current test, fixture compilation, and simulation commands.
Always add tests for new features and ensure all tests pass before submitting a PR.
- User-facing changes: Update README.md
- QIR feature support: Update qtm-qir-reference.md
- Code comments: Document complex logic
- API docs: Generate with
cargo doc --no-deps --open
(For maintainers)
Releases are automated using Release Please:
-
Make changes following Conventional Commits format.
-
Merge PRs to main - Release Please will automatically:
- Create/update a release PR with:
- Updated
CHANGELOG.md - Updated
Cargo.tomlversion - Updated
.release-please-manifest.json
- Updated
- Create/update a release PR with:
-
Review and merge the release PR - This triggers:
No manual version bumping or tagging needed!
Be respectful and professional. Report unacceptable behavior to project maintainers.
Open an issue with the "question" label or start a GitHub Discussion.
By contributing, you agree that your contributions will be licensed under Apache-2.0.