Community Meetings
The Rust special interest group (SIG) meets on alternating weeks between Tuesday at 9:00 AM PT and Wednesday at 8:00 AM PT. The meeting is subject to change depending on contributors’ availability.Join the Meeting
Check the OpenTelemetry community calendar for specific dates and Zoom meeting links. Look for “OTel Rust SIG”.
Meeting Notes
View and contribute to our public meeting notes on Google Docs.
Slack Channel
Join the conversation on CNCF Slack in the #otel-rust channel.
Community Membership
Anyone can contribute, but there are benefits to becoming an official member of the community. Learn about the different roles:- Member - Active contributors who have made multiple contributions
- Approver - Experienced contributors who can review and approve changes
- Maintainer - Core team members with full repository access
Current Maintainers
- Cijo Thomas, Microsoft
- Harold Dost
- Lalit Kumar Bhasin, Microsoft
- Utkarsh Umesan Pillai, Microsoft
- Zhongyang Wu
Current Approvers
- Anton Grübel, Baz
- Björn Antonsson, Datadog
- Scott Gerring, Datadog
- Shaun Cox, Microsoft
Pull Requests
Before You Start
If you’d like to work on something that isn’t already tracked as an issue — whether it’s a new feature, enhancement, or significant refactor — please create an issue first and describe your proposal. This gives maintainers a chance to provide feedback on the approach before you invest significant time, and helps avoid situations where a PR doesn’t align with the project’s direction. For bug fixes or small improvements to existing functionality, opening a PR directly is fine.Getting Oriented
If you’re new to the codebase, these documentation resources will help:- Architecture overview — workspace structure, API/SDK separation, and crate responsibilities
- Signal-specific design docs: traces, metrics, logs
- Architectural decision records — context behind past design choices
- Library guidelines from the OpenTelemetry specification
Prerequisites
Theopentelemetry-otlp crate uses gRPC + Protocol Buffers. You’ll need protoc version 3.15 or newer:
Submitting Changes
Clone the repository with submodules:It is recommended to run the pre-commit script to catch any issues locally.
PR Guidelines
Your pull request should follow the conventional commits standard. This ensures that when the PR is squashed intomain, the resulting commit message is consistent and makes changelog generation easier.
Best practices:
- If the PR is not ready for review, put
[WIP]in the title or mark it asdraft - Make sure the CLA is signed and all required CI checks pass
- Submit small, focused PRs addressing a single concern/issue
- Make sure the PR title reflects the contribution
- Write a summary that helps understand the change
- Include usage examples in the summary, where applicable
- Include benchmarks (before/after) for performance enhancements
PR Size and Scope
If your change is larger, consider breaking it into incremental PRs:- First PR: Introduce new types, traits, or structural scaffolding
- Follow-up PRs: Add the implementation, split further if needed
- Final PR: Wire everything together and update documentation
Refactoring must be in its own PR with no behavior changes. Mixing refactoring with new functionality makes it difficult for reviewers to verify correctness.
Getting PRs Merged
A PR is considered ready to merge when:- It has received approval from Approvers or Maintainers
- Major feedback is resolved
Issue Management
Filing Issues
When creating a new issue, please use one of the provided issue templates (Bug Report or Feature Request). The templates automatically apply triage labels so maintainers can find and review new issues. Avoid creating blank issues, as they won’t have the correct labels and may be overlooked.Triage Labels
Every new issue starts withtriage:todo. Maintainers review these and apply:
triage:accepted— the issue has been reviewed and is ready to be worked ontriage:needmoreinfo— the issue needs clarification from the reporter
Finding Work
good first issue— scoped issues suitable for newcomers to the codebasehelp wanted— issues where maintainers welcome contributions and will provide extra guidance
Area Labels
| Label | Area |
|---|---|
A-trace | Tracing signal |
A-metrics | Metrics signal |
A-log | Logs signal |
A-common | Cross-cutting / not signal-specific |
Module Labels
| Label | Crate |
|---|---|
M-api | opentelemetry (API) |
M-sdk | opentelemetry-sdk |
M-exporter-otlp | opentelemetry-otlp |
M-exporter-prometheus | opentelemetry-prometheus |
M-exporter-zipkin | opentelemetry-zipkin |
Priority Labels
| Label | Meaning |
|---|---|
priority:p0 | Critical stop-the-world issues. Drop everything. |
priority:p1 | High priority — should be addressed soon |
priority:p2 | Medium priority |
priority:p3 | Low priority — nice to have |
Version Labels
These labels are applied to PRs to indicate their semver impact:| Label | Impact |
|---|---|
version:breaking | Breaking change (major version bump) |
version:minor | New functionality (minor version bump) |
version:patch | Bug fix (patch version bump) |
Development Guidelines
Design Philosophy
OpenTelemetry Rust follows the OpenTelemetry specification, with a focus on: Capabilities over structure compliance - Contributions should provide functionality and behavior that conforms to the specification, but the interface and structure is flexible. It’s preferable to follow Rust idioms rather than conform to specific API names or argument patterns in the spec.Error Handling
The OpenTelemetry Rust SDK has two ways to handle errors:- When errors are not allowed to return, call the global error handler
- Otherwise, return the errors
opentelemetry::Error type:
- Trace module errors: wrapped in
opentelemetry::trace::TraceError - Metrics module errors: wrapped in
opentelemetry::metrics::MetricError - Logs module errors: wrapped in
opentelemetry::logs::LogsError
ExporterError trait.
Configuration Priority
OpenTelemetry supports multiple configuration methods with the following priority:- Environment variables (highest priority)
- Compile-time configurations in source code
Experimental Features
Use theotel_unstable feature flag for experimental specification features:
Regularly review and remove the
otel_unstable flag once features become stable.Optional Features
Optional features should follow the naming convention<signal>_<feature_name>. Examples:
- Signal features:
logs,traces,metrics - Runtime features:
rt-tokio,rt-tokio-current-thread