Thank you for your interest in contributing to Dynamo! Whether you're fixing a typo, reporting a bug, improving documentation, or building a new feature—every contribution matters and helps make Dynamo better for everyone.
This guide will help you get started. If you have questions, join us on Discord or open a GitHub Discussion.
TL;DR for experienced contributors:
- Fork and clone the repo
- Create a branch:
git checkout -b yourname/fix-description - Make changes, run
pre-commit - Commit with DCO sign-off:
git commit -s -m "fix: description" - Open a PR targeting
main
If this is your first contribution, here's the recommended path:
-
Set up your development environment using the Building from Source guide
-
Find an issue — Browse open issues or look for:
Issue Type Description Good first issues Beginner-friendly Help wanted Community contributions welcome -
Start small — Documentation fixes, bug fixes, and test improvements are great first contributions
-
Ask questions — Join Discord or open a Discussion if you get stuck
Community Impact: 70+ external contributors have merged PRs, with 130+ community contributions since launch and ~8 new contributors joining each month. Your contribution matters—see our contributors.
We are committed to providing a welcoming and inclusive environment. Please read and follow our Code of Conduct.
Found something broken? Open a bug report with:
- Steps to reproduce
- Expected vs. actual behavior
- Environment details (OS, GPU, Python version, Dynamo version)
Documentation improvements are always welcome. This includes:
- Fixing typos or unclear explanations
- Adding examples or tutorials
- Improving API documentation
Small doc fixes can be submitted directly as PRs without an issue.
Have an idea for a new feature? Open a feature request to discuss it with Dynamo maintainers before implementation.
Ready to write code? See the Contribution Workflow section below for the process.
When triaged, issues are assigned a priority based on impact:
| Priority | Meaning |
|---|---|
| Urgent | Critical blocker—system failure, security vulnerability, data loss |
| P0 | High impact—major functionality broken, blocking multiple users |
| P1 | Medium impact—workarounds exist, or popular feature request |
| P2 | Low impact—minor bugs, nice-to-have features, cosmetic issues |
| Status | What It Means |
|---|---|
needs-triage |
We're reviewing your issue |
needs-info |
We need more details from you |
approved-for-pr |
Ready for implementation—submit a PR |
in-progress |
Someone is working on this |
blocked |
Waiting on external dependency |
We aim to:
- Respond to new issues within a few business days
- Triage high-priority issues (P0/P1) within a week
Issues with no activity for 30 days may be auto-closed (can be reopened).
Issues labeled good-first-issue are sized for new contributors. We provide extra guidance on these—look for clear acceptance criteria and a suggested approach in the issue description.
- Fork the repository on GitHub
- Clone your fork and set up your development environment following the Building from Source guide
- Set up pre-commit hooks:
pip install pre-commit && pre-commit install
Understanding Dynamo's architecture helps you find where to make changes. For the complete picture, see the Architecture Documentation and Support Matrix.
| Component | Purpose | Directory |
|---|---|---|
| Frontend | OpenAI-compatible HTTP API server | components/src/dynamo/frontend/ |
| Router | KV cache-aware request routing with load balancing | components/src/dynamo/router/ |
| Planner | Real-time performance tuning and worker scaling | components/src/dynamo/planner/ |
| Workers | Backend engine integrations (vLLM, SGLang, TensorRT-LLM) | components/src/dynamo/{vllm,sglang,trtllm}/ |
| KV Cache Manager | Multi-tier cache offloading (GPU → CPU → SSD → Object Storage) | lib/bindings/kvbm/ |
| SLA Profiler | Benchmarking and SLA-driven configuration | benchmarks/profiler/ |
| Plane | Purpose | Documentation |
|---|---|---|
| Discovery Plane | Service registration and discovery across components | docs/design_docs/distributed_runtime.md |
| Request Plane | High-performance request routing between components | docs/design_docs/request_plane.md |
| KV Event Plane | KV cache event propagation for cache-aware routing | docs/design_docs/event_plane.md |
| Component | Purpose | Directory |
|---|---|---|
| Operator | CRDs, controllers, and webhooks for K8s-native deployment | deploy/operator/ |
| Helm Charts | Templated deployment configurations | deploy/helm/ |
| Recipes | Pre-built deployment configurations for common scenarios | recipes/ |
| Layer | Language | Why | Directory |
|---|---|---|---|
| Core Runtime | Rust | Memory safety, zero-cost abstractions, predictable latency | lib/runtime/ |
| LLM Engine | Rust | High-throughput token processing, async I/O | lib/llm/ |
| KV Block Manager | Rust | Direct memory control for GPU/CPU/SSD offloading | lib/bindings/kvbm/ |
| Backend Integrations | Python | Rapid iteration, framework compatibility | components/src/dynamo/ |
| Planner & Router | Python | Extensible policies, easy customization | components/src/dynamo/{planner,router}/ |
| Kubernetes Operator | Go | K8s controller patterns, client-go ecosystem | deploy/operator/ |
Submit a PR directly (no issue needed) if:
- Your change is <100 lines of code AND addresses a simple, focused concern (typos, simple bug fixes, formatting)
- OR your PR addresses an existing approved GitHub Issue (link with "Fixes #123")
Create a GitHub Issue first for:
- Changes ≥100 lines of code
- New features, architecture changes, or multi-component changes
- Any change that requires design discussion
For larger contributions, follow these steps:
-
Create a GitHub Issue – Open a Contribution Request using the template.
-
Describe the Problem – Explain what you're solving, including context, error messages, or use cases.
-
Propose a Solution – Include:
- Estimated PR size: XS / S / M / L / XL / XXL
- Files affected: Approximate number and components
- Type of change: Bug fix, new feature, refactoring, or performance improvement
-
Get Approval – Wait for Dynamo maintainers to review and apply the
approved-for-prlabel. -
Submit a Pull Request – Open a PR that references the issue using GitHub keywords (e.g., "Fixes #123").
-
Address Code Rabbit Review – Respond to automated Code Rabbit suggestions, including nitpicks.
-
Trigger CI Tests – For external contributors, a Dynamo maintainer must comment
/ok to test <commit-id>to run the full CI suite, where<commit-id>is the short SHA of your latest commit. Fix any failing tests before requesting human review. -
Request Review – Add the person who approved your issue as a reviewer. Check CODEOWNERS for required approvers based on files modified.
Note on AI-Generated Code: While we encourage using AI tools, you must fully understand every change in your PR. Inability to explain submitted code will result in rejection.
All PRs are checked against pre-commit hooks. Run locally:
pre-commit install
pre-commit run --all-files
| Language | Style Guide | Formatter |
|---|---|---|
| Python | PEP 8 | black, ruff |
| Rust | Rust API Guidelines | cargo fmt, cargo clippy |
| Go | Effective Go | gofmt |
- Keep PRs focused—one concern per PR
- Avoid unnecessary complexity
- No commented-out code
- Ensure clean builds (no warnings or errors)
- All tests must pass
Use act to run workflows locally:
act -j pre-merge-rust
Or use the GitHub Local Actions VS Code extension.
Dynamo requires all contributions to be signed off with the Developer Certificate of Origin (DCO). This certifies that you have the right to submit your contribution under the project's Apache 2.0 license.
Each commit must include a sign-off line:
Signed-off-by: Jane Smith <jane.smith@email.com>
Add this automatically with the -s flag:
git commit -s -m "fix: your descriptive message"
Requirements:
- Use your real name (no pseudonyms or anonymous contributions)
- Your
user.nameanduser.emailmust be configured in git
By contributing, you agree that your contributions will be licensed under the Apache 2.0 License.
- Discord: Join our community
- Discussions: GitHub Discussions
- Documentation: docs.nvidia.com/dynamo
Thank you for contributing to Dynamo!
