Latest Pre-release in branch 11.0
11.0.0-preview.5
Released 09 Jun 2026
(1 day ago)
Software.NET
Version11.0
Status
Preview
Latest release11.0.0-preview.5
09 Jun 2026
(1 day ago)
Release noteshttps://github.com/dotnet/core/blob/main/release-notes/11.0/preview/preview5/11.0.0-preview.5.md
Source codehttps://github.com/dotnet/core/tree/v11.0.0-preview.5
Documentationhttps://learn.microsoft.com/en-us/aspnet/core/?view=aspnetcore-11.0
Downloadhttps://dotnet.microsoft.com/en-us/download/dotnet/11.0
.NET 11.0 ReleasesView full list
Under Development: .NET 11 is still in active development and has not been officially released. The features and changes described below are based on the current development branch and may change before the final release.

What Is New in .NET 11

Category Item
New Features Runtime-native async (Runtime Async) - runtime-level async state machine support with cleaner stack traces
C# 15 collection expression arguments
Zstandard compression in System.IO.Compression
JsonNamingPolicy.PascalCase and per-member naming policy overrides in System.Text.Json
dotnet sln can now create and manage solution filter files (.slnf) from the CLI
dotnet run -e flag for passing environment variables directly on the command line
SafeFileHandle pipe-type reporting and anonymous pipe creation
RandomAccess read/write on non-seekable handles
Tar archive format selection
ASP.NET Core native OpenTelemetry semantic attributes on HTTP server activity
Blazor EnvironmentBoundary component for conditional rendering by hosting environment
IHostedService support in Blazor WebAssembly
EF Core GetEntriesForState API on ChangeTracker
WSL automatic HTTPS dev-cert trust via dotnet dev-certs https --trust
New Arm SVE2 JIT intrinsics
Improvements JIT: bounds check elimination for index-plus-constant patterns and index-from-end access
JIT: redundant checked arithmetic context removal
JIT: switch expression folding into branchless checks
WebAssembly: WebCIL payload loading and improved debugging symbols
WebAssembly: float[], Span<float>, and ArraySegment<float> marshaling improvements
Debugger can now step through await boundaries in runtime-async methods correctly
SDK installers on Linux and macOS reduced by ~140 MB (816 duplicate files replaced with symlinks)
dotnet watch integrates with Aspire app hosts, auto-relaunches after crashes
Matrix4x4 performance improvement in numerics
RegexOptions support for all Unicode newline sequences
New String Rune-based operations; BFloat16 support in BitConverter
CRC32 validation when reading ZIP entries; new methods for ZIP archive entries
Blazor Virtualize<TItem> now measures actual item heights at runtime instead of assuming uniform height
Kestrel starts processing HTTP/3 requests without waiting for the control stream
CA1873 analyzer false-positive rate reduced for property accesses and common method calls
F# parallel compilation enabled by default; faster computation expression compilation
Breaking Changes Minimum hardware requirements raised to x86-64-v2 (SSE4.1/SSE4.2 required); Windows Arm64 now requires LSE
SDK no longer auto-configures Mono launch target for .NET Framework apps on Linux
Virtualize<TItem>.OverscanCount default changed from 3 to 15
Microsoft.AspNetCore.OpenApi updated to OpenAPI 3.2.0 (breaking changes from upstream Microsoft.OpenApi)
ASP.NET Core Identity switches from DateTime/DateTimeOffset to TimeProvider

What Is Runtime Async and Why Does It Matter for Async-Heavy .NET Apps?

Runtime Async is the single biggest architectural shift in .NET 11: the runtime itself now understands async methods as a first-class concept, taking over work that the C# compiler has been doing alone since C# 5. Before this change, every async method was lowered by the compiler into a state machine struct that manually tracked suspension points. That worked, but it left the runtime blind to the logical flow of async execution - which is exactly why await-heavy stack traces have always looked like garbage in the debugger.

With Runtime Async, the CLR owns the suspend/resume cycle. Breakpoints now bind correctly inside async methods, and the debugger can step through await boundaries without falling into compiler-generated infrastructure you never wrote. In practice, this alone will save a meaningful amount of time for anyone debugging production issues in async microservices.

Starting with Preview 3, you no longer need <EnablePreviewFeatures>true</EnablePreviewFeatures> to use Runtime Async when targeting net11.0. NativeAOT and ReadyToRun are also supported. To opt in on an earlier preview or for a non-net11.0 target, add both flags:

<PropertyGroup>
  <EnablePreviewFeatures>true</EnablePreviewFeatures>
  <Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

Think of Runtime Async as the runtime finally learning to read the same code you wrote, rather than squinting at a compiler translation. The performance gains are real too - fewer allocations per async call and lower overhead on the hot path. This is the change that will compound across every web app, background service, and gRPC endpoint you deploy on .NET 11.

What JIT Improvements Ship with .NET 11 and Will You Actually Feel Them?

The JIT in .NET 11 is meaningfully smarter about removing work it can prove is unnecessary, and the gains show up without any code changes on your part. Here are the four areas worth knowing:

Optimization What It Does Who Benefits
Bounds check elimination Drops redundant checks for i + cns < len patterns and values[^1]-style index-from-end access Any tight loop over arrays or Span<T>
Redundant checked context removal Proves and eliminates overflow checks when the value is already in range Numeric-heavy code, parsers, serializers
Switch expression folding Folds multi-target switch expressions into branchless constant checks (e.g., x is 0 or 1 or 2 or 3 or 4) Pattern-matching-heavy code; state machines
Arm SVE2 intrinsics New SIMD intrinsics for Scalable Vector Extension 2 on supported Arm64 hardware Data processing workloads on Arm64 servers

Most teams running on x64 cloud hardware will see the bounds check and switch folding improvements automatically in their next benchmark run. The Arm SVE2 intrinsics are relevant if you are running on newer AWS Graviton or Azure Ampere instances. None of these require a code change - just retarget to net11.0 and recompile.

What Did the SDK Team Actually Ship in .NET 11 for Day-to-Day Developer Workflow?

The SDK changes in .NET 11 are the kind you notice in the first hour after installing. Three of them are genuinely useful in regular development loops.

Smaller installers on Linux and macOS

The SDK installer now deduplicates assemblies using symbolic links, replacing 816 duplicate files (140 MB on Linux x64) with symlinks pointing to a single copy. The archive drops significantly as a result. If you run automated CI installs on Linux, this is an immediate win. Windows deduplication is planned for a future preview.

Pass environment variables to dotnet run

You can now pass environment variables inline with dotnet run instead of exporting them to the shell first:

dotnet run -e ASPNETCORE_ENVIRONMENT=Development -e LOG_LEVEL=Debug

These are available to MSBuild as RuntimeEnvironmentVariable items. For anyone who has been sourcing a .env file just to flip an environment before running locally, this removes that ceremony.

Solution filter management from the CLI

dotnet sln can now create and edit .slnf solution filter files directly, using the same subcommands you already know:

dotnet new slnf --name MyApp.slnf
dotnet sln MyApp.slnf add src/Lib/Lib.csproj
dotnet sln MyApp.slnf list
dotnet sln MyApp.slnf remove src/Lib/Lib.csproj

In large monorepos this is a real quality-of-life improvement. You no longer need to hand-edit JSON or open Visual Studio just to adjust which projects load. The dotnet watch tooling also gains Aspire app-host integration and automatic crash recovery in Preview 3, which makes local Aspire development loops noticeably less brittle.

What Breaking Changes in .NET 11 Actually Require Migration Work?

Most .NET 11 breaking changes are narrow, but two of them can catch you off guard depending on your deployment target and library choices.

Minimum hardware requirements raised

The most broadly impactful change is the updated minimum hardware floor. On x86/x64, .NET 11 now requires the x86-64-v2 instruction set (SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT). On Windows Arm64, LSE is now required. In practice, any CPU still officially supported by Intel, AMD, or the Windows operating system already satisfies this. Chips that fall outside that range went out of support around 2013. If you run .NET on genuinely old hardware or unusual embedded targets, verify before upgrading.

Mono launch target removed for .NET Framework on Linux

The SDK no longer auto-configures RunCommand and RunArguments to use Mono when you run dotnet run on a .NET Framework project targeting Linux. This is a behavioral change with a clear workaround - set those properties explicitly in your project file - but it will silently break any pipeline that relied on the old automatic behavior. Mono ownership has moved on, and the .NET SDK is making that separation official.

ASP.NET Core and library changes to watch

  • Virtualize<TItem>.OverscanCount defaults from 3 to 15. Blazor apps that relied on the old default for layout calculations may see scrolling behavior change.
  • Microsoft.AspNetCore.OpenApi now targets OpenAPI 3.2.0 via Microsoft.OpenApi 3.3.1, which has upstream breaking changes. Review the Microsoft.OpenApi upgrade guide before updating API doc generation code.
  • ASP.NET Core Identity moves all time-based logic to TimeProvider. Custom token providers or test harnesses that hook into DateTime.UtcNow directly will need updating.

What Did .NET 11 Add to System.Text.Json and the Base Class Libraries?

The library additions in .NET 11 are focused rather than sprawling - a few genuinely useful APIs rather than a kitchen-sink expansion.

System.Text.Json gets three worthwhile improvements. First, JsonNamingPolicy.PascalCase is now built in, which is useful when you are generating JSON for systems that expect PascalCase rather than the camelCase default. Second, you can now apply a naming policy at the individual member level rather than only at the type level, which handles the case where one field in a contract has to match an external convention the rest of the type does not use. Third, type-level ignore conditions let you annotate a type to control which members are included or excluded globally.

Compression gains two practical additions. Zstandard (zstd) lands in System.IO.Compression as a first-class codec alongside GZip and Brotli - no more pulling in a third-party NuGet package for zstd support. ZIP entry reading now validates CRC32 on extraction, which catches corrupted archives that previously would silently produce bad data.

Low-level I/O fills a couple of gaps: SafeFileHandle can now report whether a handle refers to a pipe and can create anonymous pipes, and RandomAccess gains read/write support for non-seekable handles. These are plumbing APIs, but the teams building cross-platform process interop or custom I/O layers will know exactly where they fit.

Strings and numerics round things out with Rune-based operations on String (useful for correct Unicode text processing), BFloat16 in BitConverter (relevant for ML inference pipelines that work with 16-bit brain float), and a Matrix4x4 performance improvement that benefits any graphics or physics code running on the BCL types.

Common Questions about .NET 11

Do I need to change my project file to use Runtime Async in .NET 11 Preview 3 and later?
No, if your project targets net11.0, Runtime Async is available without setting EnablePreviewFeatures. You only need the extra project property flags when targeting an earlier framework moniker or working with Preview 1 or Preview 2 builds.

Will my app fail to start on existing server hardware after upgrading to .NET 11?
Only if you are running on CPUs that predate SSE4.2 or POPCNT support, which means chips that went out of official Intel and AMD support around 2013. Any hardware running Windows 10 or later, or any current cloud VM (x64 or Arm64), already meets the new baseline. If .NET 11 cannot start on a machine, it prints a message listing the missing instruction sets so you know exactly what is missing.

How do I pass environment variables to my app with dotnet run in .NET 11?
Use the new -e flag once per variable: dotnet run -e ASPNETCORE_ENVIRONMENT=Development -e MY_KEY=value. These are passed directly to the process and also exposed to MSBuild as RuntimeEnvironmentVariable items, so you do not need to export them to your shell session or source a separate env file beforehand.

Does the Blazor Virtualize component change break existing scroll behavior in .NET 11?
Potentially yes. The OverscanCount default changed from 3 to 15, and the component now measures actual item heights instead of assuming they are uniform. If your virtualized list relies on items all being the same height, the new behavior is more accurate but may produce different scroll positions than before. Test any virtualized list after upgrading.

Is .NET 11 a Long-Term Support release?
No, .NET 11 is a Standard Term Support release, meaning it receives 18 months of support from the general availability date rather than the 3 years offered by LTS releases such as .NET 10. Teams that need longer support windows should stay on .NET 10 LTS and plan to adopt .NET 12 LTS when it arrives.

What does the OpenAPI 3.2.0 change in ASP.NET Core 11 require from me?
If you call AddOpenApi in your app, review the Microsoft.OpenApi 3.3.1 upgrade guide before updating, because the upstream library introduced breaking changes when moving from 2.x to 3.x. To generate an OpenAPI 3.2.0 document you must explicitly set the version: builder.Services.AddOpenApi(options => { options.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_2; }). Apps that do not call AddOpenApi are unaffected.

Reference

Source: What's new in .NET 11 - Microsoft Learn

Releases In Branch 11.0

VersionRelease dateRuntimeSDKSecurity
11.0.0-preview.509 Jun 2026
(1 day ago)
11.0.0-preview.5.26302.11511.0.100-preview.5.26302.115
11.0.0-preview.412 May 2026
(29 days ago)
11.0.0-preview.4.26230.11511.0.100-preview.4.26230.115
11.0.0-preview.314 Apr 2026
(1 month ago)
11.0.0-preview.3.26207.10611.0.100-preview.3.26207.106
11.0.0-preview.210 Mar 2026
(3 months ago)
11.0.0-preview.2.26159.11211.0.100-preview.2.26159.112
11.0.0-preview.110 Feb 2026
(4 months ago)
11.0.0-preview.1.26104.11811.0.100-preview.1.26104.118