.NET Aspire 9.4 has been released as the latest minor version of the cloud-native application development stack, marking its most significant update to date. As reported by Microsoft, this release introduces a range of enhancements focused on developer experience, deployment automation, and deeper integration across cloud services and local environments.
One of the most notable additions in version 9.4 is the general availability of the Aspire CLI, a standalone command-line tool that allows developers to create, configure, and deploy Aspirified applications. As stated in the release notes, the CLI supports commands such as aspire new, aspire run, aspire config, and the preview aspire publish and aspire deploy commands.
These tools provide an easier interface for building and deploying distributed applications. The aspire deploy command, though still behind a feature flag, introduces extensible deployment workflows using custom annotations and progress reporting, supporting scenarios such as database seeding or interactive environment configuration.
Version 9.4 also delivers improvements to the Aspire dashboard. Developers can now view external parameters and connection strings directly within the interface, and receive automatic upgrade notifications.
Also, enhanced peer visualization and tracing support now allow for better insights into external service connectivity and uninstrumented resources, while new features such as text wrapping in logs and visibility toggles for hidden resources offer more control over the debugging and monitoring experience.
(Call to a GitHub model resolving to the model resource in Aspire. Source: Microsoft Official Documentation)
The key architectural upgrade in this release is introducing the interaction service. This new runtime component enables dashboard-based or CLI-based interactions such as input collection, confirmation prompts, and multi-step workflows.
As explained, the interaction service also supports validation callbacks and notification messages, allowing for richer user experiences during operations like application startup, publishing, and deployment.
The update also includes broader support for modeling external services, non-localhost endpoint configurations, and persistent container networking. With a note from the authors that this feature is experimental and may change in future releases.
Microsoft team provides the example usage of IInteractionService APIs:
public class DeploymentService
{
private readonly IInteractionService _interactionService;
public DeploymentService(IInteractionService interactionService)
{
_interactionService = interactionService;
}
public async Task DeployAsync()
{
// Prompt for confirmation before destructive operations
var confirmResult = await _interactionService.PromptConfirmationAsync(
"Confirm Deployment",
"This will overwrite the existing deployment. Continue?");
if (confirmResult.Canceled || !confirmResult.Data)
{
return;
}
// Collect multiple inputs with validation
var regionInput = new InteractionInput { Label = "Region", InputType = InputType.Text, Required = true };
var instanceCountInput = new InteractionInput { Label = "Instance Count", InputType = InputType.Number, Required = true };
var enableMonitoringInput = new InteractionInput { Label = "Enable Monitoring", InputType = InputType.Boolean };
var multiInputResult = await _interactionService.PromptInputsAsync(
"Advanced Configuration",
"Configure deployment settings:",
[regionInput, instanceCountInput, enableMonitoringInput],
new InputsDialogInteractionOptions
{
ValidationCallback = async context =>
{
if (!IsValidRegion(regionInput.Value))
{
context.AddValidationError(regionInput, "Invalid region specified");
}
}
});
if (multiInputResult.Canceled)
{
return;
}
await RunDeploymentAsync(
region: regionInput.Value,
instanceCount: instanceCountInput.Value,
enableMonitoring: enableMonitoringInput.Value);
// Show progress notifications
await _interactionService.PromptNotificationAsync(
"Deployment Status",
"Deployment completed successfully!",
new NotificationInteractionOptions
{
Intent = MessageIntent.Success,
LinkText = "View Dashboard",
LinkUrl = "https://portal.azure.com"
});
}
private bool IsValidRegion(string? region)
{
// Validation logic here
return !string.IsNullOrEmpty(region);
}
}
New resource lifecycle event hooks simplify common patterns like database seeding and configuration validation. A new ResourceCommandService API has also been added, enabling programmatic execution of dashboard commands against resources, which can be particularly useful in testing or automation scenarios.
Regarding the .NET Aspire Integrations, the latest release extends support for GitHub-hosted AI models and Azure AI Foundry, including on-device inference with Foundry Local.
var builder = DistributedApplication.CreateBuilder(args);
// Add Azure AI Foundry project
var foundry = builder.AddAzureAIFoundry("foundry");
// Add specific model deployments
var chat = foundry.AddDeployment("chat", "qwen2.5-0.5b", "1", "Microsoft");
var embedding = foundry.AddDeployment("embedding", "text-embedding-ada-002", "2", "OpenAI");
// Connect your services to AI capabilities
var webService = builder.AddProject<Projects.WebService>("webservice")
.WithReference(chat)
.WaitFor(chat);
builder.Build().Run();
Other Azure enhancements include support for hierarchical partition keys in Cosmos DB, simplified Azure Key Vault secret references, improved managed identity usage, and expanded database initialization APIs.
The release also includes updates to Docker Compose deployments, container support for Azure App Service, and improved Container App Environment configuration.
Several breaking changes are introduced in this version, affecting APIs such as Azure Key Vault secret access, Azure Storage blob container creation, and parameter resolution behavior. With a note that migration guidance is provided in the release documentation.
In addition to the core updates, .NET Aspire 9.4 introduces enhancements across its project templates, including support for .NET 10 and improved file naming conventions to help developers better organize multi-project solutions.
Alongside this release, the Aspire team also prepared and published a public roadmap outlining the next six months of development. As stated in the announcement, the goal is to evolve Aspire into a code-first, polyglot toolchain for modeling, running, and deploying distributed systems from a single source of truth. With a note that the roadmap is directional and subject to change, it reflects areas of active exploration and feedback-driven priorities.
For interested readers, full release notes and technical documentation for .NET Aspire 9.4 are available at the official .NET Aspire GitHub repository and on Microsoft Learn.