If you have spent any time watching a coding agent struggle with your Aspire project — starting the AppHost, waiting for resources, then accidentally stomping on another branch's ports — Aspire 13.2 was clearly built with that pain in mind. Released on 25 March 2026, this update reshapes the CLI around agent-driven workflows, cracks open the AppHost to TypeScript, and turns the dashboard into something you can actually export data from. It is a dense release, so let us focus on the parts that will change how you work day to day.

The CLI gets an agent-shaped redesign

The headline feature is what Microsoft calls an "AI-agent-native CLI." In practice, this means the aspire CLI now has first-class support for the patterns that coding agents (GitHub Copilot, Claude Code, and similar tools) need: background execution, machine-readable output, resource-level control, and health-status polling.

Detached mode and process management

Previously, aspire run blocked the terminal. If a coding agent wanted to start your AppHost, run some tests, and then tear it down, it had to manage process lifecycles itself. Now there is a proper background mode:

terminal
aspire start                         # Start AppHost in background (detached)
aspire ps                            # List running AppHost instances
aspire ps --resources --format json  # Machine-readable resource listing
aspire stop                          # Stop all running instances

The --format json flag is the key detail. JSON goes to stdout, status messages go to stderr. An agent can parse the output without scraping human-readable text.

Resource-level commands

Instead of restarting your entire AppHost because one project needs a rebuild, you can now target individual resources:

terminal
aspire resource api restart
aspire resource api rebuild

The rebuild command is particularly useful during iterative development. Change a file, rebuild the single project, and the rest of your infrastructure stays warm.

Isolation mode

This one solves a genuine headache. If you are running Aspire across multiple git worktrees — or if a coding agent spins up a parallel environment — port conflicts are inevitable. The --isolated flag randomises ports and creates separate user secrets:

terminal
aspire start --isolated

No more hunting down why port 5432 is already in use because another branch's AppHost is still running. Each isolated instance gets its own ports, its own secrets store, and its own lifecycle.

Waiting for resources

Agents need to know when a resource is healthy before running tests against it. The wait command blocks until a resource reaches a specified state:

terminal
aspire wait api --status healthy --timeout 120

This replaces fragile polling loops with a single, deterministic command. If the resource does not reach the target status within the timeout, the command exits with a non-zero code.

Built-in documentation access

The CLI can now query aspire.dev documentation directly:

terminal
aspire docs search "redis"
aspire docs get redis-integration
aspire docs get redis-integration --section "Add Redis resource"

This is explicitly designed for agents that need context about Aspire integrations without leaving the terminal. Human developers will probably still reach for the browser, but it is useful for scripting too.

Environment diagnostics

Before any of this matters, your environment needs to be correctly set up. The doctor command validates everything an Aspire project needs:

terminal
aspire doctor

It checks HTTPS certificates, Docker or Podman availability, .NET SDK version, WSL2 configuration on Windows, and agent-specific config. Think of it as a preflight check.

TypeScript AppHost: Aspire beyond C#

This is the one that raised eyebrows. You can now write your Aspire AppHost in TypeScript:

apphost.ts
import { createBuilder } from './.modules/aspire.js';

const builder = await createBuilder();

const cache = await builder.addRedis("cache");

const api = await builder.addProject("api", "../api")
    .withReference(cache)
    .waitFor(cache);

await builder.build().run();

The app model is the same. Service discovery, the dashboard, the CLI — everything works identically whether your AppHost is C# or TypeScript. The aspire add command inspects .NET assemblies and generates TypeScript SDKs automatically, so you get full type safety for your resource references.

Why this matters

Aspire has always had a "you must know C# to orchestrate" requirement. That is fine when your entire team writes C#, but it becomes a barrier when your platform team includes TypeScript developers, or when your orchestration logic needs to live closer to your Node.js services.

The TypeScript AppHost is in preview, but the VS Code integration already supports CodeLens decorations, gutter state indicators, and native debugging for TypeScript AppHosts. Microsoft has signalled that more languages are coming — TypeScript is the proof of concept.

// NOTE

The TypeScript AppHost is a preview feature in 13.2. Expect API changes before it stabilises. The C# AppHost remains the production-supported path for now.

Configuration consolidation

Aspire projects have accumulated configuration files over time: .aspire/settings.json, apphost.run.json, launch profiles, and various scattered settings. Aspire 13.2 consolidates everything into a single aspire.config.json:

aspire.config.json
{
  "appHost": {
    "path": "apphost.ts",
    "language": "typescript/nodejs"
  },
  "sdk": {
    "version": "13.2.0"
  },
  "channel": "stable",
  "profiles": {
    "default": {
      "applicationUrl": "https://localhost:17000;http://localhost:15000"
    }
  }
}

Legacy configuration files are auto-migrated. The old files are preserved for backward compatibility, but new projects will only generate aspire.config.json. The aspire config commands let you read and write settings without editing JSON by hand:

terminal
aspire config list
aspire config get appHost.path
aspire config set channel preview

Dashboard: export everything

The Aspire dashboard has been a read-only window into your running application. That changes in 13.2 with a proper telemetry export and import system.

Telemetry HTTP API

The dashboard now exposes a REST API for telemetry data:

GET /api/telemetry/resources
GET /api/telemetry/spans
GET /api/telemetry/logs
GET /api/telemetry/traces
GET /api/telemetry/traces/{traceId}

Each endpoint supports ?follow=true for real-time NDJSON streaming. You can pipe trace data into external tools, build custom dashboards, or feed telemetry into your CI pipeline for automated regression detection.

Enable the API with environment variables:

terminal
DASHBOARD__API__ENABLED=true
DASHBOARD__API__AUTHMODE=ApiKey
DASHBOARD__API__PRIMARYAPIKEY=your-api-key-here

Export snapshots

The aspire export command creates a complete debug snapshot — traces, logs, resource configuration — as a zip file. Share it with a colleague, attach it to a bug report, or import it into another dashboard instance:

terminal
aspire export --output ./artifacts/debug-snapshot.zip
aspire export api  # Export a single resource

The dashboard UI also lets you export individual resources as JSON and environment variables as .env files.

Other dashboard improvements

New integrations worth knowing about

Microsoft Foundry

The Azure AI Foundry integration has been overhauled and renamed for the next-generation Microsoft Foundry platform:

AppHost/Program.cs
var foundry = builder.AddFoundry("foundry");
var project = foundry.AddProject("agents");
var chat = project.AddModelDeployment("chat", FoundryModel.OpenAI.Gpt5Mini);

builder.AddPythonApp("agent", "..\\agent", "main:app")
    .WithReference(project)
    .WithReference(chat)
    .PublishAsHostedAgent(project);

// WARNING

If you are upgrading from the Azure AI Foundry integration, you will need to replace the Aspire.Hosting.Azure.AIFoundry package with Aspire.Hosting.Foundry. The package names and APIs have changed.

Azure Virtual Networks and private endpoints

Aspire can now model VNets, subnets, NAT gateways, and private endpoints directly in the AppHost:

AppHost/Program.cs
var vnet = builder.AddAzureVirtualNetwork("vnet");

var webSubnet = vnet.AddSubnet("web", "10.0.1.0/24")
    .AllowInbound(
        port: "443",
        from: AzureServiceTags.AzureLoadBalancer,
        protocol: SecurityRuleProtocol.Tcp)
    .DenyInbound(from: AzureServiceTags.Internet);

var peSubnet = vnet.AddSubnet("private-endpoints", "10.0.2.0/27");

var storage = builder.AddAzureStorage("storage");
peSubnet.AddPrivateEndpoint(storage.AddBlobs("blobs"));

This means your deployment topology — network rules, private connectivity, NAT configuration — lives in the same place as your service definitions. No more context-switching between Bicep files and AppHost code.

Docker Compose publishing (now stable)

The Docker Compose publisher, which was preview in Aspire 13, is now stable:

Example.cs
builder.AddDockerComposeEnvironment("compose");

At publish time, Aspire generates a complete docker-compose.yaml from your AppHost model. If your deployment target is not Azure Container Apps or Kubernetes, this gives you a straightforward path to production.

MongoDB EF Core

A new integration wires up MongoDB with Entity Framework Core:

Example.cs
builder.AddMongoDbContext<MyDbContext>("mongodb", databaseName: "appdb");

Breaking changes to watch for

A few renames landed in this release that will bite you during upgrades:

Common pitfalls

Forgetting --isolated in CI. If your CI pipeline runs multiple Aspire-backed test suites in parallel, they will fight over ports. Always use --isolated in automated environments.

Mixing old and new config files. The auto-migration from .aspire/settings.json to aspire.config.json works, but if you manually edit both files, the old one takes precedence in some edge cases. Delete the legacy files once you have confirmed migration.

TypeScript AppHost type generation. The generated TypeScript SDKs in .modules/ must be regenerated after adding new .NET project references. Run aspire restore if your TypeScript AppHost cannot find a project you just added.

Export API authentication. The telemetry API defaults to disabled. If you enable it without setting an auth mode, the dashboard will reject all requests. Always configure DASHBOARD__API__AUTHMODE alongside DASHBOARD__API__ENABLED.

Resource rebuild vs restart. aspire resource api restart stops and starts the resource with existing binaries. aspire resource api rebuild recompiles first. Using restart when you meant rebuild means your code changes will not take effect.

Summary

Aspire 13.2 is a substantial release that reflects where the .NET ecosystem is heading:

Update with aspire update --self && aspire update, and check your project for the breaking changes listed above before you merge.