# Contributing to Nyx First off, **thank you for taking the time to contribute!** By participating in this project, you agree to abide by the community values and expectations described in our [Code of Conduct](CODE_OF_CONDUCT.md). Nyx is dual‑licensed under **MIT** and **Apache‑2.0**. By submitting code, documentation, or any other material, you agree to license your contribution under these same terms. --- ## Table of Contents 1. [Getting Started](#getting-started) 2. [How to Contribute](#how-to-contribute) * [Bug Reports](#bug-reports) * [Feature Requests](#feature-requests) * [Pull Requests](#pull-requests) 3. [Development Workflow](#development-workflow) 4. [Commit & Branching Conventions](#commit--branching-conventions) 5. [Style Guide](#style-guide) 6. [Security Policy](#security-policy) 7. [Community Standards](#community-standards) --- ## Getting Started Clone the repository and build Nyx in release mode: ```bash git clone https://github.com//nyx.git cd nyx cargo build --release ``` Run the test‑suite: ```bash cargo test ``` > **Tip**: The first build downloads and compiles several `tree‑sitter` grammars. Later builds will be faster. --- ## How to Contribute ### Bug Reports * Search existing [issues](https://github.com//nyx/issues) to ensure the bug has not already been reported. * Include **steps to reproduce**, expected vs. actual behaviour, and your environment details (`nyx --version`, `rustc --version`). * Attach a minimal code sample if possible. ### Feature Requests We welcome well‑motivated feature proposals. Please describe: 1. **Problem statement** – what pain point does this solve? 2. **Proposed solution** – high‑level description, optionally with pseudo‑code. 3. **Alternatives considered** – why existing functionality is not enough. ### Pull Requests Every PR should: 1. Target the `main` branch. 2. Contain a single, focused change (small orthogonal fixes are okay). 3. Pass `cargo test`, `cargo fmt --check`, and `cargo clippy -- -D warnings`. 4. Update documentation and, when relevant, add tests. 5. Reference related issue numbers in the description (`Fixes #123`). A reviewer will provide feedback within **3 business days**. Squash‑merge is the default strategy; maintainers may edit commit messages for clarity. --- ## Development Workflow 1. **Fork** the repo and create your feature branch: ```bash git checkout -b feature/my‑feature ``` 2. Make your changes, then run: ```bash cargo fmt cargo clippy --all-targets --all-features -- -D warnings cargo test ``` 3. **Sign‑off** your commits if your employer requires a Developer Certificate of Origin (DCO): ```bash git commit -s -m "feat: add XYZ" ``` 4. Push the branch and open a PR against `main`. --- ## Commit & Branching Conventions * **Branch names**: `feature/`, `fix/`, `docs/` * **Commit style** – Conventional Commits (simplified): ```text type(scope): subject body (optional) ``` | Type | Use for | |------------|--------------------------------------| | `feat` | New functionality | | `fix` | Bug fixes | | `docs` | Documentation only | | `refactor` | Code change without behaviour change | | `test` | Adding or changing tests | | `chore` | Build process, tooling | --- ## Style Guide * **Formatting**: run `cargo fmt` before committing. * **Linting**: CI runs Clippy with `-D warnings`; keep the tree warning‑free. * **Unsafe Rust**: prohibited unless absolutely necessary. Justify with in‑code comments. * **Public API stability**: avoid breaking changes on exported types and functions without prior discussion. --- ## Security Policy Please do **not** open public issues for security‑sensitive bugs. Instead, email the maintainers at `` with the details and a proof of concept. We aim to acknowledge reports within **48 hours**. --- ## Community Standards We strive to maintain a welcoming and inclusive community. Harassment, discrimination, or other forms of unacceptable behavior will be addressed per the [Code of Conduct](CODE_OF_CONDUCT.md). Thank you for helping to make Nyx better!