I’ve relied on Fluent Assertions for years under its Apache-2.0 license, so when v8.0 switched to a commercial license, I had to rethink what free alternatives are available.
Why Fluent Assertions Changed Licenses
I don't exactly what the maintainers had in mind, but it feels like Fluent Assertions got big enough that doing bug fixes, feature requests, and support in evenings and weekends just wasn’t cutting it. Adding a paid tier buys them real development time so the lib can stay healthy and they don’t burn out.
Some Alternatives
Look for official fork
Its not uncommon that the community creates a fork out of the last commit of Apache 2.0 version
- Pros: Continue to get maintainable from the point of the current version
- Cons: Risk of in-popularity, new maintainers, new adoptions
- A popular alternative: https://github.com/AwesomeAssertions/AwesomeAssertions
Stay on 7.x Stay on v7.x (Apache 2.0)
- Pros: no cost and free critical updates for now.
- Cons: No new features, manual upkeep for bug-fixes.
Migrate to an Alternative
Swap in another OSS assertion library
- Pros: Free, continuous updates
- Cons: Migration effort, subtle behavior differences. Picking a alternative is sometimes not so straightforward but doing a assessment like looking at github stars, contributors, downloads and other companies might give a good enough assessment.
- Alternatives: Shouldly, NExpect, Snapshooter, or built-in xUnit/NUnit asserts
Fork Internally
Fork v7.x into my org’s repo and treat it like an internal package.
- Pros: Full control over patches and security updates.
- Cons: Maintenance burden
Purchase a License
Buy the new Fluent Assertions commercial tier.
- Pros: No migration needed. Access to latest features, official support etc.
- Cons: Recurring cost per developer
Negotiate or Contribute
Reach out to the maintainers for a “community” exception or offer contributions in exchange for more lenient terms.
- Pros: Potential zero-cost path, helps shape project direction.
- Cons: Custom agreements and time investments.
What I Chose
For now I decided to perform Stay on 7.x and I'm leaning on adopting a "official fork" maybe https://github.com/AwesomeAssertions/AwesomeAssertions.
To make sure I do not update the fluent assertions package by mistake we can pin the version, and applying license scanning check in CI.
I wrote a post about a custom free solution for keeping track of nuget license here: https://www.rasmusolsson.dev/posts/tracking-nuget-licenses-with-dotnet-project-licenses
Happy coding!