Today, we released .NET Aspire 9.4, our biggest release ever, bringing new integrations, interactive dashboard-based inputs, and a standalone, native AOT command line tool for creating and running Aspirified apps. We also published our first roadmap last week, which outlines a bunch of exciting features we want to tackle in the next 6 months. There are too many things in this release for me to cover in one blog, so I picked some of my favorites to share - you can see the rest in our What's New docs.⚡Just clone and "aspire run" with the new Aspire CLIWith Aspire 9.4, the Aspire CLI is officially GA and here to make your dev loop even more seamless. The CLI gives you a fast, scriptable, and consistent way to scaffold, run, and configure your apps.This release brings the first four core commands: aspire new – Choose from our set of templates to kickstart your app aspire add – Add Aspire hosting integrations from anywhere in your repo aspire run – Run your full app stack from any terminal or editor (or subdirectory!) aspire config – View, set, and change CLI settings and feature flags - local to your repo or global to your machine[video width="1024" height="576" src="https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2025/07/AspireCLI-BlogDemo.webm"]We're also including an updated version of aspire publish, which is still in preview, and two commands in beta - exec (for executing CLI tools like database migrations) and deploy (for deploying your full stack to dev, test, or even prod environments). The two beta commands can be turned on via aspire config set - see the CLI Reference docs for more details.The CLI is native AOT (ahead-of-time) compiled, making it super fast across different architectures. You can download the GA CLI from our install script:Bash:curl -sSL https://aspire.dev/install.sh | bashPowershell:iex "& { $(irm https://aspire.dev/install.ps1) }"[alert type="note" heading="Note"]You can continue using the Aspire CLI as a dotnet tool, but it will not be the AOT version. If you're currently using the dotnet tool and would like to update to the AOT version, first uninstall it with dotnet tool uninstall -g aspire.cli.[/alert]Learn more about the Aspire CLI in our docs.🖱️ Custom dashboard interactivityWith Aspire, you can tailor the dashboard to your specific application with custom resource commands and named URLs, and the ability to hook into resource lifecycle events. Aspire 9.4 brings a user-friendly overhaul to our eventing APIs and a major new extensibility point for you to leverage - the interaction service.With the interaction service, you can create custom UX to get user input during development while the app is running, present notifications, or ask for confirmation before running a command. The interaction service supports 5 different input types: Text (Standard text input - great for passing args, creating mock data, etc) SecretText (Masked text input - great for API keys, tokens, etc) Number (Numeric input - great for seeding DB items, running load tests) Choice (Dropdown from a set list - useful for structured inputs) Boolean (Checkbox - great for toggling on things like mock data at runtime)The interaction service also works in the CLI for inputs required during publish and deploy.[alert type="note" heading="Preview Feature"]The interaction service is still in preview and the API may change as we refine it further. We're looking forward to hearing your feedback about it on the Aspire GitHub![/alert]🔠 Built-in prompting for parametersAspire 9.4 already leverages the new interaction service to collect any missing parameter values defined in your apphost. Instead of expecting every dev on your team to maintain their own local appsettings.development.json or .env file, Aspire will prompt for missing values in the dashboard before starting any resource that needs them. You can even customize parameter descriptions with rich markdown, so anyone who clones and runs your app has clear guidance on what values they need to provide - and then optionally save those values to their user secrets for non-source-controlled per-project config.✨ Easy AI development with GitHub Models and Azure AI FoundryAspire streamlines distributed, complex app dev, and an increasingly popular example of this is AI development. If you've been adding agentic workflows, chatbots, or other AI-enabled experiences to your stacks, you know how difficult it is to try different models, wire them up, deploy them (and authenticate to them!) at dev time, and figure out what's actually happening while you debug. But, AI-enabled apps are really just distributed apps with a new type of container - an AI model! - which means Aspire is perfect for streamlining this dev loop.Aspire 9.4 includes two new AI-focused hosting integrations - GitHub Models (Preview) and Azure AI Foundry (Preview) - which let you define AI models in your apphost then run them locally or deploy models to develop against. Both integrations work seamlessly with the Azure AI Inference (Preview) client integration, so you get detailed OpenTelemetry traces and simple bootstrapping code for your client app or service implementing it.This is all the code it takes to define, deploy, and run a new GitHub or Azure AI Foundry model in your apphost:// AppHost.csvar ai = builder.AddAzureAIFoundry("ai");var embedding = ai.AddDeployment( name: "text-embedding", modelName: "text-embedding-3-small", modelVersion: "1", format: "OpenAI") .WithProperties(d => { d.SkuCapacity = 20; });🌐 Yet another resource with ExternalService and the updated YARP integrationOne of my favorite features in 9.4 seems minor, but is a huge quality of life improvement for anyone working with external or third-party APIs. You can now use AddExternalService() to model any URL or endpoint as a resource, get health status, and reference or configure it the same as any other resource in the apphost.var externalApi = builder.AddExternalService("resource-name", "https://api.example.com");var frontend = builder.AddNpmApp("frontend", "../MyJSCodeDirectory") .WithReference(externalApi);Many external APIs require some sort of auth or specific headers, versioning, or routes. The preview YARP integration has been updated with fluent transform APIs so you can programmatically define your config in C# with strong types, IntelliSense, and any other Aspire resource config.🎉 Start using 9.4 todayThere are so many more features, integration updates, and quality-of-life improvements that shipped in Aspire 9.4 - if I tried to cover them all, I'd be reaching Stephen Toub-level post length! You can see a comprehensive list of changes in our What's New doc, and use them now by updating your AppHost.csproj SDK version and packages:I'm so proud of this release and the incredible amount of work that went into it - both from the Aspire team and our community contributors. We're looking forward to hearing your feedback on 9.4 and what you want to see next - let us know on GitHub and our new Discord server. See you there!