Thank you for your interest in contributing to Thunderbolt! This guide will help you get started.
- Code of Conduct
- Getting Started
- Development Setup
- How to Contribute
- Coding Standards
- Pull Request Process
- Issue Guidelines
This project follows the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code.
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR-USERNAME/Thunderbolt.git - Create a branch:
git checkout -b feature/your-feature-name - Make changes and commit
- Push and open a Pull Request
- .NET 10 SDK
- Docker & Docker Compose
- A C# IDE (JetBrains Rider, Visual Studio, or VS Code)
# Clone the repository
git clone https://github.com/sbdevman/Thunderbolt.git
cd Thunderbolt
# Start infrastructure
docker compose up postgres influxdb kafka -d
# Restore and build
dotnet restore Thunderbolt.slnx
dotnet build Thunderbolt.slnx
# Run tests
dotnet test Thunderbolt.slnx# Terminal 1 — Coordinator
dotnet run --project src/Thunderbolt.Coordinator
# Terminal 2 — Worker
dotnet run --project src/Thunderbolt.Worker
# Terminal 3 — API
dotnet run --project src/Thunderbolt.Api
# Terminal 4 — Dashboard
dotnet run --project src/Thunderbolt.Dashboard- Search existing issues first
- If the bug isn't reported, open a new issue
- Reference the issue in your PR
- Discuss the feature in an issue before starting
- Keep PRs focused — one feature per PR
- Fix typos, improve explanations, add examples
- Documentation PRs are always welcome
- New protocol handlers are a great way to contribute
- See
plugins/Thunderbolt.Protocols.Examplefor the template - Follow the
IProtocolHandlerinterface
- Use latest C# features (file-scoped namespaces, records, pattern matching)
- Follow .editorconfig rules in the repository
- Add XML doc comments to all public APIs
- Use meaningful names — no abbreviations except well-known ones (VU, RPS, etc.)
- Domain events go in
Thunderbolt.Core/Events/ - Actor messages go in
Thunderbolt.Core/Messages/ - New protocols get their own project under
src/Thunderbolt.Protocols/ - Tests mirror the
src/structure undertests/
Use clear, descriptive commit messages:
feat: add WebSocket protocol handler
fix: resolve race condition in VirtualUserActor shutdown
docs: update API reference with new metrics endpoints
test: add integration tests for Kafka producer
refactor: extract load profile parsing into dedicated class
- Write unit tests for all new logic
- Use FluentAssertions for assertions
- Use NSubstitute for mocking
- Use Testcontainers for integration tests
- Aim for tests that are fast, isolated, and deterministic
- Ensure all tests pass:
dotnet test Thunderbolt.slnx - Update documentation if you changed APIs or behavior
- Fill in the PR template completely
- Request a review from a maintainer
- Address review feedback promptly
- PRs require 1 approval before merging
- Squash commits on merge for a clean history
- Steps to reproduce
- Expected vs actual behavior
- Environment details (.NET version, OS, deployment method)
- Relevant logs or error messages
- The problem being solved
- Proposed solution
- Alternative approaches considered
- Who benefits from this feature
By contributing, you agree that your contributions will be licensed under the MIT License.
Thank you for helping make Thunderbolt better! ⚡