Domain-first syntax
`CanShip.And.HighPriority` says what the rule means without ceremony or overloaded Boolean operators.
Specifications for modern C# · zero third-party dependencies
Compose named rules with terse, discoverable syntax—then evaluate them in memory or hand them to infrastructure without leaking a query API.
dotnet add package DanMarshall.FluentSpecificationsvar request = Order.Search
.Matching.CanShip.And.HighPriority
.Sorted.By.CreatedAt.Desc
.Then.By.Id.Asc
.Page(2).OfSize(50);Informed by the internal Kotlin API used at Reapit and established specification libraries across C#, Java, Kotlin, TypeScript, and PHP.
Read the design lineageA deliberately small idea
`CanShip.And.HighPriority` says what the rule means without ceremony or overloaded Boolean operators.
The same immutable specification supports fast matching, structured diagnostics, rendering, and translation.
Rules and immutable searches cross a provider-neutral repository boundary. EF Core is one materializing implementation.
The useful boundary
A specification stays Boolean. A separate immutable search can add sorting and paging without leaking EF, `DbSet`, or `IQueryable`.
Use the repository extension