Thank you for your interest in contributing to RayTree!
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/<your-username>/RayTree.git cd RayTree
- Add the upstream remote:
git remote add upstream https://github.com/bitc0der/RayTree.git
- Create a feature branch from
main:git checkout -b feature/your-feature-name
- .NET 10 SDK
- Docker — required for integration tests (PostgreSQL, RabbitMQ, Kafka)
See AGENTS.md for the full list of build commands, test targets, and coding standards (naming, async/await, exception handling, DI, design principles, testing conventions, nullability).
Quick summary:
dotnet build RayTree.slnx
dotnet test tests/RayTree.Core.Tests # run relevant unit tests
dotnet format --verify-no-changes # verify style compliance-
Before submitting:
- Ensure the solution builds:
dotnet build RayTree.slnx - Run relevant unit tests and ensure they pass
- Run
dotnet format --verify-no-changes - Update documentation if your change affects public APIs or behavior
- Ensure the solution builds:
-
Commit guidelines:
- Write clear, concise commit messages
- Keep commits focused — one logical change per commit
- Do not commit secrets, connection strings, or credentials
-
PR requirements:
- Reference any related issues in the PR description
- Describe what changed and why
- Note any breaking changes
- Include test coverage for new functionality
-
CI gate:
- All PRs must pass the CI pipeline (build + unit tests + integration tests for relevant plugins)
- The CI workflow builds once and shares the artifact across test jobs
See docs/plugin-development.md for the full plugin development guide, including interface contracts, pipeline flow, and testing patterns.
To add a new plugin:
- Create a project under
src/RayTree.Plugins.<Name>/ - Implement the relevant interface(s)
- Add builder extension methods for easy registration
- Add a test project under
tests/RayTree.Plugins.<Name>.Tests/ - Register the project in
RayTree.slnx - Add any new packages to
Directory.Packages.props(see AGENTS.md for package management rules)
Include:
- RayTree version
- .NET SDK version
- Steps to reproduce
- Expected vs. actual behavior
- Relevant code snippets or logs
- Whether the issue is reproducible with in-memory plugins or requires a specific broker
Include:
- A clear description of the problem you're trying to solve
- Why existing functionality doesn't meet your needs
- A proposed solution or API design (if you have one)
- Any alternative approaches you've considered
See SECURITY.md. Do not open a public GitHub issue for security vulnerabilities — use GitHub Security Advisories instead.
| Document | Content |
|---|---|
| README.md | Overview, quick start, package list |
| AGENTS.md | Build commands, coding standards, testing conventions, repository layout |
| docs/plugin-development.md | Plugin interfaces, pipeline flow, registration patterns |
| docs/configuration.md | Configuration options and overrides |
| docs/ef-core-integration.md | EF Core interceptor usage |
| docs/database-migration.md | PostgreSQL schema migration and type mappings |
| docs/trigger-setup.md | PostgreSQL trigger setup |
| docs/serializers-compressors.md | Serializer and compressor options |
| docs/opentelemetry-metrics.md | OTel metrics instrumentation |
| SECURITY.md | Security policy and vulnerability reporting |
| CHANGELOG.md | Release history and breaking changes |