Documentation Index
Fetch the complete documentation index at: https://mintlify.com/openmls/openmls/llms.txt
Use this file to discover all available pages before exploring further.
Contributing to OpenMLS
Thank you for your interest in contributing to OpenMLS! This guide will help you get started with contributing to the project.Code of Conduct
Before contributing, please read our Code of Conduct. We are committed to providing a welcoming and inclusive environment for all contributors.Getting Started
Setting Up Your Environment
- Fork and clone the repository:
- Install Rust:
- Build the project:
- Run tests:
Working with Dependencies
If you need to work on a dependency (e.g., hpke-rs) alongside OpenMLS: For local development: Add a patch toCargo.toml:
Working with Issues
Finding an Issue
- Browse open issues
- Look for issues labeled
good first issueorhelp wanted - Check the priority labels:
| Label | Description |
|---|---|
| P1 | Must be addressed ASAP |
| P2 | Pick up next |
| P3 | Low-priority item |
| P4 | Won’t fix unless someone contributes |
Working on an Issue
- Assign yourself to the issue so others know it’s being worked on
- Create a branch from
main:
- Link your PR to the issue when you create it
- If you stop working on an issue, unassign yourself and leave a comment explaining why
Pull Request Process
PR Guidelines
Pull requests should not exceed 1000 lines. If an issue requires more work, split it into multiple PRs.
- Verify all status checks pass
- Follow the PR template below
- Run
rustfmton all code:
- Ensure tests pass:
Commit Guidelines
Commit message format:- Use the present tense (“Add feature” not “Added feature”)
- Use the imperative mood (“Move cursor to…” not “Moves cursor to…”)
- Limit the first line to 80 characters
- Reference issues and pull requests after the first line
- For non-trivial patches, include important details in the commit body
PR Best Practices
Separate concerns:- Split mass-changes or mechanical changes into separate PRs
- Separate commits into conceptually-separate pieces for review
- Address all comments from previous reviews before requesting another
PR Template
Your pull request should include:1. Issue Link
- Link to the open issue
- Assign yourself to both the issue and PR
2. Design Description
Explain the design so reviewers can understand your approach:3. Alternatives Considered
4. Side Effects and Impacts
5. Testing and Verification
6. User-Facing Changes
Code Style Guidelines
Rust Style
Userustfmt for all code:
rustfmt style.
Additional conventions:
- Use descriptive variable names
- Prefer explicit types over type inference in public APIs
- Use
Resultfor operations that can fail - Avoid unwrap/expect in library code
Documentation Style
Use rustdoc for all documentation: Required:- All public functions must have doc comments
- Include examples for non-trivial functions
- Document all public types and traits
- Internal functions should have doc comments
- Explain complex algorithms
- Link to relevant RFC sections
Review Process
As a Reviewer
Core principles:- Reviewing code is more valuable than writing code
- Respond within one working day:
- Provide a review, OR
- Give a deadline for when you’ll review, OR
- Politely decline and suggest another reviewer
- Communicate priority if you can’t review promptly
Review Checklist
Administrative checks:- Issue is assigned and linked
- Commit title and message are clear
- PR applies cleanly to target branch
- New files have proper license headers
- Run automated tests locally
- Manually verify changes if applicable
- Check test coverage for new code
- Does the change address the issue?
- Is the code well-documented?
- Do you understand all code changes?
- If not, request clarification
- Is the public API changed?
- Are changes documented for consumers?
- Does it break backwards compatibility?
- Is the new API sensible and necessary?
- Is the code maintainable?
- Are there security implications?
- Is performance affected?
- For follow-up reviews, check the interdiff
Release Process
OpenMLS follows semantic versioning and the Rust versioning guidelines.Versioning
- Major version (1.0.0): Breaking changes
- Minor version (0.1.0): New features, backwards compatible
- Patch version (0.0.1): Bug fixes, backwards compatible
Pre-releases
Before releasing a minor or major version:- Publish a pre-release to crates.io (e.g.,
0.8.0-rc.1) - Wait at least one week for community feedback
- Fix any issues found
- Release final version
Release Checklist
See release_management.md for the complete checklist. Key steps:- Update CHANGELOG.md for each crate
- Create git tags (e.g.,
openmls/v0.8.0) - Publish release notes on GitHub
- Publish crates in order:
- openmls_traits
- openmls_memory_storage
- openmls_rust_crypto
- openmls
Crates in this Repository
The OpenMLS repository contains multiple crates:| Crate | Description |
|---|---|
openmls | Main library implementing MLS protocol |
openmls_traits | Trait definitions for providers |
openmls_rust_crypto | RustCrypto-based provider |
openmls_libcrux_crypto | Libcrux-based provider |
openmls_memory_storage | In-memory storage provider |
openmls_sqlite_storage | SQLite storage provider |
Testing Guidelines
Running Tests
Writing Tests
Unit tests:Communication
Getting Help
- Questions: GitHub Discussions
- Bugs: GitHub Issues
- Security: See SECURITY.md
Proposing Features
- Open an issue describing the feature
- Discuss the design with maintainers
- Get approval before starting large PRs
- Create a PR implementing the feature
Reporting Bugs
Include:- OpenMLS version
- Rust version
- Platform (OS, architecture)
- Minimal code to reproduce
- Expected vs actual behavior
- Full error messages
Recognition
Contributors are recognized in:- GitHub contributors page
- Release notes for their contributions
- The community!