{"id":51907,"date":"2024-05-21T08:50:00","date_gmt":"2024-05-21T15:50:00","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/dotnet\/?p=51907"},"modified":"2025-11-17T16:40:37","modified_gmt":"2025-11-18T00:40:37","slug":"dotnet-aspire-general-availability","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/dotnet-aspire-general-availability\/","title":{"rendered":"General Availability of Aspire: Simplifying .NET Cloud-Native Development"},"content":{"rendered":"<blockquote>\n<p>Aspire has gone polyglot! Explore the new <a href=\"https:\/\/aspire.dev\">Aspire.dev<\/a> and <a href=\"https:\/\/devblogs.microsoft.com\/aspire\/\">learn<\/a> about the new unified, open-source platform for building, observing, and deploying distributed apps in any language.<\/p>\n<\/blockquote>\n<p>Aspire is a new stack that streamlines development of .NET cloud-native services and is now generally available. You can <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/fundamentals\/setup-tooling\">get started with Aspire<\/a> today in Visual Studio 2022 17.10, the .NET CLI, or Visual Studio Code. Aspire brings together tools, templates, and NuGet packages that help you build distributed applications in .NET more easily. Whether you&#8217;re building a new application, adding cloud-native capabilities to an existing one, or are already deploying .NET apps to production in the cloud today, Aspire can help you get there faster.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/11\/aspire-ga-what-is-aspire.webp\" alt=\"Aspire overview\" \/><\/p>\n<h2>How to get Aspire<\/h2>\n<p>You can get started quickly with Aspire:<\/p>\n<ul>\n<li>\n<p><strong>.NET CLI<\/strong>:<\/p>\n<p>Install the Aspire workload by running <code>dotnet workload update<\/code> followed by <code>dotnet workload install aspire<\/code>. See <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/fundamentals\/setup-tooling?tabs=dotnet-cli%2Cwindows#install-net-aspire\">the documentation<\/a> for more details.<\/p>\n<\/li>\n<li>\n<p><strong>Visual Studio 2022<\/strong>:<\/p>\n<p>Aspire is included in the <strong>ASP.NET and web development<\/strong> workload of <a href=\"https:\/\/visualstudio.microsoft.com\/vs\/\">Visual Studio 2022 17.10<\/a> as a recommended component. If you update from Visual Studio 2022 17.9 to 17.10 and you have the <strong>ASP.NET and web development<\/strong> workload enabled, you&#8217;ll have everything you need to get started with Aspire.<\/p>\n<\/li>\n<li>\n<p><strong>Visual Studio Code C# Dev Kit<\/strong>:<\/p>\n<p>You&#8217;ll need to install the Aspire workload via the .NET CLI via the details above. After that, the Visual Studio Code C# Dev Kit extension includes support for working with Aspire in the latest stable release. Install the <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-dotnettools.csdevkit\">C# Dev Kit extension from the Visual Studio Code marketplace<\/a>.<\/p>\n<\/li>\n<\/ul>\n<h2>Why Aspire?<\/h2>\n<p>It&#8217;s been an ongoing aspirational goal to make .NET one of the most productive platforms for building cloud-native applications. In pursuit of this goal, we&#8217;ve worked alongside some of the most demanding services at Microsoft, with scaling needs unheard of for most apps, services supporting hundreds of millions of monthly active users. Working with these services to make sure we satisfied their needs ensured we had foundational capabilities that could meet the demands of high scale cloud services.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/11\/aspire-ga-cloud-native.webp\" alt=\"Cloud native apps are observable, scalable, and resilient\" \/><\/p>\n<p>We invested in important technologies and libraries such as Health Checks, YARP, HTTP client factory, and gRPC. With Native AOT, we\u2019re working towards a sweet spot of performance and size, and SDK Container Builds make it trivial to get any .NET app into a container and ready for the modern cloud.<\/p>\n<p>But what we heard from developers is that we needed to do more. Building apps for the cloud was still too hard. Developers are increasingly pulled away from their business logic and what matters most to deal with the complexity of the cloud.<\/p>\n<p>To help simplify the cloud app development experience, we&#8217;re introducing <a href=\"https:\/\/dot.net\/aspire\">Aspire<\/a>, a cloud-ready stack for building observable, production ready, distributed applications.<\/p>\n<p>Even if you have just a single ASP.NET Core application that communicates with a database or caching system, Aspire can improve your development experience.<\/p>\n<h2>Orchestrate the local development experience with C# and the Aspire App Host project<\/h2>\n<p>Distributed applications typically consist of many application projects, talking to each other and to some combination of hosted services such as databases, storage, caches, and messaging systems. Configuration and lifetime of these projects and services can be challenging to manage within the developer inner-loop and often involves using a different set of tools and languages.<\/p>\n<p>Aspire introduces an <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/fundamentals\/app-host-overview\"><em>App Host<\/em> project<\/a>, enabling you to use C# and familiar looking APIs to describe and configure the various application projects and hosted services that make up a distributed application. Collectively, these projects and services are called <em>resources<\/em> and the code in the App Host forms an <em>application model<\/em> of the distributed application. Launching the App Host project during the developer inner-loop will ensure all resources in the application model are configured and launched according to how they were described. Adding an App Host project is the first step in <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/get-started\/add-aspire-existing-app\">adding Aspire to an existing application<\/a>.<\/p>\n<p>Let&#8217;s look at a sample <em>Program.cs<\/em> from an Aspire App Host project:<\/p>\n<pre><code class=\"language-csharp\">var builder = DistributedApplication.CreateBuilder(args);\n\nvar dbserver = builder.AddPostgres(\"dbserver\")\n                      .WithPgAdmin();\n\nvar catalogDb = dbserver.AddDatabase(\"catalogdb\");\n\nvar cache = builder.AddRedis(\"cache\")\n                   .WithRedisCommander();\n\nvar catalogApi = builder.AddProject&lt;Projects.AspireShop_CatalogApi&gt;(\"catalogapi\")\n                        .WithReference(catalogDb);\n\nbuilder.AddProject&lt;Projects.AspireShop_WebFrontend&gt;(\"webfrontend\")\n       .WithExternalHttpEndpoints()\n       .WithReference(cache)\n       .WithReference(catalogApi);\n\nbuilder.Build().Run();<\/code><\/pre>\n<p>This example file:<\/p>\n<ul>\n<li>Adds a <a href=\"https:\/\/www.postgresql.org\/\">PostgreSQL<\/a> server resource with a child database resource<\/li>\n<li>Enables the <a href=\"https:\/\/www.pgadmin.org\/\">pgAdmin<\/a> administrator tool for the PostgreSQL server<\/li>\n<li>Adds a <a href=\"https:\/\/redis.io\/\">Redis<\/a> server resource<\/li>\n<li>Enables the <a href=\"https:\/\/joeferner.github.io\/redis-commander\/\">Redis Commander<\/a> administrator tool for the Redis server<\/li>\n<li>Adds two projects to the application model: a web API project and a Blazor web frontend project<\/li>\n<li>Declares that the API project <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/fundamentals\/app-host-overview#reference-resources\">references<\/a> the PostgreSQL database resource<\/li>\n<li>Declares that the web frontend project references the web API project and the Redis cache<\/li>\n<li>Declares that the web frontend project should be externally accessible (i.e. from the internet)<\/li>\n<\/ul>\n<p>Launching this App Host project will automatically start containers to host the PostgreSQL and Redis servers, and inject the necessary configuration values into the web API and web frontend applications so that they can communicate, including <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/fundamentals\/app-host-overview#connection-string-and-endpoint-references\">connection strings and URLs<\/a>. If launching in an environment that supports debugging (e.g. Visual Studio), the debugger will be attached to each project that was described in the application model.<\/p>\n<p>The App Host project has two execution modes: <strong>run<\/strong> and <strong>publish<\/strong>. Run is used during the developer inner-loop to facilitate the launch experience described above. In publish mode, a <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/deployment\/overview#deployment-manifest\">manifest file<\/a> is produced, that statically describes the application model and is intended to be used to optionally enhance deployment scenarios with the information from the application model. The App Host project itself is not deployed and does not run outside of dev\/test scenarios.<\/p>\n<p>Along with the <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/fundamentals\/app-host-overview#built-in-resource-types\">base resource types<\/a> of containers, executables, and .NET projects, Aspire ships with hosting extensions for <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/get-started\/build-aspire-apps-with-nodejs\">integrating Node.js based applications including those using common SPA frameworks<\/a>, and many common container and cloud based services <a href=\"https:\/\/www.nuget.org\/packages?q=owner%3Aaspire+tag%3Ahosting&amp;includeComputedFrameworks=true&amp;prerel=true&amp;sortby=relevance\">in NuGet packages<\/a>, including Redis, PostgreSQL, MySQL, SQL Server, Oracle, MongoDB, RabbitMQ, NATS, <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/fundamentals\/app-host-overview#apis-for-adding-and-expressing-resources\">and more<\/a>, along with support for cloud services in <a href=\"https:\/\/www.nuget.org\/packages?q=owner%3Aaspire+tag%3Ahosting+azure&amp;includeComputedFrameworks=true&amp;prerel=true&amp;sortby=relevance\">Azure<\/a> and <a href=\"https:\/\/www.nuget.org\/packages?q=owner%3Aaspire+tag%3Ahosting+aws&amp;includeComputedFrameworks=true&amp;prerel=true&amp;sortby=relevance\">AWS<\/a>.<\/p>\n<p>Extending Aspire with your own hosting extensions for existing containers can be done easily with C#, like <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/extensibility\/custom-resources?tabs=windows\">this example for MailDev in the Aspire extensibility documentation<\/a>, or <a href=\"https:\/\/github.com\/dotnet-presentations\/eshop-app-workshop\/blob\/dbd252194662d46ec8ba0fc03e4dc2d3d7c036a0\/src\/eShop.AppHost\/KeycloakResource.cs\">this example for KeyCloak in the eShop App Building workshop<\/a>.<\/p>\n<p>Once launched, rich details about all the orchestrated resources in the application model are visible on the web-based Aspire Dashboard.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/11\/aspire-dashboard-resources.webp\" alt=\"The Aspire dashboard showing details of the running resources in a table\" \/><\/p>\n<h2>The Aspire Dashboard: the easiest way to see your application&#8217;s OpenTelemetry data<\/h2>\n<p>Aspire includes a web-based dashboard that displays useful details about your running application during the developer inner-loop, including the resources in the application model and their endpoints, environment variables, and console logs. It also displays <a href=\"https:\/\/opentelemetry.io\/\">OpenTelemetry<\/a> data sent by resources, including the structured logs, distributed traces, and metrics information this data contains. Note that this data is only kept in-memory and is size-limited, as the dashboard is only intended to give a close to real-time view of what&#8217;s happening right now, and not to replace a fully featured APM system.<\/p>\n<p>OpenTelemetry is an open-source observability ecosystem with <a href=\"https:\/\/opentelemetry.io\/ecosystem\/vendors\/\">wide support from multiple vendors<\/a>. It is a collection of APIs, SDKs, and tools that allow you to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) to help you analyze your software&#8217;s performance and behavior. The Aspire Dashboard is one of the easiest ways to observe OpenTelemetry data from any application and even supports <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/fundamentals\/dashboard\/overview#standalone-mode\">running in a standalone mode<\/a> separate from the rest of Aspire.<\/p>\n<p>Additionally, Azure Container Apps can make the Aspire Dashboard available in environments hosting Aspire applications deployed with the Azure Developer CLI. See <a href=\"https:\/\/aka.ms\/aca\/aspireblog\">their post<\/a> for more details.<\/p>\n<p><div style=\"width: 1224px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-51907-1\" width=\"1224\" height=\"866\" poster=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2024\/05\/aspire-dashboard-video-thumb.png\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2024\/05\/aspire-dashboard.mp4?_=1\" \/><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2024\/05\/aspire-dashboard.mp4\">https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2024\/05\/aspire-dashboard.mp4<\/a><\/video><\/div><\/p>\n<h2>Make database, messaging, cache, &amp; cloud service connections resilient &amp; observable using Aspire Components<\/h2>\n<p>Applications connecting to external services need to be resilient to transient failures in order to be more reliable. In addition, making the application status observable such that it can be monitored for issues and reacted to by infrastructure is critical to building scalable services in the cloud. Often though, adding these capabilities involves manually discovering, installing, and configuring numerous NuGet packages in addition to the package containing the actual client library, along with adding boilerplate code to make these aspects configurable for different environments without needing to change values in the application code.<\/p>\n<p><a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/fundamentals\/components-overview\">Aspire Components<\/a> are NuGet packages that integrate common client libraries for database, messaging, caching, and cloud services into your applications with critical features for resiliency and observability enabled by default, and wired up to support configuration without code changes. Components pull in the extra dependencies required to configure client libraries with the application&#8217;s dependency injection and configuration systems, along with registering <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/fundamentals\/health-checks\">health checks<\/a> and OpenTelemetry providers for capturing <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/fundamentals\/telemetry\">logs, traces, and metrics<\/a>. Where available, they also default-enable the client libraries&#8217; resiliency features, like retries.<\/p>\n<p>Aspire is <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/fundamentals\/components-overview#available-components\">launching with components<\/a> for connecting to many database, messaging, cache, and cloud services using the client libraries you likely already use today:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/11\/vs-nuget-aspire-components.webp\" alt=\"Screenshot of the Visual Studio NuGet Package Manager UI showing Aspire components\" \/><\/p>\n<h2>Connect to the cloud with Aspire<\/h2>\n<p>Aspire makes it easy to provision resources or connect to existing resources running in the cloud during development. This unique ability makes it simple to express in C# which resources you need to be provisioned to support running your application in the development inner-loop and have Aspire coordinate the provisioning of those resources when you launch the App Host project.<\/p>\n<p>See <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/deployment\/azure\/local-provisioning\">Local Azure provisioning<\/a> for more details about using Aspire to coordinate provisioning of Azure resources for local development.<\/p>\n<p>Aspire also enables new capabilities when it comes to deploying your applications to the cloud or your own Kubernetes instance, utilizing the application model details provided by the App Host project. While Aspire <strong>does not require you to change anything about how you currently deploy<\/strong>, as the individual projects in your Aspire solution are still regular ASP.NET Core and projects, the App Host project facilitates new deployment experiences when using deployment toolchains that have been updated to utilize it.<\/p>\n<p>For example, the <a href=\"https:\/\/learn.microsoft.com\/azure\/developer\/azure-developer-cli\/\">Azure Developer CLI (azd)<\/a> has native support for directly deploying the resources described in an Aspire App Host project to <a href=\"https:\/\/learn.microsoft.com\/azure\/container-apps\/\">Azure Container Apps<\/a>, and Visual Studio includes support for coordinating a publish to Azure using azd directly from Solution Explorer. Consult <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/deployment\/overview#deploy-to-azure\">the documentation for more details<\/a>.<\/p>\n<p><a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/deployment\/overview#deploy-to-kubernetes\">Deploying to Kubernetes<\/a> can be done using the <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/deployment\/overview#the-aspir8-project\">community-built tool Aspir8<\/a>, which provides a simple command-line based experience for deploying the resources described by an Aspire App Host.<\/p>\n<h2>Learn more<\/h2>\n<h3>Documentation &amp; Samples<\/h3>\n<p>Be sure to check out the <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/\">Aspire documentation home on Microsoft Learn<\/a>, including the <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/get-started\/build-your-first-aspire-app\">Quickstart detailing how to build your first Aspire application<\/a>.<\/p>\n<p>For code-based samples, check out the <a href=\"https:\/\/learn.microsoft.com\/samples\/browse\/?expanded=dotnet&amp;terms=aspire\">samples browser for Aspire<\/a> which details the samples available in the <a href=\"https:\/\/github.com\/dotnet\/aspire-samples\">Aspire samples GitHub repo<\/a>.<\/p>\n<h3>Sessions at MS Build<\/h3>\n<p>For those attending Microsoft Build this year, either physically or virtually, there are <a href=\"https:\/\/build.microsoft.com\/sessions?search=aspire&amp;sortBy=relevance\">a number of sessions that will help you learn more about Aspire<\/a>. If you&#8217;re attending in person, be sure to check out the <a href=\"https:\/\/build.microsoft.com\/sessions\/21c8c399-0ec0-427e-a4b0-90b0fcddac84?source=sessions\">hands-on lab<\/a> where you can get first-hand experience with Aspire with in-person support.<\/p>\n<h3>Video shorts<\/h3>\n<p>Today, we&#8217;re launching a series of short videos hosted by members of the Aspire team, introducing key aspects of Aspire, including the App Host project, dashboard, service defaults, service discovery, OpenTelemetry, and more. Check them out at <a href=\"https:\/\/aka.ms\/aspire\/videos\">https:\/\/aka.ms\/aspire\/videos<\/a>.<\/p>\n<p><iframe width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/videoseries?si=_ZWgdpsmTeFlRaFe&amp;list=PLdo4fOcmZ0oUfIayQMrRqaSL55Rkck-GD\" allowfullscreen><\/iframe><\/p>\n<h3>Learn Path<\/h3>\n<p>If you&#8217;re looking for a guided approach to learning about Aspire, check out the <a href=\"https:\/\/aka.ms\/aspire\/learn\">Aspire Learn Path<\/a>, with the introductory modules launching today.<\/p>\n<h2>Summary &amp; giving feedback<\/h2>\n<p>We&#8217;re incredibly grateful for all the great feedback and contributions we&#8217;ve already received from customers using previews of Aspire since we first announced it last November, including <a href=\"https:\/\/github.com\/dotnet\/aspire\/pulls?q=is%3Apr+label%3Acommunity-contribution+-author%3Aapp%2Fdependabot+is%3Aclosed\">over 100 pull-requests<\/a> from users in the community! We invite you to <a href=\"https:\/\/github.com\/dotnet\/aspire\/issues\">share feedback<\/a>, <a href=\"https:\/\/github.com\/dotnet\/aspire\/discussions\">have discussions<\/a>, and welcome <a href=\"https:\/\/github.com\/dotnet\/aspire\/pulls\">code contributions<\/a> over on the <a href=\"https:\/\/github.com\/dotnet\/aspire\">Aspire GitHub repo<\/a>. For those on Discord, there&#8217;s already an <a href=\"https:\/\/discord.com\/channels\/732297728826277939\/759125320505884752\">active community of Aspire users over on the DotNetEvolution Discord server<\/a>.<\/p>\n<p>We&#8217;ve really enjoyed working on Aspire and look forward to hearing about your experience using it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aspire, the stack that streamlines development of .NET cloud-native services, is now generally available.<\/p>\n","protected":false},"author":693,"featured_media":58929,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[685,7783,327,7689,7237,2904],"tags":[7768,37,7693,7761,7776,7741,7764,7762,7765],"class_list":["post-51907","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-aspire","category-azure","category-cloud-native","category-containers","category-docker","tag-aspire","tag-azure","tag-cloud-native","tag-distribute","tag-observable","tag-opentelemetry","tag-otel","tag-scalable","tag-stack"],"acf":[],"blog_post_summary":"<p>Aspire, the stack that streamlines development of .NET cloud-native services, is now generally available.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/51907","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/693"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=51907"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/51907\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/58929"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=51907"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=51907"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=51907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}