<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Wilbert van Dolleweerd – .NET Tool</title><link>https://wilbertvandolleweerd.com/tags/.net-tool/</link><description>Recent content in .NET Tool on Wilbert van Dolleweerd</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 29 Jul 2025 11:39:05 +0200</lastBuildDate><atom:link href="https://wilbertvandolleweerd.com/tags/.net-tool/index.xml" rel="self" type="application/rss+xml"/><item><title>Favorite tooling / Nuget packages</title><link>https://wilbertvandolleweerd.com/blog/favorite-packages/</link><pubDate>Tue, 29 Jul 2025 11:39:05 +0200</pubDate><guid>https://wilbertvandolleweerd.com/blog/favorite-packages/</guid><description>
&lt;h1>Don&amp;rsquo;t reinvent the wheel&lt;/h1>&lt;p>An important skill as a software developer is knowing when to build something yourself and when to pull
in a external dependency. This is a delicate balance.&lt;/p>
&lt;p>When you pull in a dependency you need to ask yourself:
&lt;em>&amp;ldquo;What if this package would disappear tomorrow?&amp;rdquo;&lt;/em>.
Worst case would be that from now on you need to support it yourself. Plan accordingly - maybe add an abstraction to make
it easier to replace the dependency in the future.&lt;/p>
&lt;p>On the other hand, deciding to write everything yourself might be a interesting intellectual challenge but your customer who is
paying the bill will probably be less impressed &amp;#x1f4b8;&lt;/p>
&lt;p>During the course of multiple projects and solving problems, you will encounter lots of tools and packages. People might recommend them to
you or they are considered to be a de facto standard within your community.&lt;/p>
&lt;h2>My selection criteria&lt;span class="hx:absolute hx:-mt-20" id="my-selection-criteria">&lt;/span>
&lt;a href="#my-selection-criteria" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>These criteria are subjective - it is what I consider to be important. These are not hard rules.&lt;/p>
&lt;ul>
&lt;li>I prefer open source over commercial. I don&amp;rsquo;t dismiss commercial software but all things being equal, open source would have my preference.&lt;/li>
&lt;li>&lt;a href="https://www.youtube.com/watch?v=-NQUSbhqTLs"target="_blank" rel="noopener">Libraries over frameworks&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a>. Frameworks tend to force you in a specific way of working while
with libraries you can pick what to use. Having said, sometimes you cannot avoid a framework.&lt;/li>
&lt;li>Packages/tools that are actively maintained are a plus.&lt;/li>
&lt;li>For a commercial project, I tend to avoid the more &amp;lsquo;viral&amp;rsquo; &lt;a href="https://en.wikipedia.org/wiki/GNU_General_Public_License"target="_blank" rel="noopener">GPL-like&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> licenses. Not
because I personally dislike these licenses but because they are usually not accepted by customers/our organisation.&lt;/li>
&lt;/ul>
&lt;h2>Show me the list&lt;span class="hx:absolute hx:-mt-20" id="show-me-the-list">&lt;/span>
&lt;a href="#show-me-the-list" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h2>&lt;p>This is my list of useful tools and Nuget packages that I use on a regular basis in
projects (both my own and at work). I will update this list to keep it current and I can refer other people
to it. The description in &lt;em>italics&lt;/em> means that it is lifted directly from the project website.&lt;/p>
&lt;h3>Syntactic sugar / patterns&lt;span class="hx:absolute hx:-mt-20" id="syntactic-sugar--patterns">&lt;/span>
&lt;a href="#syntactic-sugar--patterns" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;p>Syntactic sugar refers to features that can be used to simply existing syntax for accomplishing a task. Patterns are a well-known defined way to
solve common problems.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/mcintyre321/OneOf/"target="_blank" rel="noopener">OneOf&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - provides F# style discriminated unions.&lt;/li>
&lt;li>&lt;a href="https://github.com/domn1995/dunet"target="_blank" rel="noopener">Dunet&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - similar to OneOf, but with source generators.&lt;/li>
&lt;li>&lt;a href="https://github.com/altmann/FluentResults"target="_blank" rel="noopener">FluentResults&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - return a result object instead of an exception.&lt;/li>
&lt;li>&lt;a href="https://www.nuget.org/packages/Vogen/"target="_blank" rel="noopener">Vogen&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;is a semi-opinionated library which is a Source Generator to generate value objects.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://nodatime.org/"target="_blank" rel="noopener">NodaTime&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - if you have to write functionality that will span timezones, use this library. No exceptions.&lt;/li>
&lt;li>&lt;a href="https://flurl.dev/"target="_blank" rel="noopener">Flurl&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - an elegant way to build URLs &amp;amp; set query params&lt;/li>
&lt;li>&lt;a href="https://github.com/angularsen/UnitsNet"target="_blank" rel="noopener">UnitsNet&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;add strongly typed quantities to your code and get merrily on with your life.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/ardalis/SmartEnum"target="_blank" rel="noopener">SmartEnums&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - if you prefer Java style enums that can have behaviour.&lt;/li>
&lt;li>&lt;a href="https://github.com/StephenCleary/Comparers"target="_blank" rel="noopener">Comparers&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - can&amp;rsquo;t be bothered with all the boilerplate code for writing comparers? Use this.&lt;/li>
&lt;li>&lt;a href="https://mapperly.riok.app/"target="_blank" rel="noopener">Mapster&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;a .NET source generator for generating object mappings. No runtime reflection.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/dotnet-state-machine/stateless"target="_blank" rel="noopener">Stateless&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;create state machines and lightweight state machine-based workflows directly in .NET code.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/App-vNext/Polly"target="_blank" rel="noopener">Polly&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;Polly is a .NET resilience and transient-fault-handling library that allows developers to express resilience strategies such as Retry, Circuit Breaker, Hedging, Timeout, Rate Limiter and Fallback in a fluent and thread-safe manner.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://docs.fluentvalidation.net/en/latest/"target="_blank" rel="noopener">FluentValidation&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;is a .NET library for building strongly-typed validation rules.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/dotnet/reactive"target="_blank" rel="noopener">Reactive Extensions for .NET&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;a library for event-driven programming with a composable, declarative model.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/lofcz/FastCloner"target="_blank" rel="noopener">FastCloner&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;Fast cloning library, supporting anything from .NET 4.6 to modern .NET 8+. Implements both deep and shallow cloning.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/Tyrrrz/CliWrap"target="_blank" rel="noopener">CliWrap&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;a library for interacting with external command-line interfaces.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/Arcenox-co/TickerQ"target="_blank" rel="noopener">TickerQ&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;a fast, reflection-free background task scheduler for .NET&amp;rdquo;&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3>Testing&lt;span class="hx:absolute hx:-mt-20" id="testing">&lt;/span>
&lt;a href="#testing" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;p>All tools related to testing.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/xunit/xunit"target="_blank" rel="noopener">xUnit&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - I simply prefer xUnit over NUnit.&lt;/li>
&lt;li>&lt;a href="https://github.com/AArnott/Xunit.SkippableFact"target="_blank" rel="noopener">xUnit.SkippableFact&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - Let&amp;rsquo;s you skip certain tests based on conditions.&lt;/li>
&lt;li>&lt;a href="https://nsubstitute.github.io/"target="_blank" rel="noopener">NSubstitute&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;Mock, stub, fake, spy, test double? Strict or loose? Nah, just substitute for the type you need!&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/AutoFixture/AutoFixture"target="_blank" rel="noopener">Autofixture&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;is designed to make Test-Driven Development more productive and unit tests more refactoring-safe. It does so by removing the need for hand-coding anonymous variables as part of a test&amp;rsquo;s Fixture Setup phase.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://www.nuget.org/packages/AutoFixture.Xunit2"target="_blank" rel="noopener">Autofixture.Xunit2&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;offers integrations with most major .NET testing frameworks.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://www.nuget.org/packages/AutoFixture.AutoNSubstitute"target="_blank" rel="noopener">Autofixture.AutoNSubstitute&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;offers integations with most major .NET mocking libraries.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://fluentassertions.com/"target="_blank" rel="noopener">FluentAssertions&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;Fluent Assertions is a very extensive set of extension methods that allow you to more naturally specify the expected outcome of a TDD or BDD-style unit tests.&amp;rdquo;&lt;/em>&lt;/li>
&lt;/ul>
&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-green-200 hx:bg-green-100 hx:text-green-900 hx:dark:border-green-200/30 hx:dark:bg-green-900/30 hx:dark:text-green-200">
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2">&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true">&lt;path stroke-linecap="round" stroke-linejoin="round" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"/>&lt;/svg>&lt;/div>
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7">
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0">Since version 8, Fluent Assertions requires a commercial license.&lt;/div>
&lt;/div>
&lt;/div>
&lt;ul>
&lt;li>&lt;a href="https://github.com/Resultful/FluentAssertions.Resultful"target="_blank" rel="noopener">FluentAssertions.OneOf&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;improves the usage of &lt;a href="https://github.com/mcintyre321/OneOf/"target="_blank" rel="noopener">OneOf&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> to allow easier unit testing.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/bchavez/Bogus"target="_blank" rel="noopener">Bogus&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - easily create fake data for your tests.&lt;/li>
&lt;li>&lt;a href="https://github.com/alefranz/MELT"target="_blank" rel="noopener">MELT&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;MELT is a free, open-source, testing library for the .NET Standard Microsoft Extensions Logging library. It is a solution to easily test logs.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/TNG/ArchUnitNET"target="_blank" rel="noopener">ArchUnitNET&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - express &amp;amp; verify your architecture as unit tests.&lt;/li>
&lt;li>&lt;a href="https://bunit.dev/"target="_blank" rel="noopener">bUnit&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;is a testing library for Blazor Components.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/axllent/mailpit"target="_blank" rel="noopener">Mailpit&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;email testing for developers&amp;rdquo;&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3>Userinterface&lt;span class="hx:absolute hx:-mt-20" id="userinterface">&lt;/span>
&lt;a href="#userinterface" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;p>Looking for things to spice up your userinterface?&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://phosphoricons.com/"target="_blank" rel="noopener">Phospor&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;is a flexible icon family for interfaces, diagrams, presentations — whatever, really.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://iconify.design/"target="_blank" rel="noopener">Iconify&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - over 200.000 open source vector icons.&lt;/li>
&lt;li>&lt;a href="https://lucide.dev/"target="_blank" rel="noopener">Lucide&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - another set of open source icons.&lt;/li>
&lt;li>&lt;a href="https://www.flaticon.com/"target="_blank" rel="noopener">FlatIcon&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - same.&lt;/li>
&lt;li>&lt;a href="https://spectreconsole.net/"target="_blank" rel="noopener">Spectre.Console&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;a .NET library that makes it easier to create beautiful console applications.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://echarts.apache.org/en/index.html"target="_blank" rel="noopener">Apache ECharts&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;An Open Source JavaScript Visualization Library&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://mudblazor.com/"target="_blank" rel="noopener">MudBlazor&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - A Blazor component library.&lt;/li>
&lt;li>&lt;a href="https://learn.microsoft.com/nl-nl/dotnet/communitytoolkit/mvvm/"target="_blank" rel="noopener">MVVM Toolkit&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;A fast, modular, platform-agnostic MVVM library.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://avaloniaui.net/"target="_blank" rel="noopener">AvaloniaUI&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;The open-source WPF successor for .NET developers building beautiful, cross-platform applications.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://kikipoulet.github.io/SukiUI/"target="_blank" rel="noopener">SukiUI&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - A desktop theme for AvaloniaUI&lt;/li>
&lt;li>&lt;a href="https://livecharts.dev/"target="_blank" rel="noopener">LiveCharts2&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - Almost all software needs a chart&lt;/li>
&lt;li>&lt;a href="https://bootswatch.com/"target="_blank" rel="noopener">Bootswatch&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;Free themes for Bootstrap. Simply download a CSS file and replace the one in Bootstrap.&amp;rdquo;&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3>Logging / Performance&lt;span class="hx:absolute hx:-mt-20" id="logging--performance">&lt;/span>
&lt;a href="#logging--performance" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;p>Logging and performance related tooling.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://serilog.net/"target="_blank" rel="noopener">Serilog&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;provides diagnostic logging to files, the console, and elsewhere.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/serilog-tracing/serilog-tracing"target="_blank" rel="noopener">SerilogTracing&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;a minimal tracing system that integrates Serilog with .NET&amp;rsquo;s &lt;code>System.Diagnostics.Activity&lt;/code>&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/Suchiman/SerilogAnalyzer"target="_blank" rel="noopener">SerilogAnalyzer&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;Roslyn-based analysis for code using the Serilog logging library. Checks for common mistakes and usage problems.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/dotnet/BenchmarkDotNet"target="_blank" rel="noopener">BenchmarkDotNet&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;helps you to transform methods into benchmarks, track their performance, and share reproducible measurement experiments.&amp;rdquo;&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3>Build / install related&lt;span class="hx:absolute hx:-mt-20" id="build--install-related">&lt;/span>
&lt;a href="#build--install-related" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;p>Everything related to your build process and installer.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://gitversion.net/"target="_blank" rel="noopener">GitVersion&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - Use your Git version history to determine a semantic version number.&lt;/li>
&lt;/ul>
&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-amber-200 hx:bg-amber-100 hx:text-amber-900 hx:dark:border-amber-200/30 hx:dark:bg-amber-900/30 hx:dark:text-amber-200">
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2">&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true">&lt;path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/>&lt;/svg>&lt;/div>
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7">
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0">Beware that GitVersion needs access to your entire Git history. Some build systems only check out the latest commit to speed up the git clone.
See the &lt;a href="https://gitversion.net/docs/reference/requirements"target="_blank" rel="noopener">requirements&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> for more information.&lt;/div>
&lt;/div>
&lt;/div>
&lt;ul>
&lt;li>&lt;a href="https://www.firegiant.com/wixtoolset/"target="_blank" rel="noopener">Wix&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - If you need to write an MSI-based installer.&lt;/li>
&lt;li>&lt;a href="https://github.com/dotnet-outdated/dotnet-outdated"target="_blank" rel="noopener">Dotnet outdated&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - find out if your dependencies need updating.&lt;/li>
&lt;li>&lt;a href="https://csharpier.com/"target="_blank" rel="noopener">CSharpier&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;is an opinionated code formatter for c# and Xml.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://www.nuget.org/packages/Microsoft.CodeAnalysis.BannedApiAnalyzers/"target="_blank" rel="noopener">Banned API Analyzer&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - prevent the usage of certain classes/methods in your code.&lt;/li>
&lt;li>&lt;a href="https://github.com/velopack/velopack"target="_blank" rel="noopener">Velopack&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;Velopack is an installation and auto-update framework for cross-platform applications.&amp;rdquo;&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3>Network stuff / messaging&lt;span class="hx:absolute hx:-mt-20" id="network-stuff--messaging">&lt;/span>
&lt;a href="#network-stuff--messaging" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;p>All things related to networking and/or messaging.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/dotnet/yarp"target="_blank" rel="noopener">YARP&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - a reverse proxy server.&lt;/li>
&lt;li>&lt;a href="https://mitmproxy.org/"target="_blank" rel="noopener">mitmproxy&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;a free and open source interactive HTTPS proxy.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://fast-endpoints.com/"target="_blank" rel="noopener">FastEndPoints&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;a developer friendly alternative to Minimal APIs &amp;amp; MVC.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://masstransit.io/"target="_blank" rel="noopener">MassTransit&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;the trusted messaging framework powering mission-critical applications in more than 100 countries across industries like finance, government, logistics, healthcare, and technology&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://wolverinefx.net/"target="_blank" rel="noopener">Wolverine&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;The messaging and web development framework that gets out of your way&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/BrighterCommand/Brighter"target="_blank" rel="noopener">Brighter&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;a framework for building messaging app with .NET and C#&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/BrighterCommand/Darker"target="_blank" rel="noopener">Darker&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;The query-side counterpart of Brighter.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://msgpack.org/"target="_blank" rel="noopener">MessagePack&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;an efficient binary serialization format.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://easynetq.com/"target="_blank" rel="noopener">EasyNetQ&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;the leading client API for RabbitMQ on .NET&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://mqtt-explorer.com/"target="_blank" rel="noopener">MQTT Explorer&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;An all-round MQTT client that provides a structured topic overview&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://www.asyncapi.com/en"target="_blank" rel="noopener">AsyncAPI&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;Open-Source tools to easily build and maintain your event-driven architecture. All powered by the AsyncAPI specification, the industry standard for defining asynchronous APIs.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://scalar.com/"target="_blank" rel="noopener">Scalar&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;Create world-class API Docs with a built-in interactive playground&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://mosquitto.org/"target="_blank" rel="noopener">Mosquitto&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;an open source message broker that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://ngrok.com/"target="_blank" rel="noopener">NGrok&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - API gateway. Makes it possible to locally test your webhooks.&lt;/li>
&lt;/ul>
&lt;h3>Databases&lt;span class="hx:absolute hx:-mt-20" id="databases">&lt;/span>
&lt;a href="#databases" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;p>Everything related to data access.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://learn.microsoft.com/en-us/ef/core/providers/sqlite/?tabs=dotnet-core-cli"target="_blank" rel="noopener">SQLite EF Core Database Provider&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - Use EF Core with SQLite.&lt;/li>
&lt;li>&lt;a href="https://www.npgsql.org/efcore/?tabs=onconfiguring"target="_blank" rel="noopener">Npgsql Entity Framework Core Provider&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - Use EF Core with PostgreSQL.&lt;/li>
&lt;li>&lt;a href="https://github.com/Giorgi/EntityFramework.Exceptions"target="_blank" rel="noopener">EntityFramework.Exceptions&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;Handle database errors easily when working with Entity Framework Core. Supports SQLServer, PostgreSQL, SQLite, Oracle and MySql.&amp;rdquo;&lt;/em>&lt;/li>
&lt;li>&lt;a href="https://github.com/efcore/EFCore.CheckConstraints"target="_blank" rel="noopener">EFCore.CheckConstraints&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;Check constraints for Entity Framework Core&amp;rdquo;&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3>Reporting&lt;span class="hx:absolute hx:-mt-20" id="reporting">&lt;/span>
&lt;a href="#reporting" class="subheading-anchor" aria-label="Permalink for this section">&lt;/a>&lt;/h3>&lt;p>Sometimes you still need a printed report.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.questpdf.com/"target="_blank" rel="noopener">QuestPDF&lt;svg class="hx:inline hx:rtl:rotate-270 hx:align-baseline" height="1em" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m9.1716 7.7574h7.0711m0 0v7.0711m0-7.0711-8.4853 8.4853" stroke-linecap="round" stroke-linejoin="round"/>
&lt;/svg>&lt;/a> - &lt;em>&amp;ldquo;Generate and manipulate PDF documents in your .NET applications&amp;rdquo;&lt;/em>&lt;/li>
&lt;/ul></description></item></channel></rss>