Empowering developers with modular components for modern application development, centered around Domain-Driven Design principles.
The bITdevKit provides modular building blocks for modern .NET applications. It is centered around
clean architecture, Domain-Driven Design, modular vertical slices and reusable infrastructure for
real-world application concerns such as requests, messaging, queueing, storage, scheduling and
presentation.
This repository contains the full source code, supporting docs and several example applications in
./examples that show how the framework can be composed in practice. The components are published as
NuGet packages.
For the latest updates and release notes, please refer to the CHANGELOG.
The documentation site is available at bridgingit-gmbh.github.io/bITdevKit.
The best entry point into the current documentation set is the Documentation and Introduction to DDD in bITdevKit.
- Common Extensions
- Common Utilities
- Common Serialization
- Common Options Builders
- Common Mapping
- Common Caching
- Common Observability Tracing
- Domain
- Domain Events
- Event Sourcing
- Domain Repositories
- Domain Specifications
- ActiveEntity
- Domain Policies
- Rules
- Results
- Application Commands and Queries
- Application Events
- DataPorter
- Xunit
- EnsureThat
- Mapster
- FluentValidation
- FluentAssertions
- Humanizer
- Polly
- Scrutor
- Serilog
- Quartz
- Shouldly
- Testcontainer
- EntityFramework
- Azure Storage
- Azure ServiceBus
- Azure CosmosDb
- RabbitMQ
The bITDevKit includes a dedicated benchmark project using BenchmarkDotNet to measure the performance of core components such as the Requester (CQRS/MediatR alternative).
How to run benchmarks:
dotnet run -c Release --project benchmarks/Common.Benchmarks/Common.Benchmarks.csproj- This will execute all benchmarks and generate detailed reports in the
BenchmarkDotNet.Artifacts/results/directory (HTML, Markdown, CSV). - The default benchmark covers the baseline request/response pipeline. You can extend the benchmarks to cover additional scenarios and compare different configurations.
Why benchmarks?
- Ensure high performance and low allocations for core infrastructure.
- Detect regressions and compare with other libraries (e.g., MediatR).
- Guide optimization and architectural decisions.
For more details, see the Common.Benchmarks project in the benchmarks/ folder.
The repository includes a MkDocs-based GitHub Pages site with:
- a landing page under
docs/site/ - curated technical docs synced from
./docs
Public site: https://bridgingit-gmbh.github.io/bITdevKit/
docs/site/- the site-specific source pages such as the landing page, getting started pages, templates page, styling, and helper scripts
docs/- the framework documentation source that is selectively imported into the public site
.github/pages/- the generated static MkDocs output
The sync step currently imports these files from ./docs into the public site:
INDEX.mdintroduction-ddd-guide.mdcommon-*.mdfeatures-*.mdtesting-*.md
The following are intentionally excluded from GitHub Pages:
docs/adr/docs/presentations/docs/specs/src/**
For a new Markdown page from ./docs to appear in GitHub Pages:
- Add or update the Markdown file under
./docs. - Make sure its filename matches one of the currently imported patterns above.
- If it should appear in navigation, add it to mkdocs.yml under the appropriate section.
- Regenerate the site locally or push to
mainso GitHub Actions publishes it.
Preview the full site locally with Docker:
pwsh -File ./docs/site/scripts/serve-pages.ps1or use the VS Code Tasks for the same command. Build the full static site locally:
pwsh -File ./docs/site/scripts/build-pages.ps1That build command performs these steps:
- Synchronize the selected public docs from
./docsintodocs/site/reference/ - Build the MkDocs site in Docker
- Write the generated static site to
./.github/pages/
The Pages workflow is defined in pages.yml.
On each push to main, it:
- checks out the repository
- runs
./docs/site/scripts/build-pages.ps1 - verifies that
./.github/pages/index.htmlwas generated - publishes the generated site to the
gh-pagesbranch
Typical documentation workflow:
- Edit or add Markdown under
./docs - If needed, update mkdocs.yml so the page is reachable in navigation
- Run
pwsh -File ./docs/site/scripts/serve-pages.ps1to preview the result - Run
pwsh -File ./docs/site/scripts/build-pages.ps1to generate the final static output - Commit and push to
mainto publish via GitHub Actions
Simply create a pull request with your ideas or contact us. Please refer to the Contribution Guide for more information.
To keep history clear and searchable, contributions should use semantic commit messages based on the Conventional Commits specification.
Format:
<type>[optional scope]: <description>
Examples:
feat(modules): add startup task registrationfix(jobs): prevent duplicate scheduling on startupdocs(readme): clarify contribution workflow
Policy:
- Use the Conventional Commits format for all repository contributions
- Keep the description in imperative mood and under 72 characters
- Prefer one logical change per commit
- Review
git diff --stagedbefore committing, orgit diffif nothing is staged - Check
git status --porcelainto confirm the exact files included - Never commit secrets or credentials
This project is licensed under the MIT License - see the LICENSE file for details.
