Minimal APIs in .NET 10 — Everything That Actually Changed
The headline features in one place, with honest takes on which ones you should adopt now and which can wait.
.NET 10's Minimal APIs got a real polish pass. Three changes are immediately useful, two are mostly hype, and one quietly fixes the most-complained-about gap.
Built-in validation (the quiet win). Until 10, validation in Minimal APIs was a "bring your own FluentValidation" situation. Now AddValidation wires data annotations into the pipeline natively, with ProblemDetails responses for free.
builder.Services.AddValidation();
app.MapPost("/orders", (Order o) => Results.Ok(o));
public record Order([Required, StringLength(100)] string Sku, [Range(1, 999)] int Qty);
Bad input now returns RFC 7807 ProblemDetails without a single filter. This was the missing piece that made Controllers the easy recommendation. It's gone.
Server-Sent Events as a first-class result. TypedResults.ServerSentEvents streams IAsyncEnumerable<SseItem<T>> to the client. Streaming LLM token responses is now a one-line endpoint. (Full post on this elsewhere.) Genuinely useful.
OpenAPI 3.1 by default + YAML support. The schema is finally current with the rest of the world. YAML is a small thing but it's the thing your API consumers wanted. No more JSON-vs-YAML script wars in your CI.
Native AOT improvements. EF Core 10 works under AOT now. The trimmer is smarter. This is real and useful if you care about cold start. The post on AOT covers the trade-offs.
TypedResults maturity. TypedResults.Ok<T>(...) etc. continues to fill in gaps. Mostly already-shipped, just more complete.
The thing that's still missing: a built-in story for endpoint filters comparable to action filters in Controllers. The AddEndpointFilter API works, but discovery, ordering, and per-feature grouping are still manual. Coming, not here.
Migration decision (controllers → minimal):
- Stay on Controllers if: your team is large and onboarding-sensitive, you rely on content negotiation, you use complex action filters that don't map cleanly to endpoint filters, or you have OpenAPI-driven SDK generation tooling that's tested against the controller output.
- Move to Minimal if: your service is small to medium, your team's comfortable with it, and you've felt the friction of "where's that endpoint defined again?" Apply the endpoint-per-feature pattern from day one.
What I'd ship today on a new project: Minimal APIs, with AddValidation, with the endpoint-per-feature pattern, with AOT off until I have the time to chase the warnings. That's a clean, modern stack with no third-party dependencies for the boring concerns. The .NET 10 polish is enough that I no longer have to qualify the recommendation.