.NET Caniuse

Contribute
VersionFeatureDescriptionTags
.NET 9.NET MAUI Blazor Hybrid and Web App solution templateA new solution template makes it easier to create .NET MAUI native and Blazor web client apps that share the same UI. This template shows how to create client apps that maximize code reuse and target Android, iOS, Mac, Windows, and Web.
.NET 9Add static server-side rendering (SSR) pages to a globally-interactive Blazor Web AppIt's now simpler to add static SSR pages to apps that adopt global interactivity.
.NET 9Added InternalServerError and InternalServerError<TValue> to TypedResultsTypedResults now includes factory methods and types for returning "500 Internal Server Error" responses from endpoints.
.NET 9Added OverscanCount parameter to QuickGridThe QuickGrid component now exposes an OverscanCount property that specifies how many additional rows are rendered before and after the visible region when virtualization is enabled.
.NET 9ASP0026: Analyzer to warn when [Authorize] is overridden by [AllowAnonymous] from "farther away"Introduced an analyzer that will highlight instances like these where a closer [Authorize] attribute gets overridden by an [AllowAnonymous] attribute that is farther away from an MVC action.
.NET 9Call ProducesProblem and ProducesValidationProblem on route groupsThe ProducesProblem and ProducesValidationProblem extension methods have been updated to support their use on route groups.
.NET 9Configure HTTP.sys extended authentication flagsYou can now configure the HTTP_AUTH_EX_FLAG_ENABLE_KERBEROS_CREDENTIAL_CACHING and HTTP_AUTH_EX_FLAG_CAPTURE_CREDENTIAL HTTP.sys flags by using the new EnableKerberosCredentialCaching and CaptureCredentials properties on the HTTP.sys AuthenticationManager to optimize how Windows authentication is handled.
.NET 9Constructor injectionRazor components support constructor injection.
.NET 9Customize Kestrel named pipe endpointsKestrel's named pipe support has been improved with advanced customization options. The new CreateNamedPipeServerStream method on the named pipe options allows pipes to be customized per-endpoint.
.NET 9Data Protection support for deleting keysPrior to .NET 9, data protection keys were not deletable by design, to prevent data loss. Deleting a key renders its protected data irretrievable. Given their small size, the accumulation of these keys generally posed minimal impact. However, to accommodate extremely long-running services, we have introduced the option to delete keys.
.NET 9Detect rendering location, interactivity, and assigned render mode at runtimeA new API designed to simplify the process of querying component states at runtime.
.NET 9Developer exception page improvementsThe ASP.NET Core developer exception page is displayed when an app throws an unhandled exception during development. The developer exception page provides detailed information about the exception and request.
.NET 9Dictionary debugging improvementsThe debugging display of dictionaries and other key-value collections has an improved layout.
.NET 9ExceptionHandlerMiddleware option to choose the status code based on the exception typeA new option when configuring the ExceptionHandlerMiddleware enables app developers to choose what status code to return when an exception occurs during request handling. The new option changes the status code being set in the ProblemDetails response from the ExceptionHandlerMiddleware.
.NET 9Fix for 503's during app recycle in IISBy default there is now a 1 second delay between when IIS is notified of a recycle or shutdown and when ANCM tells the managed server to start shutting down. The delay is configurable via the ANCM_shutdownDelay environment variable or by setting the shutdownDelay handler setting.
.NET 9Handle keyboard composition events in Blazor.The new KeyboardEventArgs.IsComposing property indicates if the keyboard event is part of a composition session. Tracking the composition state of keyboard events is crucial for handling international character input methods.
.NET 9Improved Activities for SignalRSignalR now has an ActivitySource for both the hub server and client.
.NET 9InputNumber component supports the type="range" attributeThe InputNumber<TValue> component now supports the type="range" attribute, which creates a range input that supports model binding and form validation, typically rendered as a slider or dial control rather than a text box.
.NET 9Microsoft.AspNetCore.OpenApi supports trimming and Native AOTOpenAPI in ASP.NET Core supports trimming and native AOT. The following steps create and publish an OpenAPI app with trimming and native AOT.
.NET 9Middleware supports Keyed DIMiddleware now supports Keyed DI in both the constructor and the Invoke/InvokeAsync method.
.NET 9New enhanced navigation eventsTrigger JavaScript callbacks either before or after enhanced navigation with new event listeners.
.NET 9New HybridCache libraryThe HybridCache API bridges some gaps in the existing IDistributedCache and IMemoryCache APIs.
.NET 9OIDC and OAuth Parameter CustomizationThe OAuth and OIDC authentication handlers now have an AdditionalAuthorizationParameters option to make it easier to customize authorization message parameters that are usually included as part of the redirect query string.
.NET 9OpenAPI document generationBuilt-in support for generating OpenAPI documents from ASP.NET Core web APIs.
.NET 9Opt-out of HTTP metrics on certain endpoints and requests.NET 9 introduces the ability to opt-out of HTTP metrics for specific endpoints and requests.
.NET 9Polymorphic type support in SignalR HubsHub methods can now accept a base class instead of the derived class to enable polymorphic scenarios. The base type needs to be annotated to allow polymorphism.
.NET 9Problem and ValidationProblem result types support construction with IEnumerable<KeyValuePair<string, object?>> valuesPrior to .NET 9, constructing Problem and ValidationProblem result types in minimal APIs required that the errors and extensions properties be initialized with an implementation of IDictionary<string, object?>. In this release, these construction APIs support overloads that consume IEnumerable<KeyValuePair<string, object?>>.
.NET 9Pushed Authorization Requests (PAR)OpenIdConnectHandler adds support for Pushed Authorization Requests (PAR).
.NET 9SignalR supports trimming and Native AOTEnables trimming and native ahead-of-time (AOT) compilation support for both SignalR client and server scenarios. You can now take advantage of the performance benefits of using Native AOT in applications that use SignalR for real-time web communications.
.NET 9Simplified authentication state serialization for Blazor Web AppsNew APIs make it easier to add authentication to an existing Blazor Web App. When you create a new Blazor Web App with authentication using Individual Accounts and you enable WebAssembly-based interactivity, the project includes a custom AuthenticationStateProvider in both the server and client projects.
.NET 9Static asset delivery optimizationMapStaticAssets routing endpoint conventions is a new feature that optimizes the delivery of static assets in ASP.NET Core apps.
.NET 9Trust the ASP.NET Core HTTPS development certificate on LinuxOn Ubuntu and Fedora based Linux distros, dotnet dev-certs https --trust now configures ASP.NET Core HTTPS development certificate as a trusted certificate.
.NET 9Websocket compression for Interactive Server componentsBy default, Interactive Server components enable compression for WebSocket connections and set a frame-ancestors Content Security Policy (CSP) directive set to 'self', which only permits embedding the app in an <iframe> of the origin from which the app is served when compression is enabled or when a configuration for the WebSocket context is provided.
.NET 9Browser telemetry supportThe dashboard supports OpenTelemetry Protocol (OTLP) over HTTP and cross-origin resource sharing (CORS). These features unlock the ability to send OpenTelemetry from browser apps to the .NET Aspire dashboard.
.NET 9allows ref structore C# 13, ref struct types couldn't be declared as the type argument for a generic type or method. Now, generic type declarations can add an anti-constraint, allows ref struct.
.NET 9Implicit index accessThe implicit "from the end" index operator, ^, is now allowed in an object initializer expression. For example, you can now initialize an array in an object initializer.
.NET 9Method group natural typeThis feature makes small optimizations to overload resolution involving method groups. A method group is a method and all overloads with the same name.
.NET 9More partial membersYou can declare partial properties and partial indexers in C# 13.
.NET 9New escape sequenceYou can use \e as a character literal escape sequence for the ESCAPE character, Unicode U+001B.
.NET 9New lock objectThe .NET 9 runtime includes a new type for thread synchronization, the System.Threading.Lock type. This type provides better thread synchronization through its API.
.NET 9Overload resolution priorityIn C# 13, the compiler recognizes the OverloadResolutionPriorityAttribute to prefer one overload over another. Library authors can use this attribute to ensure that a new, better overload is preferred over an existing overload.
.NET 9params collectionsThe params modifier isn't limited to array types. You can now use params with any recognized collection type.
.NET 9ref and unsafe in iterators and async methodsThis feature and the following two features enable ref struct types to use new constructs. You won't use these unless you write your own ref struct types. More likely, you'll see an indirect benefit as System.Span<T> and System.ReadOnlySpan<T> gain more functionality.
.NET 9ref struct interfacesYou can declare that a ref struct type implements an interface
.NET 9The field keywordThe field contextual keyword is in C# 13 as a preview feature. The token field accesses the compiler synthesized backing field in a property accessor. It enables you to write an accessor body without declaring an explicit backing field in your type declaration. You can declare a body for one or both accessors for a field backed property.
.NET 9AOT and pre-compiled queriesEF 9.0 brings initial, experimental support for .NET NativeAOT, allowing the publishing of ahead-of-time compiled applications which make use of EF to access databases.
.NET 9Auto-compiled modelsCompiled models can improve startup time for applications with large models--that is entity type counts in the 100s or 1000s.
.NET 9Auto-compiled modelsCompiled models can improve startup time for applications with large models--that is entity type counts in the 100s or 1000s.
.NET 9Azure Cosmos DB for NoSQLEF 9.0 brings substantial improvements to the EF Core provider for Azure Cosmos DB; significant parts of the provider have been rewritten to provide new functionality, allow new forms of queries, and better align the provider with Azure Cosmos DB best practices.
.NET 9Make existing model building conventions more extensiblePublic model building conventions for applications were introduced in EF7. In EF9, we have made it easier to extend some of the existing conventions.
.NET 9Read-only primitive collectionsEF.8 introduced support for mapping arrays and mutable lists of primitive types. This has been expanded in EF9 to include read-only collections/lists. Specifically, EF9 supports collections typed as IReadOnlyList, IReadOnlyCollection, or ReadOnlyCollection
.NET 9Specify fill-factor for keys and indexesEF9 supports specification of the SQL Server fill-factor when using EF Core Migrations to create keys and indexes.
.NET 9SQL optimizationsLike with every release, EF9 includes a large number of improvements to the LINQ querying capabilities. New queries can be translated, and many SQL translations for supported scenarios have been improved, for both better performance and readability.
.NET 9Sugar for HierarchyId path generationFirst class support for the SQL Server HierarchyId type was added in EF8. In EF9, a sugar method has been added to make it easier to create new child nodes in the tree structure.
.NET 9Update ApplyConfigurationsFromAssembly to call non-public constructorsIn previous versions of EF Core, the ApplyConfigurationsFromAssembly method only instantiated configuration types with a public, parameterless constructors. In EF9, we have both improved the error messages generated when this fails, and also enabled instantiation by non-public constructor.
.NET 9AggregateByApplies an accumulator function over a sequence, grouping results by key.
.NET 9Base64Url.NET 9 includes the new Base64Url class, which provides many helpful and optimized methods for encoding and decoding with Base64Url to and from a variety of data types.
.NET 9BinaryFormatter.NET 9 removes BinaryFormatter from the .NET runtime. The APIs are still present, but their implementations always throw an exception, regardless of project type.
.NET 9Collection lookups with spansWith the new allows ref struct feature in C# 13 and new features on these collection types in .NET 9, it's now possible to perform these kinds of lookups.
.NET 9CountByReturns the count of elements in the source sequence grouped by key.
.NET 9Date and time - new TimeSpan.From* overloadsNET 9 adds new overloads that let you create TimeSpan objects from integers. There are new overloads from FromDays, FromHours, FromMinutes, FromSeconds, FromMilliseconds, and FromMicroseconds.
.NET 9IndexReturns an enumerable that incorporates the element's index into a tuple.
.NET 9Logging source generatorC# 12 introduced primary constructors, which allow you to define a constructor directly on the class declaration. The logging source generator now supports logging using classes that have a primary constructor.
.NET 9Nullable reference type annotationsSystem.Text.Json adds support for nullable reference type annotations and exporting JSON schemas from types.
.NET 9OrderedDictionary<TKey, TValue>.NET 9 introduces the long-requested OrderedDictionary<TKey,TValue> collection, which provides an efficient, generic type to support these scenarios.
.NET 9PriorityQueue.Remove() methodThe new PriorityQueue<TElement,TPriority>.Remove(TElement, TElement, TPriority, IEqualityComparer<TElement>) method makes it possible to emulate priority updates.
.NET 9ReadOnlySet<T>.NET 9 introduces ReadOnlySet<T>.
.NET 8Collection expressionsCollection expressions introduce a new terse syntax to create common collection values. Inlining other collections into these values is possible using a spread element ..e.
.NET 8Primary constructorsYou can now create primary constructors in any class and struct. Primary constructors are no longer restricted to record types.