.NET 11 Ships With C# 15 Union Types, the Same Day .NET 8 and 9 Lose Support
Software / news
.NET 11 Ships With C# 15 Union Types, the Same Day .NET 8 and 9 Lose Support
Microsoft's release is a two-year Standard Term Support build whose end-of-support date matches .NET 10's, which changes the upgrade maths for teams still on .NET 8.

Microsoft released .NET 11 on Tuesday, November 10, 2026, and the same date is the end of support for .NET 8 and .NET 9, according to Microsoft's support policy page. Teams still on either version are now running a runtime that gets no more security patches.
The announcement post on the .NET blog lists C# 15 as the default language version for projects that target the new release.
What the support dates say
.NET 11 is a Standard Term Support (STS) release. Microsoft's policy page gives STS builds two years of free patches, and lists November 14, 2028 as the end date for .NET 11.
That is the same day .NET 10, the Long Term Support release from November 11, 2025, stops being supported. The usual argument for waiting on the even-numbered release does not apply to the November 2026 releases: moving from .NET 8 to .NET 11 buys no more calendar time than moving to .NET 10.
| Version | Released | Type | End of support |
|---|---|---|---|
| .NET 11 | Nov 10, 2026 | STS | Nov 14, 2028 |
| .NET 10 | Nov 11, 2025 | LTS | Nov 14, 2028 |
| .NET 9 | Nov 12, 2024 | STS | Nov 10, 2026 |
| .NET 8 | Nov 14, 2023 | LTS | Nov 10, 2026 |
The policy page says systems must install the latest patch to stay supported. It lists the latest .NET 10 patch as 10.0.15.
Union types arrive in C# 15
The headline language feature is union types. A union declares that a value is exactly one of a fixed list of case types, and a switch expression over it gets an exhaustiveness check from the compiler.
An article from ABP, a .NET application framework vendor, tested the syntax on .NET 11 RC1 and gives this example: public union PlaceOrderResult(OrderPlaced, OutOfStock, CreditLimitExceeded, InvalidOrder);. ABP's write-up also lists the sharp edges.
Only switch expressions get exhaustiveness checking. A default union value matches none of its cases. Unions do not work in query strings, route values, headers or form fields, and in SignalR they work only with JsonHubProtocol.
The Register's Joab Jackson reported in September that lead designer Mads Torgersen said "This is how unions should be" in an introductory talk.
C# 15 also ships closed hierarchies, which limit direct derivation to the declaring assembly. ABP found that closed classes are implicitly abstract and that the restriction is not transitive, so leaf types should be sealed. Collection expression arguments, extension indexers and labeled break and continue round out the language list in Microsoft's post.
Runtime, ASP.NET Core and tooling
Microsoft says the runtime has hundreds of optimizations, including JIT work that removes redundant bounds checks and improves devirtualization. Native AOT gets faster interface dispatch. The post also notes updated minimum CPU requirements, which is worth reading before a fleet upgrade.
Runtime Async is still a preview feature, switched on with runtime-async=on. So is the memory safety work.
In ASP.NET Core, OpenAPI 3.2 becomes the default document version, and Minimal APIs and Blazor forms gain asynchronous validation. Unions are supported in System.Text.Json bodies and appear as anyOf schemas in OpenAPI.
In the SDK, the Native AOT CLI host is on by default and the MSBuild server stays warm between invocations. NuGet gains a minimum package publication age setting, a guard against freshly published malicious packages. Microsoft says the platform has more than 7,000 contributors, more than 589,000 unique NuGet packages and over 1.1 trillion package downloads.
What is not settled
Microsoft's post gives no benchmark table for .NET 11 against .NET 10, so the optimization claims are unquantified. Independent measurements have not appeared yet.
The ABP article was written against RC1 and warns that its framework targets up to net10.0, with an ABP 11 release based on .NET 11 expected later. Third-party libraries may trail the runtime.
The next date to watch is November 14, 2028, when both .NET 10 and .NET 11 leave support together. Related reading: Node 27's alpha and Psalm 7's default taint analysis both landed in the past week.
Sources
More in Software
- 01Git Contributors Draft a Debian-Style Vote on Whether to Keep the Ban on AI-Looking PatchesThe project has not agreed who may vote, how ballots are counted or what the options are, and the policy under dispute rejects any patch that looks AI generated.
- 02Agent Skills: Why Matt Pocock's 27-Skill Repo Has More Stars Than Anthropic'sBoth repositories are on GitHub trending. They share one file format, differ in intent, and one of them tells you in its README not to rely on it.
- 03Sherlock 0.16.2 Writes Reports Outside Its Folder on a ../ UsernameTwo unmerged pull requests would fix the bug, and the last two gaps between Sherlock releases were 435 and 359 days.
- 04Rust Pointer Provenance: What addr(), with_addr() and Miri Change About as usizeA Nov. 2 post and the standard library docs show what a pointer-to-integer cast throws away, and the Rust APIs that avoid it.