September 25th, 2025
heartcelebratelike3 reactions

Announcing Aspire 9.5

Jeffrey Fritz
Principal Program Manager

Aspire 9.5 is here with exciting new features and improvements that enhance the developer experience for building distributed applications.

For the complete list of changes and technical details, visit the official Aspire 9.5 release notes.

Let’s dive into some key highlights of this release.

Upgrading to Aspire 9.5

You can install the Aspire CLI at the command-line with these commands:

# Bash
curl -sSL https://aspire.dev/install.sh | bash

# PowerShell
iex "& { $(irm https://aspire.dev/install.ps1) }"

One of the most exciting additions in Aspire 9.5 is the new aspire update command (in preview), which simplifies the upgrade process significantly. This automatically detects and updates your AppHost SDK and Aspire integrations.

This preview command:

  • Updates your SDK and AppHost packages automatically
  • Validates package compatibility before applying changes
  • Supports channel awareness – choose stable, daily, or custom builds
  • Asks for confirmation before making changes

Update an app with the aspire update command

Preview Feature

The aspire update command is in preview and may change before general availability. We recommend using version control and inspecting changes after running it. Share your feedback about this feature on GitHub!

Updating from Aspire 8

If you’re still using the .NET Aspire workload (versions 8.x), follow the upgrade guide to Aspire 9 to upgrade to 9.5.

Enhanced CLI Experience

Aspire 9.5 brings significant improvements to the command-line experience, making it more powerful and user-friendly for developers.

Single-File AppHost (Preview)

One of the most revolutionary features in Aspire 9.5 is the file-based AppHost support – a preview feature that introduces support for .NET 10’s new file-based apps. This means you can now create an Aspire AppHost with just one file and no project file needed! New and existing applications built with an AppHost project will continue to be supported.

What is File-Based AppHost?

The traditional Aspire AppHost requires a .csproj file and multiple files to get started. With file-based AppHost, you can define your entire distributed application in a single apphost.cs file. This builds on the work we’re delivering with .NET 10 that enables single-file applications.

This feature is currently behind a feature flag and requires .NET SDK 10.0.100 RC1 or later:

# Enable file-based AppHost support
aspire config set features.singlefileAppHostEnabled true

You can then use the aspire new command to create a new, blank file-based apphost with this content:

#:sdk Aspire.AppHost.Sdk@9.5.0

var builder = DistributedApplication.CreateBuilder(args);

builder.Build().Run();

Additionally, an apphost.run.json file will be written with launch profiles for your favorite code-editor to use.

Adding Resources and Projects to Your File-Based AppHost

Start adding integrations with aspire add and add your other projects with single line directives in your apphost.cs file.

#:sdk Aspire.AppHost.Sdk@9.5.0
#:project MyBlazorApp

var builder = DistributedApplication.CreateBuilder(args);

// Add an ASP.NET Core project
builder.AddProject<Projects.MyBlazorApp>("web");

builder.Build().Run();

We can then add Redis to our growing web application by executing the command:

aspire add Aspire.Hosting.Redis

Then adding the appropriate AddRedis statement and WithReference methods in the AppHost.cs file:

#:sdk Aspire.AppHost.Sdk@9.5.0
#:package Aspire.Hosting.Redis@9.4.2
#:project MyBlazorApp

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedis("cache");

builder.AddProject<Projects.MyBlazorApp>("web")
    .WithReference(cache)
    .WaitForStart(cache);

builder.Build().Run();

This approach reduces the complexity of the Aspire configuration, especially for folks outside of the .NET ecosystem, without comprimising the full power of .NET. New users to Aspire can get started in seconds and can augment their existing applications with 1 command and 1 file. Learn more about file-based applications in our announcement blog post.

Dashboard Enhancements

The Aspire Dashboard has a handful of usability and functionality improvements in version 9.5, making it even more powerful for monitoring and debugging distributed applications.

Multi-Resource Console Logs

A long-awaited addition is the new “All” option in console logs that streams logs from every running resource simultaneously with color-coded prefixes so that you can see the various services that generated the log entries.

All console logs in one screen

This unified view makes it much easier to understand the interactions between different services in your application.

New LLM Insights

Aspire 9.5 introduces the GenAI visualizer, which collates, summarizes, and visualizes LLM-centric calls within your app. When the dashboard detects AI telemetry, a sparkle icon (✨) is presented that will allow you to explore the interaction with the LLM. You’ll be able to see the prompts, responses, and even images returned from the LLM in the visualizer.

The GenAI telemetry conventions are evolving rapidly and we will update this feature to stay compatible.

New Visualizer for AI telemetry

New and Updated Integrations

Aspire 9.5 introduces several new integrations and significantly enhances existing ones, making it easier to work with AI services, cloud resources, and development tools.

AI Hosting Integrations

The new AddOpenAI integration provides first-class support for modeling OpenAI endpoints and their associated models within your Aspire application.

var apiKey = builder.AddParameter("openai-api-key", secret: true);

var openai = builder.AddOpenAI("openai")
    .WithApiKey(apiKey)
    .WithEndpoint("https://api.openai.com");

var chatModel = openai.AddModel("chat", "gpt-4o-mini");

Additionally, we are introducing support for a strongly-typed catalog for GitHub and Azure AI Foundry models. This gives you intellisense support for all the up-to-date models that you can use.

var gpt4 = builder.AddAzureAIFoundry("foundryresource").AddDeployment("gpt4", AIFoundryModel.OpenAI.Gpt4);

var mistral = builder.AddGitHubModel("mistral", GitHubModel.MistralAI.MistralLarge2411);

Dashboard showing the GitHub models connected

Dev Tunnels Hosting Integration

Aspire 9.5 introduces first-class support for Azure Dev Tunnels.

As a developer, this allows you to securely share your application running on your workstation with the outside network. You can test webhooks from public services, quickly get feedback from customers, and even test interactions from a mobile device using DevTunnels

var builder = DistributedApplication.CreateBuilder(args);

// Add a basic Dev Tunnel resource (default: private access)
var tunnel = builder.AddDevTunnel("dev-tunnel")
    .WithAnonymousAccess();

// Add your web application
var webApp = builder.AddProject<Projects.WebApp>("webapp");

// Connect the tunnel to the web application endpoint
tunnel.WithReference(webApp.GetEndpoint("http"));

builder.Build().Run();

The Dev Tunnels integration automatically handles Azure authentication, tunnel lifecycle management, and provides public or private URLs (depending on configuration) to connected resources, making it easy to expose local development services securely to external consumers. Dev Tunnels also improves support for mobile dev, such as .NET MAUI, making it easy to launch both your backend and mobile app at once without complex dev-time config.

YARP Static Files Support

Aspire 9.5 adds static file serving capabilities to the YARP integration, enabling direct static file serving from YARP so your app can deliver HTML, CSS, JavaScript, and other assets efficiently. You can choose flexible source options, such as bind mounting local directories or utilizing Docker multi-stage builds, to suit your workflow. The static file support works reliably in both development and production environments, streamlining deployment and day-to-day operations.

The following example demonstrates how YARP can be configured to serve static files from a frontend ‘dist’ directory while also proxying API requests to a backend service. This approach streamlines resource management and routing within distributed applications.

var backendApi = builder.AddProject<Projects.Api>("api");

// YARP serves static files AND proxies API requests
var gateway = builder.AddYarp("app-gateway")
    .WithStaticFiles("./frontend/dist")
    .WithConfiguration(yarp =>
    {
        // API routes
        yarp.AddRoute("/api/{**catch-all}", backendApi)
            .WithTransformPathRemovePrefix("/api");

        // Static files are served for all other routes
    });

Cross-Process Call Stacks in Visual Studio 2026

You might have heard that the Visual Studio team officially released the first previews of Visual Studio 2026. Visual Studio’s Call Stack Window can now extend Aspire apps to show call stack frames from other debugged processes running on Windows. This feature is a game-changer for deep-dive diagnostics on distributed systems. Issues are found faster by reconstructing the full logical call path, even when the request hops between services. With deeper visibility into async operations, developers can debug smarter, not harder. Currently available only on Windows and Visual Studio 2026 Insiders.

Get Started Now

Ready to try Aspire 9.5? Install the new CLI and try the aspire update command on your projects, then let us know what you think!

  • GitHub: Collaborate with the team on GitHub
  • Discord: Join the community on Discord to chat with the team and other developers
  • Documentation: Explore the comprehensive documentation for detailed guides and tutorials.

For the complete list of changes and technical details, visit the official Aspire 9.5 release notes.

Author

Jeffrey Fritz
Principal Program Manager

Jeff Fritz is a principal program manager in Microsoft’s Developer Division working on the .NET Community Team. Four days a week, you can catch Jeff hosting a live video stream called 'Fritz and Friends' at live.jeffreyfritz.com.

1 comment

Sort by :
  • Vijay Anand E G · Edited

    This should do the work, or am I missing something?

    dotnet tool install --global aspire.cli