Fluent Assertions, a well-known .NET library that allows expressive asserts in unit tests, has launched version 8 with a proprietary license in partnership with Xceed, replacing the existing Apache 2.0 licence. The new license allows free non-commercial use, but any commercial use will require a paid license. The move has been negatively received by the developer community.
On January 13th 2025, Xceed Software published a notice of partnership with Fluent Assertions, where “Fluent Assertions will be integrated into (Xceed’s) suite of development tools”. The notice mentioned that the library will be licensed under a paid Xceed commercial license, but will continue to honour free licenses for open-source and non-commercial projects.
Xceed Software is a Canadian .NET component provider, with UI controls and other helper libraries such as .ZIP format tooling. Fluent Assertions is now shown as a library offered with a commercial license and support on the company website. The license for a single developer seat is stated to be 129.95 USD per year.
At the same time, the previous major version of the library, v7, will be kept “indefinitely” under its existing Apache license, allowing for free use in any kind of project, commercial or not.
Fluent Assertions was created by Denis Doomen, a Dutch developer, with the first version dating back to 2010. Since 2018, Jonas Nyrup, a Danish developer, has joined Denis in maintaining and evolving the library. Fluent Assertion is one of the most popular libraries in the .NET space, with over 450 million downloads on NuGet. It allows for more natural specification of asserts in unit tests, reading almost like a sentence in English.
string actual = "ABCDEFGHI";
actual.Should().StartWith("AB").And.EndWith("HI").And.Contain("EF").And.HaveLength(9);
The license change in v8 has led to a strongly-worded exchange on the project GitHub pull request comments. Developers argue that the price tag for the library is excessive, given its nature as a syntactic sugar for unit tests. Other developers think that maintaining all prereleases of the v8 under the existing Apache license while changing it to a proprietary license in the final pull request was a bad-faith move by the library maintainers. While the previous Apache 2.0 license allows derivative works with a different license, there are opinions among the developers that the change is against the license’s terms.
Some developers have mentioned that this move is reminiscent of other .NET ecosystem libraries that moved to commercial licenses, like the .NET drawing library ImageSharp or the Excel formatting library EPPlus.
Developers wanting to stay on the v7 branch should block the major version number in their .csproj file using a bracketed version tag to ensure that a package update doesn’t inadvertently put them in breach of the new license model.
<PackageReference Include="FluentAssertions" Version="[7.0.0]" />
One Fluent Assertions user has created a fork with the pre-release code of the library, still under the original license, with a new name of AwesomeAssertions. It is to be used as a direct replacement for current features only, without any evolution.
Alternatively, developers can remove the dependency on Fluent Assertions and use a similar library called Shouldly. There is an onboarding guide to Shouldly for Fluent Assertions users.