Skip to content

Commit 41b8826

Browse files
authored
docs: cherry-pick sidebar reorganization and contribution guide to release/1.0.0 (#7267)
Signed-off-by: Dan Gil <dagil@nvidia.com>
1 parent 21805bc commit 41b8826

File tree

7 files changed

+457
-268
lines changed

7 files changed

+457
-268
lines changed

CONTRIBUTING.md

Lines changed: 13 additions & 265 deletions
Original file line numberDiff line numberDiff line change
@@ -17,275 +17,23 @@ limitations under the License.
1717

1818
# Contributing to Dynamo
1919

20-
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.
20+
Thank you for your interest in contributing to Dynamo!
2121

22-
This guide will help you get started. If you have questions, join us on [Discord](https://discord.gg/nvidia-dynamo) or open a [GitHub Discussion](https://github.com/ai-dynamo/dynamo/discussions).
22+
For the full contribution guide — including how to get started, build from source, submit PRs, and what to expect during review — see:
2323

24-
**TL;DR for experienced contributors:**
24+
**[Contribution Guide](https://docs.nvidia.com/dynamo/dynamo/dev/getting-started/contribution-guide)** (docs site)
2525

26-
1. Fork and clone the repo
27-
2. Create a branch: `git checkout -b yourname/fix-description`
28-
3. Make changes, run `pre-commit`
29-
4. Commit with DCO sign-off: `git commit -s -m "fix: description"`
30-
5. Open a PR targeting `main`
26+
Or view the source: [`docs/contribution-guide.md`](docs/contribution-guide.md)
3127

32-
## New to Dynamo?
28+
## Quick Links
3329

34-
If this is your first contribution, here's the recommended path:
30+
- [Good first issues](https://github.com/ai-dynamo/dynamo/labels/good-first-issue)
31+
- [Help wanted](https://github.com/ai-dynamo/dynamo/labels/help-wanted)
32+
- [Open a bug report](https://github.com/ai-dynamo/dynamo/issues/new?template=bug_report.yml)
33+
- [Propose a feature](https://github.com/ai-dynamo/dynamo/issues/new?template=feature_request.yml)
34+
- [CNCF Slack (`#ai-dynamo`)](https://communityinviter.com/apps/cloud-native/cncf)
35+
- [Discord](https://discord.gg/nvidia-dynamo)
3536

36-
1. **Set up** your development environment using the [Building from Source](README.md#building-from-source) guide
37-
2. **Find an issue** — Browse [open issues](https://github.com/ai-dynamo/dynamo/issues) or look for:
37+
Dynamo requires all contributions to be signed off with the [Developer Certificate of Origin (DCO)](https://developercertificate.org/). This certifies that you have the right to submit your contribution under the project's [Apache 2.0 license](https://github.com/ai-dynamo/dynamo/blob/main/LICENSE).
3838

39-
| Issue Type | Description |
40-
|------------|-------------|
41-
| [Good first issues](https://github.com/ai-dynamo/dynamo/labels/good-first-issue) | Beginner-friendly |
42-
| [Help wanted](https://github.com/ai-dynamo/dynamo/labels/help-wanted) | Community contributions welcome |
43-
44-
3. **Start small** — Documentation fixes, bug fixes, and test improvements are great first contributions
45-
4. **Ask questions** — Join [Discord](https://discord.gg/nvidia-dynamo) or open a [Discussion](https://github.com/ai-dynamo/dynamo/discussions) if you get stuck
46-
47-
**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](https://github.com/ai-dynamo/dynamo/graphs/contributors).
48-
49-
## Code of Conduct
50-
51-
We are committed to providing a welcoming and inclusive environment. Please read and follow our [Code of Conduct](CODE_OF_CONDUCT.md).
52-
53-
---
54-
55-
## Ways to Contribute
56-
57-
### Report a Bug
58-
59-
Found something broken? [Open a bug report](https://github.com/ai-dynamo/dynamo/issues/new?template=bug_report.yml) with:
60-
- Steps to reproduce
61-
- Expected vs. actual behavior
62-
- Environment details (OS, GPU, Python version, Dynamo version)
63-
64-
### Improve Documentation
65-
66-
Documentation improvements are always welcome. This includes:
67-
- Fixing typos or unclear explanations
68-
- Adding examples or tutorials
69-
- Improving API documentation
70-
71-
Small doc fixes can be submitted directly as PRs without an issue.
72-
73-
### Propose a Feature
74-
75-
Have an idea for a new feature? [Open a feature request](https://github.com/ai-dynamo/dynamo/issues/new?template=feature_request.yml) to discuss it with Dynamo maintainers before implementation.
76-
77-
### Contribute Code
78-
79-
Ready to write code? See the [Contribution Workflow](#contribution-workflow) section below for the process.
80-
81-
---
82-
83-
## What Happens to Your Issue
84-
85-
### Priority Levels
86-
87-
When triaged, issues are assigned a priority based on impact:
88-
89-
| Priority | Meaning |
90-
|----------|---------|
91-
| **Urgent** | Critical blocker—system failure, security vulnerability, data loss |
92-
| **P0** | High impact—major functionality broken, blocking multiple users |
93-
| **P1** | Medium impact—workarounds exist, or popular feature request |
94-
| **P2** | Low impact—minor bugs, nice-to-have features, cosmetic issues |
95-
96-
### Status Labels
97-
98-
| Status | What It Means |
99-
|--------|---------------|
100-
| `needs-triage` | We're reviewing your issue |
101-
| `needs-info` | We need more details from you |
102-
| `approved-for-pr` | Ready for implementation—submit a PR |
103-
| `in-progress` | Someone is working on this |
104-
| `blocked` | Waiting on external dependency |
105-
106-
### Response Expectations
107-
108-
We aim to:
109-
- **Respond** to new issues within a few business days
110-
- **Triage** high-priority issues (P0/P1) within a week
111-
112-
Issues with no activity for 30 days may be auto-closed (can be reopened).
113-
114-
### Good First Issues
115-
116-
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.
117-
118-
---
119-
120-
## Quick Start for Contributors
121-
122-
1. [Fork the repository](https://github.com/ai-dynamo/dynamo/fork) on GitHub
123-
2. Clone your fork and set up your development environment following the [Building from Source](README.md#building-from-source) guide
124-
3. Set up pre-commit hooks: `pip install pre-commit && pre-commit install`
125-
126-
---
127-
128-
## Project Architecture
129-
130-
<!-- We were given the feedback that having information on architecture, languages used, etc. would be helpful for external contributors -->
131-
132-
Understanding Dynamo's architecture helps you find where to make changes. For the complete picture, see the [Architecture Documentation](docs/design-docs/architecture.md) and [Support Matrix](docs/reference/support-matrix.md).
133-
134-
![Dynamo Architecture](docs/assets/img/architecture.png)
135-
136-
### Core Components
137-
138-
| Component | Purpose | Directory |
139-
|-----------|---------|-----------|
140-
| **Frontend** | OpenAI-compatible HTTP API server | `components/src/dynamo/frontend/` |
141-
| **Router** | KV cache-aware request routing with load balancing | `components/src/dynamo/router/` |
142-
| **Planner** | Real-time performance tuning and worker scaling | `components/src/dynamo/planner/` |
143-
| **Workers** | Backend engine integrations (vLLM, SGLang, TensorRT-LLM) | `components/src/dynamo/{vllm,sglang,trtllm}/` |
144-
| **KV Cache Manager** | Multi-tier cache offloading (GPU → CPU → SSD → Object Storage) | `lib/bindings/kvbm/` |
145-
| **SLA Profiler** | Benchmarking and SLA-driven configuration | `components/src/dynamo/profiler/` |
146-
147-
### Communication Planes
148-
149-
| Plane | Purpose | Documentation |
150-
|-------|---------|---------------|
151-
| **Discovery Plane** | Service registration and discovery across components | [docs/design-docs/distributed-runtime.md](docs/design-docs/distributed-runtime.md) |
152-
| **Request Plane** | High-performance request routing between components | [docs/design-docs/request-plane.md](docs/design-docs/request-plane.md) |
153-
| **KV Event Plane** | KV cache event propagation for cache-aware routing | [docs/design-docs/event-plane.md](docs/design-docs/event-plane.md) |
154-
155-
### Kubernetes Deployment
156-
157-
| Component | Purpose | Directory |
158-
|-----------|---------|-----------|
159-
| **Operator** | CRDs, controllers, and webhooks for K8s-native deployment | `deploy/operator/` |
160-
| **Helm Charts** | Templated deployment configurations | `deploy/helm/` |
161-
| **Recipes** | Pre-built deployment configurations for common scenarios | `recipes/` |
162-
163-
### Why These Languages?
164-
165-
| Layer | Language | Why | Directory |
166-
|-------|----------|-----|-----------|
167-
| Core Runtime | Rust | Memory safety, zero-cost abstractions, predictable latency | `lib/runtime/` |
168-
| LLM Engine | Rust | High-throughput token processing, async I/O | `lib/llm/` |
169-
| KV Block Manager | Rust | Direct memory control for GPU/CPU/SSD offloading | `lib/bindings/kvbm/` |
170-
| Backend Integrations | Python | Rapid iteration, framework compatibility | `components/src/dynamo/` |
171-
| Planner & Router | Python | Extensible policies, easy customization | `components/src/dynamo/{planner,router}/` |
172-
| Kubernetes Operator | Go | K8s controller patterns, client-go ecosystem | `deploy/operator/` |
173-
174-
---
175-
176-
## Contribution Workflow
177-
178-
### When Is a GitHub Issue Required?
179-
180-
**Submit a PR directly (no issue needed) if:**
181-
- Your change is **<100 lines of code** AND addresses a simple, focused concern (typos, simple bug fixes, formatting)
182-
- **OR** your PR addresses an **existing approved GitHub Issue** (link with "Fixes #123")
183-
184-
**Create a GitHub Issue first for:**
185-
- Changes ≥100 lines of code
186-
- New features, architecture changes, or multi-component changes
187-
- Any change that requires design discussion
188-
189-
### Issue-First Workflow
190-
191-
For larger contributions, follow these steps:
192-
193-
1. **Create a GitHub Issue**[Open a Contribution Request](https://github.com/ai-dynamo/dynamo/issues/new?template=contribution_request.yml) using the template.
194-
195-
2. **Describe the Problem** – Explain what you're solving, including context, error messages, or use cases.
196-
197-
3. **Propose a Solution** – Include:
198-
- **Estimated PR size**: XS / S / M / L / XL / XXL
199-
- **Files affected**: Approximate number and components
200-
- **Type of change**: Bug fix, new feature, refactoring, or performance improvement
201-
202-
4. **Get Approval** – Wait for Dynamo maintainers to review and apply the `approved-for-pr` label.
203-
204-
5. **Submit a Pull Request**[Open a PR](https://github.com/ai-dynamo/dynamo/compare) that references the issue using GitHub keywords (e.g., "Fixes #123").
205-
206-
6. **Address Code Rabbit Review** – Respond to automated Code Rabbit suggestions, including nitpicks.
207-
208-
7. **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.
209-
210-
8. **Request Review** – Add the person who approved your issue as a reviewer. Check [CODEOWNERS](CODEOWNERS) for required approvers based on files modified.
211-
212-
> **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.
213-
214-
---
215-
216-
## Code Style & Quality
217-
218-
### Pre-commit Hooks
219-
220-
All PRs are checked against [pre-commit hooks](.pre-commit-config.yaml). Run locally:
221-
222-
```bash
223-
pre-commit install
224-
pre-commit run --all-files
225-
```
226-
227-
### Language Conventions
228-
229-
| Language | Style Guide | Formatter |
230-
|----------|-------------|-----------|
231-
| **Python** | [PEP 8](https://peps.python.org/pep-0008/) | `black`, `ruff` |
232-
| **Rust** | [Rust API Guidelines](https://rust-lang.github.io/api-guidelines/) | `cargo fmt`, `cargo clippy` |
233-
| **Go** | [Effective Go](https://go.dev/doc/effective_go) | `gofmt` |
234-
235-
### General Guidelines
236-
237-
- Keep PRs focused—one concern per PR
238-
- Avoid unnecessary complexity
239-
- No commented-out code
240-
- Ensure clean builds (no warnings or errors)
241-
- All tests must pass
242-
243-
### Running GitHub Actions Locally
244-
245-
Use [act](https://nektosact.com/) to run workflows locally:
246-
247-
```bash
248-
act -j pre-merge-rust
249-
```
250-
251-
Or use the [GitHub Local Actions](https://marketplace.visualstudio.com/items?itemName=SanjulaGanepola.github-local-actions) VS Code extension.
252-
253-
---
254-
255-
## DCO & Licensing
256-
257-
### Developer Certificate of Origin
258-
259-
Dynamo requires all contributions to be signed off with the [Developer Certificate of Origin (DCO)](https://developercertificate.org/). This certifies that you have the right to submit your contribution under the project's [Apache 2.0 license](LICENSE).
260-
261-
Each commit must include a sign-off line:
262-
263-
```text
264-
Signed-off-by: Jane Smith <jane.smith@email.com>
265-
```
266-
267-
Add this automatically with the `-s` flag:
268-
269-
```bash
270-
git commit -s -m "fix: your descriptive message"
271-
```
272-
273-
**Requirements:**
274-
- Use your real name (no pseudonyms or anonymous contributions)
275-
- Your `user.name` and `user.email` must be configured in git
276-
277-
⚠️ **DCO Check Failed?** See our [DCO Troubleshooting Guide](DCO.md) for step-by-step instructions to fix it.
278-
279-
### License
280-
281-
By contributing, you agree that your contributions will be licensed under the [Apache 2.0 License](LICENSE).
282-
283-
---
284-
285-
## Getting Help
286-
287-
- **Discord**: [Join our community](https://discord.gg/nvidia-dynamo)
288-
- **Discussions**: [GitHub Discussions](https://github.com/ai-dynamo/dynamo/discussions)
289-
- **Documentation**: [docs.nvidia.com/dynamo](https://docs.nvidia.com/dynamo/)
290-
291-
Thank you for contributing to Dynamo!
39+
By contributing, you agree that your contributions will be licensed under the [Apache 2.0 License](https://github.com/ai-dynamo/dynamo/blob/main/LICENSE).

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ Built in Rust for performance and Python for extensibility, Dynamo is fully open
8282
| [**Kubernetes Deployment**](#kubernetes-deployment) | Production multi-node clusters | ~30 min | K8s cluster with GPUs |
8383
| [**Building from Source**](#building-from-source) | Contributors and development | ~15 min | Ubuntu, Rust, Python |
8484

85-
Want to help shape the future of distributed LLM inference? See the **[Contributing Guide](CONTRIBUTING.md)**.
85+
Want to help shape the future of distributed LLM inference? See the **[Contribution Guide](docs/contribution-guide.md)**.
8686

8787
# Local Quick Start
8888

0 commit comments

Comments
 (0)