Thank you for considering a contribution to BlazorMVU!
This guide will help you get from "I want to help" to "my PR is merged" as smoothly as possible.
- Code of Conduct
- Ways to Contribute
- Getting Started
- Development Workflow
- Coding Standards
- Testing
- Submitting a Pull Request
- Issue Labels
Be kind. Be constructive. We're all here to build something useful together.
Discriminatory, harassing, or otherwise harmful behaviour will not be tolerated.
| Type | Description |
|---|---|
| 🐛 Bug report | Found something broken? Open an issue |
| 💡 Feature request | Have an idea? Open an issue with [feature] in the title |
| 📝 Documentation | Fix typos, improve examples, add guides |
| ✅ Tests | Improve coverage, add edge cases |
| 🔧 Code | Fix bugs, implement new features from the backlog |
| 🎨 Demo | Add a new MVU example to the demo app |
- .NET 10 SDK
- Git
git clone https://github.com/Atypical-Consulting/BlazorMVU.git
cd BlazorMVU
dotnet build BlazorMVU.slncd src/BlazorMVU.Demo
dotnet run
# Open https://localhost:7xxx in your browserdotnet test BlazorMVU.sln- Fork the repository
- Create a branch from
dev(notmain):git checkout dev git pull origin dev git checkout -b feat/my-feature
- Make your changes (see coding standards below)
- Run the tests to verify nothing is broken
- Commit using Conventional Commits
- Push to your fork and open a PR against
dev
⚠️ PRs targetingmaindirectly will be redirected todev.
We follow the Conventional Commits specification.
feat: add Sub.Debounce subscription type
fix: resolve double-render on rapid dispatch
docs: improve MvuComponent XML summary
test: add bUnit test for Cmd.Batch ordering
chore: update .NET SDK to 10.0.201
This keeps the changelog clean and makes releases easier to generate.
- Language version: C# 13 (as specified in csproj)
- Nullable: enabled — no
#nullable disablewithout a good reason - Namespaces:
BlazorMVU(root) — match the folder structure - Records over classes for Model state (immutability first)
- No mutable state in the
Updatefunction - XML doc comments on all public API surface
We use the default .NET EditorConfig style. Run dotnet format before committing:
dotnet format BlazorMVU.slnTests live in src/BlazorMVU.Tests and use:
- xUnit v3 for unit tests
- bUnit for component tests
- Shouldly for readable assertions
- New feature? Add at least one happy-path test and one edge-case test.
- Bug fix? Add a regression test that would have caught the bug.
- New
CmdorSubtype? Test that the side effect fires and returns the expected message.
- Branch is based on
dev -
dotnet buildpasses with no warnings -
dotnet testpasses (all tests green) -
dotnet format --verify-no-changespasses - PR description explains what and why (not just how)
- New public APIs have XML doc comments
feat: add Cmd.Race for competing async commands
fix: correct Sub.Timer cancellation on dispose
docs: add time-travel debugging tutorial
- CI runs automatically (build + tests)
- A maintainer reviews your PR (usually within a few days)
- We may request changes — please don't take this personally, it's how we keep quality high
- Once approved, we squash-merge into
dev
| Label | Meaning |
|---|---|
good first issue |
Small, well-scoped — great for newcomers |
help wanted |
We want community input on this |
bug |
Something is broken |
enhancement |
New feature or improvement |
documentation |
Docs-only change |
question |
Needs clarification before work starts |
Open an issue or start a Discussion.
We're friendly, we promise. 🙂
Maintained by Atypical Consulting — opinionated, production-grade open source.