-
Notifications
You must be signed in to change notification settings - Fork 961
13.5 Change log
41 new features, 111 improvements, 133 bug fixes
ℹ️ This changelog is automatically generated from merged pull requests and may contain inaccuracies. For official release notes, see https://aka.ms/aspire/update-latest.
- 2026-08-17 22:37 — ⏳ Progress dialog API for AppHost commands and IInteractionService
- 2026-08-17 22:28 — 🧭 Fixed mixed-quality staging package discovery for polyglot AppHosts
- 2026-08-17 22:25 — 🔒 Aspire Skills bundle integrity checks use SHA-512
- 2026-08-15 20:06 — 📦 Fixed npm registry hard-coded to internal feed
- 2026-08-15 18:21 — 💾 Kubernetes persistent volume first-class support
- 2026-08-15 18:06 — 🚫 Actionable error when publishing DotnetProjectResource
- 2026-08-15 18:00 — 🔗 Surfaced ASPIRE010 help link inline in warning text
- 2026-08-14 04:27 — 🌐 Honor --source during template discovery
- 2026-08-13 23:59 — 📦 Fixed Aspire CLI bundle resolution on fresh installs
- 2026-08-13 23:58 — 🔐 TypeScript AppHost trusts the dev certificate
14 new features, 34 improvements, 34 bug fixes
-
🐳 TypeScript AppHosts support container file copying
TypeScript (ATS) AppHosts can now export withContainerFiles to copy host files into container resources, with support for owner, group, and umask options. This brings TypeScript polyglot AppHosts to parity with C# AppHosts that use WithContainerFiles.
Owner: @sebastienros
Changes: #17877
Docs: microsoft/aspire.dev#1204
📝 Documentation required -
💚 Custom health checks for TypeScript AppHosts
TypeScript (ATS) AppHosts can now register custom health check callbacks using builder.addHealthCheck() and attach them to resources. Project resources also gain withEndpointsInEnvironment() to control which endpoints are injected into their environment variables.
Owner: @sebastienros
Changes: #17878
Docs: microsoft/aspire.dev#1466
📝 Documentation required -
🔧 HTTP resource commands support user-defined arguments
HTTP resource commands (WithHttpCommand) can now declare named arguments, allowing the Dashboard and CLI to prompt for input before invoking them. TypeScript AppHosts have full parity through ATS exports, and CLI callers can pass arguments with named options. The Foundry hosted-agent command now exposes a stable send-message command name.
Owner: @davidfowl
Changes: #17950
📝 Documentation required -
🌐 IInteractionService available in polyglot app hosts
IInteractionService (prompts, message boxes, notifications, and dynamic inputs) is now available in polyglot app hosts written in TypeScript, Python, Go, Java, and Rust. Callback contexts such as IServiceProvider and builder overloads are also exposed to polyglot hosts, enabling feature parity with C# app hosts.
Owner: @sebastienros
Changes: #17959, #18059
Docs: microsoft/aspire.dev#1347
📝 Documentation required -
🖥️ Interactive terminal sessions with WithTerminal()
AppHost authors can now call WithTerminal() on a resource to enable interactive terminal sessions. The dashboard and CLI can attach to and detach from the session at will, enabling interactive use of REPLs, shells, and other terminal programs running as Aspire resources.
Owner: @mitchdenny
Changes: #17866
Docs: microsoft/aspire.dev#1244, microsoft/aspire.dev#1329
📝 Documentation required -
🌐 Azure resource scope support
Aspire now supports targeting Azure resources outside the default deployment resource group. You can reference existing resources across subscriptions, resource groups, or at subscription and tenant scope when modeling your Azure infrastructure.
Owner: @davidfowl
Changes: #17988
Docs: microsoft/aspire.dev#1451
📝 Documentation required -
👁️ HiddenAnnotation and HiddenBehavior made public
HiddenAnnotation and HiddenBehavior are now part of the public API, allowing callers to apply the same visibility annotation that Aspire uses internally to control whether a resource is hidden in the dashboard.
Owner: @davidfowl
Changes: #18370
📝 Documentation required
🌍 Community contribution by @@afscrome -
🏷️ Custom Orleans provider type annotation
Users can now explicitly specify the Orleans provider type for a resource usingWithOrleansProviderType(). This is useful for drop-in replacements like Garnet for Redis, where Orleans cannot automatically derive the correct provider type from the resource name.
Owner: @davidfowl
Changes: #13630
📝 Documentation required
🌍 Community contribution by @@flensrocker -
⏳ Progress dialog API for AppHost commands and IInteractionService
A new PromptProgressAsync API on IInteractionService lets AppHost code display a non-dismissable progress dialog in the dashboard during long-running operations, with optional cancel support. CommandOptions also gains a CommandProgressOptions property so resource commands can automatically show a progress dialog while they execute. The API shape was refined before shipping so message stays the only required positional argument, with title moved into ProgressInteractionOptions (and the polyglot InteractionProgressOptions) for consistency across C#, TypeScript, Python, Java, Go, and Rust.
Owner: @JamesNK
Changes: #18493, #19424
Docs: microsoft/aspire.dev#1347
📝 Documentation required -
💾 Kubernetes persistent volume first-class support
A new KubernetesPersistentVolumeResource lets AppHost authors configure durable Kubernetes volumes in the app model and bind them to container or project workloads via WithPersistentVolume(). Includes YAML serializer fixes for PV/PVC/StatefulSet manifests that previously emitted invalid empty object blocks. Workloads bound with WithPersistentVolume() now also get a default pod security context (fsGroup: 2000, OnRootMismatch) so non-root containers can write to the mounted volume without manual configuration; the default can be overridden or removed via the existing PublishAsKubernetesService customization callback.
Owner: @mitchdenny
Changes: #16929, #19401
Docs: microsoft/aspire.dev#1328, microsoft/aspire.dev#1450
📝 Documentation required -
💾 shm_size support for Docker Compose services
Docker Compose services generated by Aspire now support the shm_size property. AppHost authors can set the shared memory size for a container service when publishing to Docker Compose.
Owner: @mitchdenny
Changes: #18646
📝 Documentation required
🌍 Community contribution by @@alirezafzali -
📁 File upload support for Interaction Service
A new File input type for IInteractionService lets AppHost commands display a file picker dialog in the dashboard and CLI, allowing users to select and upload files to the app host. Includes single and multiple file selection, configurable size limits, and full support for C# and TypeScript app hosts.
Owner: @JamesNK
Changes: #14882
Docs: microsoft/aspire.dev#1347
📝 Documentation required
🌍 Community contribution by @@mcumming -
⚙️ Run mode configuration for execution context
Added RunConfiguration with a WatchEnabled property to DistributedApplicationExecutionContext, allowing app hosts to detect and respond to watch-mode runs and adjust resource launch behavior accordingly. This is part of the Project v2 work stream.
Owner: @karolz-ms
Changes: #18863
Docs: microsoft/aspire.dev#1471
📝 Documentation required -
📌 Local tool manifest support for AppHost DNX invocation
C# AppHost projects can now opt into DNX resolution that honors an in-scope .NET local tools manifest, letting a repository pin the Aspire CLI version in.config/dotnet-tools.jsonand have that version used when launching an AppHost throughdotnet run.
Owner: @DamianEdwards
Changes: #19315
Docs: microsoft/aspire.dev#1484
📝 Documentation required
-
🔌 Backchannel property compatibility improvements
Preserves auxiliary backchannel backward compatibility while enabling rich JSON property values (numbers, booleans, arrays) for clients that advertise the new aux.v4 capability. The CLI now sends its client capabilities when using v2 resource snapshots.
Owner: @adamint
Changes: #17507 -
🌐 Blazor gateway Docker Compose publish support
Adds Docker Compose publish support for the Blazor gateway and addresses various review feedback items including resource name attributes and improved OTLP warning placement.
Owner: @davidfowl
Changes: #17384
📝 Documentation required
🌍 Community contribution by @@javiercn -
⚓ Helm v4.2.0+ version validation for Kubernetes deploy
Aspire now validates that Helm v4.2.0 or later is installed before running Kubernetes deployments. Previously, missing or outdated Helm produced cryptic low-level errors; users now see a clear, actionable message.
Owner: @mitchdenny
Changes: #17491
Docs: microsoft/aspire.dev#1090, microsoft/aspire.dev#1097
📝 Documentation required -
⚙️ Standardize resource service endpoint URL config name
The resource service endpoint URL is now resolved using KnownConfigNames (ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL) with a legacy fallback to DOTNET_RESOURCE_SERVICE_ENDPOINT_URL, improving consistency with Aspire naming conventions.
Owner: @JamesNK
Changes: #17385 -
🎉 TypeScript/polyglot AppHost support is GA
TypeScript/polyglot AppHost support is now generally available. The ASPIREATS001 experimental diagnostic has been removed, so projects no longer need to suppress it.
Owner: @sebastienros
Changes: #17600
Docs: microsoft/aspire.dev#1230
📝 Documentation required -
🤖 Updated Foundry hosted agent builder APIs
The Aspire.Hosting.Foundry hosted-agent builder APIs have been updated with a cleaner project-first API (AsHostedAgent). Publish-mode agents now attach the Foundry project reference to the correct deployment target resource, and Azure Container Registry is only added for publish/deploy scenarios.
Owner: @tommasodotNET
Changes: #17545, #17687
Docs: microsoft/aspire.dev#1130
📝 Documentation required -
🌍 DevTunnel region configuration
Added a Region property to DevTunnelOptions, allowing you to specify the region where the dev tunnel is created. The fully qualified tunnel ID now includes the region.
Owner: @DamianEdwards
Changes: #14112
Docs: microsoft/aspire.dev#1468
📝 Documentation required
🌍 Community contribution by @@kola-tm -
⏸️ Defer explicit-start resource configuration
Session-scoped resources marked with WithExplicitStart() no longer run their execution configuration callbacks (arguments, environment variables, certificates) until the user manually starts them. Previously these callbacks ran at AppHost startup, which could prompt for user input prematurely.
Owner: @danegsta
Changes: #17825
Docs: microsoft/aspire.dev#1194 -
🤖 Foundry Local integration updated to use foundry CLI
The Foundry Local integration (RunAsFoundryLocal) now uses the installed foundry CLI for service lifecycle management instead of internal SDK APIs, ensuring compatibility with Foundry Local 1.1.0. The AppHost API is unchanged, but the foundry CLI must be installed and available on PATH.
Owner: @sebastienros
Changes: #17889
Docs: microsoft/aspire.dev#1210
📝 Documentation required -
🩺 Friendly error messages for health check failures
Health check failures now display concise, actionable error messages instead of raw exception stack traces, making it easier to diagnose why a resource health check is failing in the Dashboard.
Owner: @davidfowl
Changes: #14072 -
⚙️ WithProcessCommand supports named arguments and TypeScript callbacks
WithProcessCommand now supports named arguments end-to-end, including process spec callbacks, result callbacks, CLI/backchannel invocation, and TypeScript/polyglot AppHosts, completing the argument-passing feature for process commands.
Owner: @davidfowl
Changes: #17968
📝 Documentation required -
🚫 PublishAsConnectionString marked obsolete
ThePublishAsConnectionStringextension methods in Aspire.Hosting and Aspire.Hosting.Azure are now marked obsolete. This API only changes the manifest representation of a resource and can mislead callers into thinking it converts resources for all publishers. Callers should switch toAddConnectionStringin publish-mode app model code.
Owner: @davidfowl
Changes: #18044
Docs: microsoft/aspire.dev#1237
⚠️ Breaking change
📝 Documentation required -
🔄 ServiceProvider renamed to Services on context types
The ServiceProvider property on all hosting context types is now marked obsolete and replaced with a new Services property, consistent with existing patterns like BeforeStartEvent.Services and DistributedApplication.Services. The old property still works but will generate a compiler warning.
Owner: @JamesNK
Changes: #18034
⚠️ Breaking change
📝 Documentation required -
✅ IInteractionService promoted to stable
IInteractionService and all related interaction types (InteractionInput, InteractionInputCollection, InputType, InteractionOptions, and others) have been promoted from experimental to stable and no longer require suppressing the ASPIREINTERACTION001 diagnostic.
Owner: @JamesNK
Changes: #18032
Docs: microsoft/aspire.dev#1347, microsoft/aspire.dev#1408
📝 Documentation required -
🔌 Consistent port allocation for proxyless endpoints
Proxyless endpoints without explicit public ports now receive deterministic host port assignments during DCP service preparation. The allocator scans a configurable port range (default 10000–32767, overridable via ASPIRE_PROXYLESS_ENDPOINT_PORT_RANGE) and persists assigned ports for persistent resources in user secrets.
Owner: @danegsta
Changes: #17924
Docs: microsoft/aspire.dev#1199
⚠️ Breaking change
📝 Documentation required -
📋 Custom database creation scripts log execution details
When a custom database creation script is provided via WithCreationScript(), the resource logger now emits informational messages showing the script being executed and its outcome. This applies to SQL Server, PostgreSQL, MySQL, and Azure Kusto database resources.
Owner: @mitchdenny
Changes: #18138 -
🌌 Azure Cosmos DB vNext emulator GA alignment
The Azure Cosmos DB Linux-based (vNext) emulator is now fully aligned with the GA vnext-latest image. RunAsPreviewEmulator() pulls mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-latest; the Data Explorer is now opt-in (call WithDataExplorer() to enable it instead of running unconditionally); and WithDataVolume() no longer sets the AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE variable for the vNext emulator since the GA image uses implicit /data volume persistence instead.
Owner: @sebastienros
Changes: #18158, #18161
📝 Documentation required
🌍 Community contribution by @@guanzhousongmicrosoft -
🔍 Improved Azure provisioning diagnostics
Azure provisioning failures now surface richer diagnostics with actionable recovery guidance in resource state andaspire deployoutput. Errors such as unsupported regions, missing subscriptions, and invalid resource properties are normalized into provider-specific details with targeted remediation steps instead of generic ARM wrapper messages.
Owner: @davidfowl
Changes: #18132
📝 Documentation required -
🏷️ Resource property metadata moved to producers
Resource producers such as projects, containers, executables, parameters, and .NET tools now supply their own property display metadata (labels, default visibility, and ordering) via the resource snapshot protocol. The dashboard uses this producer-supplied metadata instead of hardcoded per-resource-type lookups, enabling custom resources to control how their properties appear in the resource details panel.
Owner: @davidfowl
Changes: #18202
📝 Documentation required -
🔔 Smarter ignore for pre-release version update notifications
When dismissing a version update notification for a pre-release (e.g. 13.5.0-preview1), Aspire now stores a wildcard pattern (13.5.0-*) that suppresses notifications for all subsequent pre-releases of the same version. The notification reappears when the stable release (13.5.0) becomes available.
Owner: @JamesNK
Changes: #18233 -
⚙️ AppHost projects default to CLI bundle
C# AppHost projects now use the Aspire CLI bundle by default, without requiring AspireUseCliBundle=true in the project file. If the CLI bundle cannot be resolved, the build reports ASPIRE009 with install guidance. Users can opt out by setting false in their project file, which emits ASPIRE010.
Owner: @DamianEdwards
Changes: #18188
⚠️ Breaking change
📝 Documentation required -
🔐 Combined certificate and private key PEM file in TLS contexts
HTTPS certificate contexts now include a combined certificate-with-key PEM file alongside the separate certificate and key files, making it easier for containers and executables to consume TLS credentials without concatenating them manually.
Owner: @danegsta
Changes: #18216
🌍 Community contribution by @@aradalvand -
📋 Third-party dashboard log filtering
Dashboard logs forwarded to the AppHost console are now split into two categories: Aspire's own dashboard logs (e.g., icon resolution warnings) appear at Warning+ severity, while third-party library logs (e.g., Kestrel, ASP.NET Core) are filtered to Error+ only. A single log filter on the ThirdParty prefix silences all background library noise.
Owner: @JamesNK
Changes: #18390 -
🔄 Improved Azure provisioning recovery commands
Azure provisioning recovery is now more actionable. A newcancel-azure-operationresource command cancels in-flight Azure operations from the CLI or dashboard, whilereprovisionanddelete-azure-resourceare highlighted as recovery actions with clearer state tracking (Starting, Deleting, Canceling). Key Vault soft-delete tombstones are automatically purged during reprovision, and ARM deployment state is reconciled from Azure on AppHost restart.
Owner: @davidfowl
Changes: #18269
📝 Documentation required -
🔑 HTTPS certificate support for project resources
ASP.NET project resources can now use Aspire HTTPS certificate configuration without needing their own Kestrel certificate mapping. When a project resource has a TLS endpoint and an HTTPS certificate is configured, the generated PFX path and password are automatically mapped to Kestrel's default certificate environment variables.
Owner: @danegsta
Changes: #18481
📝 Documentation required -
🐞 Improved Go Delve debugger attach workflow
Go resources now default to multi-client Delve mode, so the debugger session persists when a debugger detaches instead of exiting. Typed options for common Delve server flags (including --continue for services that should start running immediately under Delve) are exposed via GoDelveServerAnnotation for C# AppHost configuration.
Owner: @davidfowl
Changes: #18611
Docs: microsoft/aspire.dev#1449
📝 Documentation required
🌍 Community contribution by @@air-hand -
🔄 Updated Foundry hosted agent protocol payload
The Foundry hosted agent deployment protocol payload was updated to the latest Foundry API shape, withprotocol_versionsand container image placed undercontainer_configuration.image. Backward compatibility is preserved: the existingasHostedAgentpolyglot signature retains Responses protocol 2.0.0 defaults, while a newasHostedAgentWithProtocolform supports explicit protocol selection.
Owner: @tommasodotNET
Changes: #18692, #18980
Docs: microsoft/aspire.dev#1475
📝 Documentation required -
🐞 Debugging support for DotnetProjectResource
Applications using the experimental DotnetProjectResource can now be debugged. A new SupportsDebuggingAnnotation is introduced in Aspire.Hosting so resource types can declare debugging support, and the VS Code extension wires this up to enable attaching a debugger to DotnetProjectResource workloads.
Owner: @karolz-ms
Changes: #18729
📝 Documentation required -
🔒 Terminal implementation types made internal
The experimental terminal implementation typesTerminalAnnotation,TerminalHostResource, andTerminalHostLayoutare no longer part of the public API. Terminal configuration remains available throughWithTerminal()andTerminalOptions, which carry theASPIRETERMINAL001experimental diagnostic.
Owner: @sebastienros
Changes: #18978
⚠️ Breaking change
📝 Documentation required -
🖥️ TerminalOptions breaking changes and validation improvements
The misleading TerminalOptions.Shell property (which never had any effect) has been removed from the public API. Additionally, TerminalOptions.Columns and TerminalOptions.Rows now validate that values are positive at AppHost model construction time, preventing silent errors at runtime.
Owner: @mitchdenny
Changes: #18991, #18992
Docs: microsoft/aspire.dev#1478, microsoft/aspire.dev#1479
⚠️ Breaking change
📝 Documentation required -
🔓 Language hosting packages decoupled from Aspire.Hosting internals
Language packages (Dotnet, Go, Python, JavaScript) are now fully decoupled from Aspire.Hosting internals, with InternalsVisibleTo dependencies removed. This enables independent evolution of language packages and opens the door for third-party language support in Aspire.
Owner: @karolz-ms
Changes: #18918
Docs: microsoft/aspire.dev#1511
📝 Documentation required -
🔀 Flexible CLI invocation mode with DNX fallback for AppHosts
AspireUseCliBundle is now opt-in (false by default again), and a new AspireCliInvocationMode=Dnx MSBuild property lets AppHosts force CLI resolution via DNX, which restores and executes the exact Aspire CLI version paired with the AppHost SDK. When opt-in is enabled, the CLI is resolved in order: explicit AspireCliPath, forced DNX, aspire on PATH, then dnx on PATH.
Owner: @DamianEdwards
Changes: #18850
Docs: microsoft/aspire.dev#1512
📝 Documentation required -
🔗 Surfaced ASPIRE010 help link inline in warning text
The ASPIRE010 MSBuild warning now includes its documentation link directly in the console-visible warning text, since MSBuild's HelpLink metadata isn't rendered in terminal output.
Owner: @joperezr
Changes: #19415 -
🚫 Actionable error when publishing DotnetProjectResource
Publishing a DotnetProjectResource, which doesn't yet support publish, now surfaces an actionable error instead of silently failing.
Owner: @karolz-ms
Changes: #19399
Docs: microsoft/aspire.dev#1501
-
🌐 Fix aspire run with .dev.localhost resource service URLs
Fixed aspire run failing for polyglot AppHosts that use *.dev.localhost URLs. The resource service endpoint validation now accepts localhost subdomains in addition to loopback IPs.
Owner: @danegsta
Changes: #17639 -
🔓 Fix TypeScript AppHost async callback deadlock
Fixed a deadlock in TypeScript AppHosts where async callbacks stored in IOptions.Configure were invoked on the StreamJsonRpc non-concurrent dispatcher during BeforeStartEvent, causing the AppHost to hang.
Owner: @IEvangelist
Changes: #17575 -
🔗 Fix proxyless endpoint on-demand allocation
Fixed failures when proxyless container endpoint references were accessed before container creation. Endpoint allocation now uses dependency analysis to distinguish circular or unsafe references from safe lazy ones, so only truly unsafe references trigger early fallback allocation.
Owner: @danegsta
Changes: #17851, #17879 -
🔧 Fix WithBrowserLogs() startup timeout
Fixed a startup reliability issue with WithBrowserLogs() where tracked browser sessions could fail with Browser debug pipe closed errors even when the browser eventually became responsive. The CDP startup command timeout has been increased to accommodate slower browser starts.
Owner: @maddymontaquila
Changes: #18091 -
🔄 DCP reconnection included in request retry loop
Reconnecting to the DCP API server is now part of the DCP request retry loop, protecting against timing issues with missing or partially written DCP kubeconfig files on startup.
Owner: @karolz-ms
Changes: #18121 -
🐛 Fix addParameter error for invalid option combination
Fixed misleading error classification in TypeScript AppHost when addParameter() is called with both secret: true and publishValueAsDefault: true. The invalid option combination now correctly surfaces an INVALID_ARGUMENT error with a clear diagnostic message instead of a confusing TYPE_MISMATCH capability error.
Owner: @ellahathaway
Changes: #18024 -
🐛 Fix Foundry hosted agent deployment with explicit target port
Fixed a deployment failure when Foundry hosted agents were configured with an explicittargetPort(e.g.,.WithHttpEndpoint(targetPort: 9000).AsHostedAgent(...)). The publish path no longer attempts to emit unsupportedTargetPortendpoint metadata for Foundry deployment targets.
Owner: @tommasodotNET
Changes: #17903 -
🔒 Secret parameter values redacted in backchannel snapshots
Secret parameter values marked withsecret: truewere exposed in plaintext through the backchannel API (used byaspire describeand MCP resource tools) when consumed viaWithEnvironment. The AppHost now redacts these values before snapshots leave the host, covering all backchannel consumers.
Owner: @mitchdenny
Changes: #18089
🌍 Community contribution by @@shauryalowkeygotaura -
🔧 Fix ASPIREEXPORT001 false positive with C# 14 extension blocks
The ASPIREEXPORT001 analyzer no longer incorrectly flags [AspireExport]-decorated methods declared inside C# 14 extension blocks as non-static. Developers can now use C# 14 extension block syntax when defining TypeScript AppHost exports without spurious analyzer warnings.
Owner: @sebastienros
Changes: #18292 -
🔒 Thread-safe ResourceAnnotationCollection
ResourceAnnotationCollection is now thread-safe, preventing race conditions when pipeline steps concurrently read and write annotations during publish and deploy operations. Reads are lock-free via snapshot enumeration, while writes are lock-protected.
Owner: @JamesNK
Changes: #18259 -
🐛 Fix terminal resources not connecting in IDE debug sessions
Resources configured with WithTerminal() now always run as a plain process rather than through the IDE debugger, ensuring their terminal sessions connect correctly when debugging. Previously, IDE debug sessions would route terminal-attached resources through IDE execution, which bypasses the PTY bridging required for terminal attachment.
Owner: @mitchdenny
Changes: #18308 -
🔌 Fix port collision when running multiple isolated AppHost instances
When running multiple AppHost instances with --isolated, each instance now binds its resource service endpoint to a random OS-assigned port instead of the fixed port from the launch profile. This prevents 'address already in use' errors when starting a second --isolated instance on the same machine.
Owner: @JamesNK
Changes: #18332 -
🔗 Fix polyglot codegen binding failure on CLI/SDK version skew
Polyglot AppHost code generation (TypeScript, Python, Java, Go, Rust) now succeeds reliably when the Aspire CLI and AppHost SDK are built at different times. The fix freezes the strong-name AssemblyVersion of Aspire.TypeSystem at a stable baseline so the cross-ALC type identity contract is always satisfied regardless of version skew.
Owner: @sebastienros
Changes: #18386 -
🔐 Fix user secrets escaping for special characters
Special characters like&and+in parameter values were incorrectly escaped as Unicode sequences (\u0026,\u002B) when written to user secrets files, corrupting passwords and tokens. Values are now preserved verbatim.
Owner: @JamesNK
Changes: #18431 -
🐛 Fix AzurePromptAgentResource startup crash in run mode
Fixes a runtime crash (InvalidOperationException) when running apps that use AzurePromptAgentResource in run mode. The resource's pipeline step dependency was referencing a provisioning step that was removed earlier in the milestone, causing startup to fail.
Owner: @JamesNK
Changes: #18496 -
🗝️ Fix Key Vault soft-delete conflict during Azure reprovisioning
When a Key Vault is soft-deleted, Aspire now correctly includes implicit Key Vault children (such as those created for PostgreSQL password authentication) during parent resource reprovision, avoiding ARM deleted-state conflicts and surfacing clearer diagnostics.
Owner: @davidfowl
Changes: #18465
📝 Documentation required -
📋 Logs flushed before terminal resource state notifications
When a container or executable resource fails rapidly at startup, its stdout/stderr logs are now flushed to host loggers before the terminal state is reported. This ensures that DistributedApplicationTestingBuilder tests capture failure logs when using WaitForResourceAsync.
Owner: @davidfowl
Changes: #18539
Docs: microsoft/aspire.dev#1435 -
🔧 Fix Kubernetes GetEndpoint using targetPort instead of service port
Fixed a bug where GetEndpoint() on a Kubernetes-published resource with distinct port and targetPort (e.g., WithHttpEndpoint(port: 9002, targetPort: 9000)) returned a URL built from the container targetPort instead of the exposed service port. Ingress and Gateway route rules are also corrected to use the service port.
Owner: @davidfowl
Changes: #18630 -
🐛 Fix false-positive node/npm required-command banners for Bun apps
Fixed false-positive "Required command 'node'/'npm' was not found on PATH" dashboard banners when using AddViteApp().WithBun() or other Bun-based JavaScript apps. Bun handles both install and run, so the node/npm requirements added by the default toolchain are now correctly removed when WithBun() is applied.
Owner: @davidfowl
Changes: #18631 -
🔗 External service URIs accept paths without trailing slash
External service resources and WithReference(Uri) now accept URIs whose absolute path does not end with a slash. Previously, valid references like https://tempuri.org/data.xml were incorrectly rejected.
Owner: @karolz-ms
Changes: #18745
🌍 Community contribution by @@afscrome -
🕒 Fixed DCP monitor timestamp serialization
Container and executable resources with parent-process lifetime could fail to start on Linux because DCP rejected boot-relative monitor timestamps that didn't match the six-digit MicroTime format it requires. Monitor timestamps are now always serialized with fixed-width fractional seconds.
Owner: @danegsta
Changes: #18798 -
🔐 Fixed Vite HTTPS config wrapper path in hoisted node_modules
The generated Vite HTTPS config wrapper is now written under the app's nearest node_modules directory instead of node_modules/.bin, fixing failures in Yarn or npm workspace monorepos where dependencies are hoisted and .bin may not exist.
Owner: @danegsta
Changes: #15857 -
🔧 Fix disabled argument validation for interactive resource commands
Interactive resource commands with disabled dynamic inputs no longer fail with "Argument is disabled." when arguments are accepted via an interactive prompt.
Owner: @JamesNK
Changes: #18889 -
🐛 Fix resource wait skipping for custom resources
Fixed a bug where the wait behavior for custom resources was sometimes skipped entirely, allowing resources to start before their dependencies were ready.
Owner: @karolz-ms
Changes: #18930 -
⏱️ No timeout on long-running HTTP commands
HTTP resource commands no longer fail after 100 seconds due to the default HttpClient timeout. Commands invoked without a named HTTP client now run until they complete or the command cancellation token is cancelled.
Owner: @JamesNK
Changes: #18986
Docs: microsoft/aspire.dev#1515 -
🔁 Fix duplicate resource update notifications
Fixed the app model repeatedly emitting object update notifications for resources that hadn't actually changed, reducing unnecessary churn in resource state processing.
Owner: @karolz-ms
Changes: #18952 -
👻 Fix ghost dev tunnel conflicts
Dev tunnel startup no longer gets stuck retrying a create/update sequence when the tunnel service has a ghost record for a deterministic tunnel ID. Aspire now stops after one attempt and reports an actionable error telling you how to select a fresh explicit tunnel ID.
Owner: @DamianEdwards
Changes: #18912
🌍 Community contribution by @@krubenok -
🌍 Fix DevTunnelRegion member naming
Renamed DevTunnelRegion.UkSouth to UKSouth and SouthEastAsia to SoutheastAsia to align with .NET naming conventions, and removed the explicit byte underlying type. Update any code referencing the old member names.
Owner: @sebastienros
Changes: #19060
⚠️ Breaking change
📝 Documentation required -
🚫 Fix progress command cancellation handling
Canceling a dashboard progress command now stays a cancellation all the way through IInteractionService and resource command execution, instead of surfacing as a success or failure. This applies to every command using CommandProgressOptions, including WithHttpCommand and Foundry prompt-agent send-message commands.
Owner: @JamesNK
Changes: #18600 -
🔄 Fix missed updates for recreated resources during local run
Local runs now correctly recognize DCP resources that were deleted and recreated while the watch connection was disconnected, so late console-log subscribers keep receiving logs for the replacement resource instead of missing updates. A follow-up fix further improves handling of log deduplication for recreated resources.
Owner: @karolz-ms
Changes: #19199, #19240 -
🐛 Separate regular arguments from launch tool ("entrypoint") arguments
Fixed WithDebugSupport's argsCallback incorrectly subtracting the tool entrypoint (e.g.go run,python -m) via an ordinary WithArgs callback, which only worked when registered in a specific order and left the app model IDE-only. Regular arguments are now separated from launch tool (entrypoint) arguments.
Owner: @karolz-ms
Changes: #19234
Docs: microsoft/aspire.dev#1458
📝 Documentation required -
🔌 Fix persistent resources using port 0 (auto-allocated)
Fixed persistent resources configured with port 0 (meaning "automatically allocate a port") being incorrectly treated as if a specific port had been prescribed by the app host code, which could prevent proper port allocation.
Owner: @karolz-ms
Changes: #19218 -
⏱️ Fixed hang when waiting on a nonexistent resource
WaitForResourceHealthyAsyncwithWaitBehavior.StopOnResourceUnavailablenow fails immediately when the named resource is missing from the application model, instead of hanging indefinitely waiting for events that would never arrive.
Owner: @mitchdenny
Changes: #19260
🌍 Community contribution by @@rsd-darshan -
🚀 Fixed custom IDE project launch argument handling
Fixed a regression where custom IDE project launches (e.g., Azure Functions) combining launch-profile arguments with AppHost arguments received an invalid--separator meant only fordotnet run/dotnet watch, producing malformed commands. Custom launchers now receive their arguments directly, and Aspire no longer attempts an invalid Process fallback when no runnable process invocation was prepared.
Owner: @karolz-ms
Changes: #19348
6 new features, 33 improvements, 37 bug fixes
-
📦 Embedded Aspire skills bundle fallback
The Aspire skills bundle is now embedded in the CLI as a reliable fallback. When GitHub release asset acquisition is unavailable, the CLI uses the embedded bundle and shows a non-fatal warning instead of failing the entire command.
Owner: @IEvangelist
Changes: #17537, #17547
Docs: microsoft/aspire.dev#1137
📝 Documentation required -
📦 Aspire CLI available via npm
The Aspire CLI is now available as an npm package (@microsoft/aspire-cli), providing an alternative installation method. The npm package README includes install, verify, update, and troubleshooting guidance, a postinstall check warns when the matching native platform package is missing, and the README now also includes a link to the official CLI release notes.
Owner: @adamint
Changes: #17297, #18455, #18606
Docs: microsoft/aspire.dev#1239, microsoft/aspire.dev#1243, microsoft/aspire.dev#1252
📝 Documentation required -
🐧 Aspire CLI available via Nix
NixOS and Nix users can now install and run the official Aspire CLI directly from the first-party Nix flake without building from source. Usenix run github:microsoft/aspire#aspire-clito run the CLI, or add it to a dev shell via the flake's package output or overlay.
Owner: @davidfowl
Changes: #18410
Docs: microsoft/aspire.dev#1286
📝 Documentation required -
🔄
aspire update --migratefor TypeScript AppHost format
Theaspire updatecommand now supports a--migrateflag that detects and automatically upgrades legacyapphost.tsTypeScript AppHosts to the newerapphost.mtsformat. A warning is shown when running other CLI commands against an unmigrated project. The migration system is pluggable so future format migrations can be added without new commands.
Owner: @sebastienros
Changes: #18294
📝 Documentation required -
🔭 AI agent skill-usage telemetry
Runningaspire agent initnow installs telemetry hook scripts that record AI skill and MCP tool usage through the CLI telemetry pipeline. Opt out at any time by setting theASPIRE_CLI_TELEMETRY_OPTOUTenvironment variable.
Owner: @IEvangelist
Changes: #18009
Docs: microsoft/aspire.dev#1229
📝 Documentation required -
🧹 aspire stop --force cleans up persistent resources
The newaspire stop --forcecommand cleans up persistent DCP resources for an AppHost without relaunching it, letting developers fully tear down all persistent container resources in a single step.
Owner: @danegsta
Changes: #18718
Docs: microsoft/aspire.dev#1387
📝 Documentation required
-
🎨 Improved aspire agent init install output
The aspire agent init command now collects updated skill/location pairs and prints one compact summary instead of repeating a success line for every skill at every install target.
Owner: @IEvangelist
Changes: #17519 -
🔍 Enriched AppHost codegen TypeLoadException diagnostics
When AppHost code generation fails due to a TypeLoadException (typically caused by a version mismatch between the CLI and the user project), the CLI now provides enriched diagnostic output to help identify the cause.
Owner: @IEvangelist
Changes: #17262
Docs: microsoft/aspire.dev#1101, microsoft/aspire.dev#1103
📝 Documentation required -
🔎 Updated --search option help text
The --search option in aspire logs and telemetry commands now includes a link to aka.ms/aspire/cli-search and clarifies support for both full-text search and field filters.
Owner: @JamesNK
Changes: #17544
Docs: microsoft/aspire.dev#948, microsoft/aspire.dev#1081, microsoft/aspire.dev#1121 -
🗑️ aspire ps --resources flag removed
The --resources flag (and --include-hidden) has been removed from aspire ps, which now focuses on AppHost-level summaries. Use aspire describe to stream detailed resource data.
Owner: @mitchdenny
Changes: #17479
Docs: microsoft/aspire.dev#1155, microsoft/aspire.dev#1166
⚠️ Breaking change
📝 Documentation required -
📚 Aspire skills catalog loaded from bundle manifest
The aspire agent init skill catalog is now loaded dynamically from the bundle manifest instead of being hardcoded to three skills. All skills published in the microsoft/aspire-skills bundle are now discoverable by the CLI.
Owner: @IEvangelist
Changes: #17553
Docs: microsoft/aspire.dev#1077
📝 Documentation required -
🔀 dotnet run delegates to aspire run for bundled AppHosts
When AspireUseCliBundle is enabled, running dotnet run on an AppHost project automatically delegates to aspire run, using bundled CLI behavior consistently. Requires Aspire CLI 13.5 or later; dotnet run falls back to normal behavior when the CLI is older or unavailable.
Owner: @davidfowl
Changes: #17748, #18360
📝 Documentation required -
🤖 CLI detects coding agent environment in telemetry
The Aspire CLI now detects known coding agent environments (such as GitHub Copilot, Cursor, and others) and records the detected agent name in CLI telemetry. This helps the team understand usage patterns when the CLI is invoked from AI-assisted workflows.
Owner: @DamianEdwards
Changes: #18065, #18094
Docs: microsoft/aspire.dev#1242 -
⚡ Faster TypeScript AppHost startup
TypeScript AppHost startup no longer waits a fixed delay before the CLI attempts to connect. The CLI now races the RPC connection retry loop against process exit, reducing the time from aspire run to an active AppHost.
Owner: @davidfowl
Changes: #18075 -
🛠️ Actionable AppHost/CLI version mismatch errors
Version mismatch errors between the AppHost and CLI now specify which side is out of date and include the exact update command to run, replacing the previous generic incompatibility message. The error display was also updated to use an aligned grid with consistent lowercase labels for better readability.
Owner: @JamesNK
Changes: #18067, #18139
🌍 Community contribution by @@shauryalowkeygotaura -
🚫 Resources excluded from MCP tools by ExcludeFromMcp property
Resources marked with the ExcludeFromMcp property are now filtered from all CLI MCP tool results, including resource listings, console logs, structured logs, traces, and command execution.
Owner: @JamesNK
Changes: #18106
📝 Documentation required -
🛠️ --skills and --skill-locations flags for init and new commands
The aspire init, aspire new, and aspire agent init commands now accept --skills and --skill-locations flags to control which agent skills are installed during initialization. These flags support non-interactive mode, allowing use in scripts and CI environments without interactive prompts.
Owner: @JamesNK
Changes: #18191, #18192
Docs: microsoft/aspire.dev#1348
📝 Documentation required
🌍 Community contribution by @@nanookclaw -
🧹 No nuget.config generated for stable channel projects
When creating or updating projects using aspire new or aspire update with the stable channel, a project-level nuget.config is no longer generated since it only maps to nuget.org (the default NuGet source). Existing nuget.config files are still cleaned up to remove stale feed entries.
Owner: @JamesNK
Changes: #18211
📝 Documentation required -
✅ Strict SemVer validation for Playwright CLI version override
Specifying an invalid version string (such as a range like >=1.0.0, a dist-tag like 'latest', or a non-strict SemVer string) for the Playwright CLI version override configuration now fails with a clear, actionable error message instead of a confusing npm resolve failure.
Owner: @mitchdenny
Changes: #18225 -
🩺 aspire doctor detects legacy settings files
The aspire doctor command now detects workspaces that have a legacy .aspire/settings.json without a sibling aspire.config.json. When found, it surfaces a warning hint directing users to run aspire init (or any aspire run/add/update command) to trigger automatic migration to the current configuration format.
Owner: @ellahathaway
Changes: #17934 -
🏷️ Runtime CLI identity resolution
The Aspire CLI's channel, version, and commit identity is now resolved at runtime rather than baked into the binary at build time. Identity can be overridden via environment variables (ASPIRE_CLI_CHANNEL, ASPIRE_CLI_VERSION, ASPIRE_CLI_COMMIT, ASPIRE_CLI_NUGET_SERVICE_INDEX, ASPIRE_CLI_PACKAGES) or an .aspire-install.json sidecar file, enabling accurate staging and stable behavior testing in pre-release environments.
Owner: @mitchdenny
Changes: #18087
📝 Documentation required -
🖥️ OS information in aspire doctor
Theaspire doctorcommand now reports the current operating system, including the OS version and, on Linux, the distro name from/etc/os-release. This information appears in both human-readable and structured JSON (--format json) output.
Owner: @danegsta
Changes: #18252
Docs: microsoft/aspire.dev#1267
📝 Documentation required -
🔍 Improved docs search relevance
Theaspire docs searchcommand now returns significantly more accurate results by normalizing query and document text consistently, applying inverse document frequency weighting, and rewarding phrase matches in titles, headings, and summaries over incidental body mentions. Benchmarks showed Top 1 accuracy improving from 31.5% to 86.5% on real aspire.dev content.
Owner: @davidfowl
Changes: #18074 -
🔗 DCP connection health check in aspire doctor
Theaspire doctorcommand now validates connectivity to the bundled Developer Control Plane (DCP), catching HTTPS trust problems—such as untrusted or expired certificates—before an AppHost is involved. The check covers both DCP-managed ephemeral certificate mode and ASP.NET Core developer certificate mode.
Owner: @danegsta
Changes: #18255 -
🖼️ Aspire CLI displays application icon on Windows
Theaspire.exeandaspire-managed.exeprocesses now display the Aspire application icon in Windows Task Manager, File Explorer, and other shell surfaces.
Owner: @JamesNK
Changes: #18303 -
🔤 Clear error for miscased CLI options
The Aspire CLI now detects when a command option is typed with the wrong case (e.g., --AppHost instead of --apphost) and returns a clear error with the correct spelling, rather than silently ignoring the option.
Owner: @JamesNK
Changes: #18393 -
🛑 Unified graceful shutdown for aspire run
Theaspire runcommand now uses a unified graceful shutdown sequence for all AppHost types (C# and TypeScript/JavaScript). On Windows, child processes are launched in an isolated console with proper Ctrl+C propagation to avoid signal inheritance issues with wrapper processes like tsx and npm. This makes shutdown reliable and consistent withaspire start/aspire stopon all platforms.
Owner: @danegsta
Changes: #17814
Docs: microsoft/aspire.dev#1291
📝 Documentation required -
⚡ Faster AppHost discovery in large repositories
AppHost discovery (used byaspire ls,aspire run, and other commands) is significantly faster in large repositories. A lightweight XML pre-filter now skips full MSBuild evaluation for projects that clearly are not AppHosts, reducing cold discovery time. The pre-filter also correctly recognizes ancestor Directory.Build.* files, SDK-style imports, and MSBuild walk-up imports as AppHost markers.
Owner: @ellahathaway
Changes: #18436, #18555 -
⚡ CLI telemetry tag calculation no longer blocks startup
Default telemetry tags (machine ID, OS info, version, identity) are now computed asynchronously in the background rather than blocking CLI startup. Tags are applied to telemetry spans at export time, improving how quickly the CLI becomes responsive after launch.
Owner: @JamesNK
Changes: #18454 -
🔍
aspire addfilters to polyglot-compatible integrations
aspire addandaspire integration list/searchnow filter results to show only integrations compatible with the active AppHost language. Polyglot AppHost users (TypeScript, Python, Go, Java, Rust) no longer see C#-only packages they cannot wire up.
Owner: @sebastienros
Changes: #18293
Docs: microsoft/aspire.dev#1457
📝 Documentation required -
💬 Clearer AppHost backchannel connection error messages
When the AppHost process exits before the CLI can establish a backchannel connection, the error message now includes the exit code and uses clearer wording, removing the previously redundant phrasing. This makes it easier to diagnose AppHost startup failures.
Owner: @JamesNK
Changes: #18051
🌍 Community contribution by @@mehara-rothila -
🔒 Linux certificate cleanup handles missing NSS tools gracefully
On Linux,aspire certs cleannow completes successfully even whencertutilis unavailable, treating NSS database cleanup as best-effort rather than a hard failure.aspire doctoralso reports a warning whencertutilis missing, suggesting installation of the distribution's NSS tools package (e.g.,libnss3-tools) for full browser certificate trust.
Owner: @danegsta
Changes: #18580
Docs: microsoft/aspire.dev#1436 -
🩺 aspire doctor recommends VS Code extension
Theaspire doctorcommand now detects when VS Code is present but the Aspire VS Code extension is not installed, and surfaces a warning with a Marketplace link. When the extension is already installed it reports a pass; when VS Code is not detected at all the check stays silent.
Owner: @ellahathaway
Changes: #18624
Docs: microsoft/aspire.dev#1440
📝 Documentation required -
🔄 dotnet-inspect AI skill stays current across releases
The dotnet-inspect skill bundled with the Aspire CLI is now a thin bootstrapper that delegates to the installed tool's own skill guide. AI-assisted inspection guidance is always current and reflects the installed dotnet-inspect version rather than being frozen at the CLI release.
Owner: @JamesNK
Changes: #18723
🌍 Community contribution by @@richlander -
🔒 Improved Linux dev certificate trust handling
On Linux, Aspire now preserves system certificate roots when configuring SSL_CERT_DIR for local project and executable resources. Previously, Aspire could overwrite SSL_CERT_DIR with only its own generated certificate directory, causing outbound HTTPS requests to fail by losing OpenSSL's implicit system trust anchors.
Owner: @danegsta
Changes: #18851
Docs: microsoft/aspire.dev#1446 -
⏱️ Timeouts for aspire doctor checks
aspire doctornow bounds each environment check to 30 seconds and the entire check aggregate to 2 minutes. Previously a blocked check or installation discovery could cause the command to hang indefinitely.
Owner: @JamesNK
Changes: #18969
Docs: microsoft/aspire.dev#1472 -
⚡ CLI package metadata prefetching made opt-in
CLI commands no longer prefetch NuGet package metadata by default. Prefetching is now opt-in for commands that actually need it, reducing unnecessary network requests and improving startup time for commands that do not consume package metadata.
Owner: @JamesNK
Changes: #18968 -
⏳ Show bundle preparation status in aspire dashboard run
Whenaspire dashboard runtakes longer than 200 ms to prepare or extract the dashboard bundle, the CLI now displays aPreparing dashboard bits...status message instead of appearing idle.
Owner: @JamesNK
Changes: #18985
Docs: microsoft/aspire.dev#1508 -
🔒 Aspire Skills bundle integrity checks use SHA-512
The Aspire Skills bundle's archive integrity checks now use SHA-512, aligning it with the digest already used by the CLI acquisition scripts. The experimental remote-fetch preview toggle is also hidden from aspire config output and generated VS Code schemas.
Owner: @IEvangelist
Changes: #19448
-
🔒 Fix Aspire skills attestation verification
Fixed a bug where aspire agent init failed to install the Aspire skills bundle because the attestation verifier used a stale SLSA build type URL. The verifier now accepts the current GitHub Actions build type URL.
Owner: @IEvangelist
Changes: #17521 -
💬 Friendly error for aspire do --list-steps without a step
Running aspire do --list-steps without specifying a step now gives a clear validation error instead of launching the AppHost and crashing with an obscure exception.
Owner: @mitchdenny
Changes: #17535
Docs: microsoft/aspire.dev#1091
📝 Documentation required -
🐛 Fix aspire stop false failure on Unix
Fixed a bug where aspire stop falsely reported failure on Unix because the AppHost process was orphaned during the shutdown cascade instead of being properly reaped.
Owner: @danegsta
Changes: #17612 -
🛑 Fix CLI Ctrl+C/SIGTERM shutdown responsiveness
Multiple CLI shutdown improvements: fixed Ctrl+C responsiveness during AppHost startup, fixed a double-signal bug causing immediate force-kill, and added an immediate "Stopping Aspire..." message after 200ms when shutdown is in progress.
Owner: @JamesNK
Changes: #17588, #17652
Docs: microsoft/aspire.dev#1353 -
🔧 Fix localhive.sh CLI install with subdirectories
Fixed localhive.sh CLI installation failing when the publish output contains subdirectories such as culture-specific resource folders. The script now uses cp -r to correctly copy all files and directories.
Owner: @sebastienros
Changes: #17670
Docs: microsoft/aspire.dev#1128 -
📋 Fix aspire ls discovery and settings bugs
Fixed five bugs in aspire ls related to the settings discovery pipeline: settings.json compatibility, aspire.config.json handling, parallel discovery races, macOS symlink resolution, and discovery path normalization.
Owner: @adamint
Changes: #17631 -
🐛 Fix duplicate profiles block in empty AppHost template
Fixed a bug where the empty C# AppHost template generated an aspire.config.json with a duplicated profiles block.
Owner: @mitchdenny
Changes: #17781
Docs: microsoft/aspire.dev#1176 -
🔨 TypeScript AppHosts honor --no-build
TypeScript AppHosts now correctly skip the TypeScript compilation check (tsc --noEmit) when the --no-build flag is passed, so developers can skip all build steps consistently.
Owner: @davidfowl
Changes: #17994 -
🧹 Fix stale backchannel sockets blocking CLI commands
Stale AppHost backchannel socket files left behind by exited processes no longer block CLI commands likeaspire add. The CLI now automatically prunes orphaned PID-qualified sockets before probing, preventing spurious connection errors.
Owner: @davidfowl
Changes: #18038 -
⏱️ Fix CLI orphan detector process start time comparison
The CLI orphan detector now correctly compares process start times near second boundaries, preventing false PID-reuse exclusions that could cause orphaned processes to linger between CLI sessions.
Owner: @JamesNK
Changes: #18136 -
🐛 Fix non-interactive self-update channel selection
Runningaspire update --self --non-interactivenow correctly auto-detects the update channel from the CLI's current identity, fixing a failure when--channelis not specified.
Owner: @JamesNK
Changes: #17512
🌍 Community contribution by @@alirezafzali -
🔧 Fix false version-skew warning during aspire update
Fixes a false positive version-mismatch warning that appeared duringaspire update. The in-memory configuration was already updated to the CLI's current version but had not yet been flushed to disk, causing an incorrect version-skew warning to be shown to users.
Owner: @JamesNK
Changes: #18208 -
📐 Fix aspire doctor text wrapping
Fixes text alignment in theaspire doctoroutput so that long messages wrap correctly, aligning continuation lines with the message text rather than indenting under the emoji icon.
Owner: @JamesNK
Changes: #18257 -
🐛 Fix AppHost selection error in non-interactive mode
Non-interactive CLI commands such asaspire describenow return a clear, actionable error message instead of crashing when AppHost selection is ambiguous and an interactive prompt is unavailable.
Owner: @mitchdenny
Changes: #18297 -
🔗 Fix --apphost commands with symlinked paths
aspire describe --apphost and other commands that accept --apphost now correctly resolve symlinked paths when locating the running AppHost backchannel socket, preventing spurious "No AppHost is currently running" errors on macOS (/tmp → /private/tmp) and other systems with symlinked workspaces.
Owner: @mitchdenny
Changes: #18298 -
🔖 Restore commit SHA in aspire --version output
The aspire --version command now again shows the commit SHA alongside the version number (e.g., 13.4.5+73114e86c64...), which was unintentionally lost during the identity sidecar refactoring.
Owner: @mitchdenny
Changes: #18315 -
📤 Fix aspire resource command polluting stdout
Status messages from theaspire resourcecommand are now routed to stderr instead of stdout, allowing JSON output to be piped cleanly to tools likejq.
Owner: @JamesNK
Changes: #18395 -
🔧 Fix NuGet package source mapping overwrite during aspire update
When runningaspire update, the NuGet config merger no longer incorrectly adds a wildcard (*) pattern to user-defined package sources that already have specific patterns configured, preventing unintended overwriting of custom source mappings.
Owner: @JamesNK
Changes: #18394 -
🧹 Fix stale socket file after aspire stop
The Aspire CLI now deletes the backchannel socket file whenaspire stopterminates an AppHost, preventing subsequent commands likeaspire addfrom failing with connection timeouts when trying to reconnect to the stopped process.
Owner: @mitchdenny
Changes: #18296
Docs: microsoft/aspire.dev#1283 -
🔕 Fix spurious backchannel error logging in aspire run
Fixed spurious error-level logging whenaspire runends normally — a race condition causedConnectionLostExceptionandFailedToConnectBackchannelConnectionerrors to surface as warnings instead of being silently treated as expected disconnects.
Owner: @JamesNK
Changes: #18487 -
🔍 Fix agent skill snippets incorrectly listed as AppHosts
The CLI's aspire ls command and the VS Code extension no longer mistakenly list .agents/skills/** code snippets as runnable AppHosts. The CLI now skips the .agents directory during default discovery, and the extension applies the same exclusion across all AppHost candidate sources.
Owner: @ellahathaway
Changes: #18407
Docs: microsoft/aspire.dev#1433 -
🧹 Fix Aspire-managed process leaks
Fixes multiple process-leak scenarios: adds PID+start-time validation to RemoteHost orphan detection to prevent false positives from PID reuse, adds orphan detection to the dashboard and nuget commands, prevents detached processes from surviving a SIGKILL of the launcher, and actively reaps already-leaked orphaned processes.
Owner: @karolz-ms
Changes: #18566
Docs: microsoft/aspire.dev#1439 -
🔍 Fix CLI project discovery regression
Fixed a regression in the Aspire CLI where project discovery incorrectly stopped searching parent directories for AppHost projects when encountering certain workspace configuration files.
Owner: @JamesNK
Changes: #18700 -
🎨 Fix CLI text wrapping for long file paths
Fixed incorrect text wrapping when rendering long file paths (e.g. log file names) at narrow terminal widths by updating Spectre.Console to 0.57.2.
Owner: @JamesNK
Changes: #18705 -
🧬 Fixed detached CLI launches being killed with the launcher process group on Unix
aspire start detached launches on Linux and macOS now start the child CLI and AppHost in a fresh process group/session using DCP's fork-process helper, so the detached app survives cleanup of the original launcher's process group instead of being torn down with it.
Owner: @danegsta
Changes: #18678 -
🛑 Fix duplicate shutdown message for aspire dashboard run
Stopping the standalone dashboard with Ctrl+C previously displayed two shutdown messages. The CLI now emits a single, correctly punctuated shutdown line.
Owner: @JamesNK
Changes: #18827
Docs: microsoft/aspire.dev#1445 -
🔄 Fix transient bundle file lock errors on Windows
CLI bundle promotion on Windows now retries when antivirus or indexing software temporarily locks freshly extracted files, preventing spurious access-denied errors during bundle updates.
Owner: @danegsta
Changes: #18839 -
🔧 Fix NuGet search helper process leak in CLI read-only commands
Fixes a process leak whereaspire lsandaspire psaccumulated orphaned NuGet search helper processes that were never awaited or cancelled, causing lock file buildup under$TMPDIR/NuGetScratch/lockand potentialdotnet restoredeadlocks. Read-only commands now opt out of unnecessary prefetching, and the prefetch service correctly awaits task completion before shutdown.
Owner: @JamesNK
Changes: #18958
🌍 Community contribution by @@Arasz -
🐛 Improved error when guest AppHost exit code is unavailable
When the CLI loses the guest AppHost backchannel before the exit code is available, it no longer reports a misleading synthetic exit code -1 and instead shows a clearer error message.
Owner: @adamint
Changes: #18597 -
🔍 Gate polyglot integration filtering behind an off-by-default feature flag
Fixedaspire add,aspire integration list, andaspire integration searchreturning no results in polyglot (non-C#) AppHosts because the polyglot compatibility filter relied ontags:polyglotNuGet queries that remote feeds don't answer reliably. The filter is now gated behind an off-by-defaultfeatures.polyglotIntegrationFilterEnabledflag.
Owner: @mitchdenny
Changes: #19233
📝 Documentation required -
🩺 Fixed dotnet path resolution in doctor checks
aspire doctornow resolves thedotnetexecutable through the same PATH lookup used elsewhere before launching the SDK and deprecated-workload checks, so results are consistent instead of relying on an unresolved baredotnetinvocation.
Owner: @JamesNK
Changes: #19263 -
🧹 Suppressed CLI progress rendering during console logging
CLI progress spinners and cursor updates no longer interleave with diagnostic logs when console logging is enabled (e.g.aspire doctor -l trace), so timestamps and log lines stay clean and unshifted.
Owner: @JamesNK
Changes: #19256 -
🔐 TypeScript AppHost trusts the dev certificate
TypeScript AppHosts could not validate Aspire-managed development certificates when opening TLS connections to resources in run mode. The trusted development certificate is now exported into a content-addressed PEM cache and wired into the TypeScript runtime's certificate bundle, preserving any existingNODE_EXTRA_CA_CERTSvalue.
Owner: @danegsta
Changes: #19365 -
📦 Fixed Aspire CLI bundle resolution on fresh installs
Fresh Aspire CLI installations withAspireUseCliBundle=truecould fail to build or launch because the embedded CLI bundle hadn't been extracted yet, leaving the AppHost without DCP or dashboard metadata. AppHost builds and installers now ensure the bundle is resolved before launch, and setup failures now produce actionable diagnostics instead of a metadata-free AppHost.
Owner: @karolz-ms
Changes: #19364
Docs: microsoft/aspire.dev#1496 -
🌐 Honor --source during template discovery
Fixedaspire new --sourceignoring the explicit source during template discovery and installation, which could cause NuGet.org traffic in restricted enterprise environments where it is blocked.
Owner: @adamint
Changes: #19378 -
📦 Fixed npm registry hard-coded to internal feed
aspire agent init, generated JavaScript Dockerfiles, and shipped starter templates now default to the public npm registry again instead of an internal Azure Artifacts mirror, fixing install failures caused by the mirror returning 401 for uncached transitive dependencies. The Dockerfile registry remains overridable via --build-arg NPM_REGISTRY.
Owner: @IEvangelist
Changes: #19417 -
🧭 Fixed mixed-quality staging package discovery for polyglot AppHosts
On stable-shaped staging CLI builds, TypeScript (and other polyglot) AppHosts can now discover build-matched prerelease-only integrations, such as Azure Kubernetes, from the same SHA-specific feed that C# AppHosts already used. Previously those integrations were filtered out and unavailable via aspire add for TypeScript AppHosts.
Owner: @mitchdenny
Changes: #19427
Docs: microsoft/aspire.dev#1505
3 new features, 20 improvements, 30 bug fixes
-
🕐 Timestamp filter for telemetry
You can now filter telemetry logs and traces by timestamp using a dedicated timestamp search qualifier in the Aspire Dashboard filter dialog.
Owner: @JamesNK
Changes: #17816
Docs: microsoft/aspire.dev#1181
📝 Documentation required -
🔁 Dashboard reconnects gracefully on resource service disconnect
When the gRPC connection between the dashboard and AppHost resource service is lost, the dashboard now shows a reconnect modal with a status message and animation. After 5 failed retry attempts, a Reconnect now button appears so users can trigger an immediate reconnect.
Owner: @JamesNK
Changes: #18111
📝 Documentation required -
🔎 Text filter for console logs
A search box on the Console Logs page filters displayed log lines by case-insensitive substring match, making it easier to find relevant output in noisy log streams.
Owner: @ellahathaway
Changes: #18565
📝 Documentation required
-
📋 Dashboard startup log formatting improvements
Dashboard startup log output now uses indented bullet formatting for URLs and emits the container access warning as a separate log entry. The legacy login URL line is also restored so dotnet watch can detect AppHost readiness and auto-launch the browser.
Owner: @JamesNK
Changes: #17595, #17610 -
🔢 Equality operators in numeric telemetry filter
The telemetry filter dialog now includes == and != operators for numeric fields, making it easier to filter for exact values in logs and traces.
Owner: @ellahathaway
Changes: #17708 -
🔍 Text visualizer hides markdown option for structured data
The TextVisualizerDialog now disables the markdown format option when content is detected as JSON or XML, preventing users from selecting a display mode that is not meaningful for structured data.
Owner: @JamesNK
Changes: #17970 -
♿ Mobile navigation and Help dialog accessibility improvements
The dashboard mobile navigation now shows a visible checkmark for the active page and stays within the viewport at high zoom levels. The Help dialog keyboard shortcuts now use semantic term/definition pairs for improved screen reader compatibility.
Owner: @adamint
Changes: #17927 -
🔗 Troubleshooting links in dashboard connection error logs
Dashboard connection error logs now include a troubleshooting link when the dashboard fails to connect to the AppHost resource service, helping users quickly find the relevant documentation.
Owner: @JamesNK
Changes: #18194
Docs: microsoft/aspire.dev#1255 -
♿ Improved dashboard dialog and control accessibility
Dashboard dialogs now return focus to the launcher element after closing, improving keyboard navigation. Assistant feedback buttons now expose an aria-pressed state, the Text Visualizer format picker uses a proper select control with disabled unavailable options, and console resource prefix colors meet WCAG AA contrast requirements in both light and dark themes.
Owner: @adamint
Changes: #17929 -
🏷️ Rename 'Export JSON' action to 'View JSON' in Dashboard
The resource action menu item previously labeled 'Export JSON' is now called 'View JSON', accurately reflecting that it opens a text visualizer rather than downloading a file. The sensitive value confirmation message is also clarified to indicate it is scoped to the current browser.
Owner: @JamesNK
Changes: #18107
🌍 Community contribution by @@nanookclaw -
🏷️ Interactive filter tags on metrics charts
Filter value tags on the metrics page are now clickable — clicking a tag immediately applies or removes that filter. Clicking the overflow (+N) badge opens the filter popover directly. Tags are ordered numerically when all values parse as numbers, otherwise alphabetically.
Owner: @JamesNK
Changes: #18199, #18382
🌍 Community contribution by @@inlineHamed -
🧹 Parameters hidden from resource graph view
Parameters are now hidden from the Dashboard's Graph view and the resource type filter. Parameters have their own dedicated Parameters tab, so excluding them from the graph reduces visual clutter and makes resource dependency relationships easier to read.
Owner: @JamesNK
Changes: #18313 -
⌨️ Keyboard navigation for dashboard scroll areas
Dashboard pages now support keyboard navigation (Home, End, PgUp, PgDown) for scrolling through resources, logs, traces, and console output. Previously, users had to click into the scroll area first before keyboard shortcuts would work.
Owner: @JamesNK
Changes: #18256 -
🔀 Console/Terminal view toggle in ConsoleLogs page
The ConsoleLogs page now shows a Console logs / Terminal toggle in the toolbar options menu for resources with WithTerminal(). Previously, selecting a terminal resource would immediately switch to the terminal frame, hiding any console log output such as startup messages and wait-for dependencies.
Owner: @mitchdenny
Changes: #18574
Docs: microsoft/aspire.dev#1438 -
🌐 Localized file upload error messages in Interactions dialog
File upload error messages in the Interactions dialog (exceeds maximum size, upload failed) are now localized using the standard string localizer, consistent with the rest of the dialog.
Owner: @radical
Changes: #18665 -
🔔 Dashboard shows unsupported version notice
When an AppHost requires a newer Aspire dashboard version than the one currently running, the dashboard now shows a clear modal notice with upgrade guidance instead of silently waiting.
Owner: @JamesNK
Changes: #18679 -
🗑️ AI Assistant chat removed from dashboard
The AI Assistant chat feature has been removed from the dashboard, including AssistantChat, AssistantModalDialog, AssistantSidebarDialog, ExplainErrorsButton, and "Ask GitHub Copilot" context menu items. The GenAI visualizer and AI Agents dialog remain unaffected.
Owner: @JamesNK
Changes: #18726
Docs: microsoft/aspire.dev#1442
⚠️ Breaking change
📝 Documentation required -
♿ Accessible name for Markdown copy button
The copy button on Markdown code blocks in the AI Agents dialog now has an accessible name ('Copy to clipboard'), allowing screen readers to announce it correctly instead of just 'button'.
Owner: @adamint
Changes: #18816 -
🖥️ Terminal view default for live terminal resources
When navigating to Console logs for a running resource with WithTerminal(), the dashboard now defaults to the Terminal view instead of the Console view, making the interactive terminal immediately visible for live resources.
Owner: @mitchdenny
Changes: #18867
Docs: microsoft/aspire.dev#1447 -
🤖 Improved AI agent observability messaging
Updated AI agents dialog text to better explain that coding agents use the same observability information visible in the dashboard. The AppHost mode dialog now includes a Getting started section to make CLI setup steps easier to find.
Owner: @JamesNK
Changes: #18868, #19042 -
🎨 Dashboard design-token system and visual refresh
The Aspire Dashboard received a major visual refresh including a CSS design-token system for consistent colors, spacing, and typography, a Geist font update, UX polish across multiple pages, and accessibility fixes: focus rings on Fluent text inputs, corrected scroll control viewport behavior, and WCAG AA contrast for syntax colors and accent button states.
Owner: @IEvangelist
Changes: #18943, #19027 -
⚡ Lazy dashboard menu initialization
Dashboard action menus now initialize lazily on first open rather than all at once on page load, reducing component construction and JavaScript overhead when many menu buttons are displayed.
Owner: @JamesNK
Changes: #18989 -
🎨 Official Aspire branding in the dashboard
The dashboard now uses the official Aspire brand palette and current logo artwork in both light and dark themes, replacing drifted accent colors while preserving WCAG AA contrast.
Owner: @maddymontaquila
Changes: #19281
-
🔄 Fix telemetry streaming with resource filter
Fixed a bug where streaming telemetry (spans/logs) with a resource filter would return empty immediately if the resource had not yet emitted any telemetry. The stream now waits for the resource to appear before returning results.
Owner: @JamesNK
Changes: #17821 -
🎨 Fix button appearance in dashboard dialogs
Stealth and lightweight buttons in dashboard dialogs now use a transparent background instead of the dialog background color, fixing visual glitches when buttons appear inside table header rows such as the Manage Data dialog.
Owner: @JamesNK
Changes: #17984 -
🔤 Fix duplicate replica display names in telemetry
Fixed a display name collision for telemetry resources with multiple replicas. The dashboard now uses the last 8 characters of the service.instance.id GUID instead of the first 8, which prevents identical display names when using version 7 GUIDs (Guid.CreateVersion7()).
Owner: @radical
Changes: #18064
🌍 Community contribution by @@shauryalowkeygotaura -
🔍 Fix trace detail span pane on navigation
The span detail pane is now properly cleared when navigating between traces in the dashboard. Previously, navigating away from a trace left the pane open showing a span from the old trace.
Owner: @JamesNK
Changes: #18146 -
♿ Fix Manage Data selection accessibility semantics
Fixed accessibility semantics in the Manage Data dialog so screen reader users receive accessible names, checkbox roles, and aria-checked state for each selection control. Selection items now announce their name and checked state correctly.
Owner: @adamint
Changes: #17928 -
🐛 Fix: filter removal preserves selected log entry
Removing a filter from the structured logs or resources list no longer incorrectly clears the currently selected entry. The selection is preserved when a filter is removed (which can only expand the result set), and is only cleared when the active filters actually exclude the selected item.
Owner: @JamesNK
Changes: #15825 -
📈 Metrics chart correctness improvements
Several correctness issues in the metrics charting pipeline have been fixed: histogram traces (P50/P90/P99) now appear in a guaranteed consistent order, the metrics table tab is correctly labeled "Table" instead of "Resources", and metric values are compared correctly across timezones.
Owner: @JamesNK
Changes: #18312 -
🖱️ Fix endpoint URL tooltip in Resources page
When hovering over an endpoint link in the Resources page URLs column, the tooltip previously showed all endpoint display texts combined. Now each endpoint shows the specific URL it navigates to on hover, making it clear where clicking will take you.
Owner: @JamesNK
Changes: #18373
🌍 Community contribution by @@afscrome -
🎨 Fallback icons for unknown resource command icon names
When resource commands specify an unknown or missing icon name, the dashboard now renders a fallback icon instead of raw display-name text, preventing the actions row from overflowing the viewport and hiding the overflow menu.
Owner: @JamesNK
Changes: #18389
Docs: microsoft/aspire.dev#1277 -
🚦 Cap URLs column rendering to prevent SignalR disconnect
The dashboard URLs column now caps the number of rendered items at 20, preventing excessive DOM elements from blocking the browser UI thread and disconnecting the Blazor Server SignalR connection when a resource exposes hundreds of endpoints.
Owner: @JamesNK
Changes: #18383 -
🛑 Fix metrics filter disconnect with many tag values
The dashboard no longer loses its SignalR connection when a metrics dimension has hundreds of tag values. Filter tags are now capped at 20 rendered items to prevent the browser reflow that was blocking the UI thread and causing the disconnect.
Owner: @JamesNK
Changes: #18382 -
📐 Fix markdown content overflow in text visualizer
Fixed horizontal overflow in the text visualizer dialog when displaying markdown content with long unbreakable text such as URLs, tokens, or words without spaces.
Owner: @JamesNK
Changes: #18492 -
♿ Fix GenAI copy button accessible name
Fixed a missing accessible name on the copy button in the GenAI visualizer dialog. Screen readers and other accessibility tools now correctly announce the button's purpose when it receives focus.
Owner: @adamint
Changes: #18501 -
🖱️ Fix URL click opening resource details panel
Clicking a URL link in the Resources grid no longer also opens the resource details side panel. Click events on the URL column are now properly stopped from propagating to the row click handler.
Owner: @JamesNK
Changes: #18644
🌍 Community contribution by @@eso-cyber -
♿ Fix mobile nav focus visibility at high zoom
The mobile Resources navigation menu now keeps the focus ring visible at high zoom levels (1280x768 / 200%), scrolls nav items into view during keyboard navigation, and supports Escape to close the menu from the keyboard.
Owner: @adamint
Changes: #18502 -
📤 Fix Dashboard file upload size limit
The Dashboard was silently capping IInteractionService file uploads at 1 MB instead of deferring to the server-configured limit (100 MB by default). Files between 1 MB and 100 MB are now accepted correctly.
Owner: @radical
Changes: #18669 -
♿ Resources page keyboard accessibility and reflow fixes
Keyboard and screen reader users now get correct navigation on the Resources page: View Options announces expanded/collapsed state, focus returns after menu selection, nested row controls no longer trigger parent row actions, and the active tab stays visible and keyboard-reachable in narrow tab strips.
Owner: @adamint
Changes: #17926 -
🔍 Fix trace negative filter logic
Negative trace filters such as 'Not Contains' and 'Not Equal' now correctly exclude traces when any span violates the filter condition. Previously, a multi-span trace could slip through a negative filter if any sibling span did not match the excluded value.
Owner: @JamesNK
Changes: #18701 -
📜 Fix trace details grid scrolling
The trace details grid could scroll the wrong ancestor element when its content exceeded the visible height. The container height is now set to 100% so scrolling stays within the grid.
Owner: @JamesNK
Changes: #18843 -
⏸️ Fix telemetry pause warning display
Pausing capture on the structured logs, traces, and metrics pages now displays the 'Capture paused' warning immediately. Previously the page did not rerender until it was manually refreshed.
Owner: @JamesNK
Changes: #18841 -
🗑️ Fix removing resources without telemetry
Resources with no remaining telemetry data types can now be selected and removed from the 'Manage logs and telemetry' page. Previously their checkbox and row were non-interactive, making removal impossible.
Owner: @JamesNK
Changes: #18829
Docs: microsoft/aspire.dev#1444 -
🧹 Fix dashboard memory leak from retained menus
Resolves a memory leak where FluentMenu components were not unregistered on disposal, causing dashboard memory usage to grow as users navigate through telemetry views.
Owner: @JamesNK
Changes: #18853 -
🎯 Restore keyboard focus after menu selections
Fixed an issue where selecting an item from a dashboard button menu left keyboard focus on the page body. Focus now correctly returns to the trigger button after selection, improving keyboard navigation and accessibility.
Owner: @adamint
Changes: #18862 -
🔒 Fix HTML injection in code block titles
Fixed an HTML injection vulnerability in the Markdown renderer where crafted fenced code block language metadata could inject arbitrary HTML into dashboard pages.
Owner: @JamesNK
Changes: #18866 -
📉 Fix histogram display crash from mismatched bucket counts
Fixed a crash when viewing metric charts for histogram instruments that received data points with different bucket layouts. The dashboard now rejects mismatched points instead of failing to render the chart.
Owner: @JamesNK
Changes: #18865 -
🔑 Fix Dashboard login token whitespace handling
Fixed a bug where leading or trailing whitespace in a login token prevented successful authentication in the Dashboard. The token is now trimmed before validation.
Owner: @adamint
Changes: #18998
🌍 Community contribution by @@heintz06 -
🕐 Fix metrics chart 24-hour time format
The metrics chart now respects the dashboard's configured time format preference. When 24-hour time is selected, chart axis labels use 24-hour format consistently with the rest of the dashboard.
Owner: @JamesNK
Changes: #19043
Docs: microsoft/aspire.dev#1521
📝 Documentation required -
📈 Fix metric label selection behavior
Clicking a metric dimension label now selects only that value, so charts can be focused on a single value without deselecting every other value first. Shift+click (or Shift+Enter/Space) retains the previous toggle behavior for adding or removing multiple values.
Owner: @JamesNK
Changes: #19225 -
🧹 Cleaned up uploaded interaction files
Uploaded files used byIInteractionService(e.g., file prompts) could be left on disk after failed or canceled interactions, growing disk usage over the AppHost's lifetime. Uploads are now tied to their owning interaction and input, and failed or canceled uploads are cleaned up immediately, preventing stale or mismatched file references from being submitted.
Owner: @JamesNK
Changes: #19334 -
🎨 Matched dark-mode accent buttons to hyperlinks
Dark-mode primary action buttons previously used a lighter lavender fill than dashboard hyperlinks. Buttons and hyperlinks now share the same accent color in dark mode, keeping primary actions visually consistent with the established accent styling.
Owner: @JamesNK
Changes: #19332
9 new features, 15 improvements, 19 bug fixes
-
🗂️ Show discovered AppHosts in VS Code Aspire pane
The VS Code Aspire pane now displays idle (non-running) AppHosts discovered via aspire ls, with right-click context menu actions to Run, Debug, Open Source, or Copy Path.
Owner: @ellahathaway
Changes: #17506
📝 Documentation required -
🔗 Support launchUrl in launchSettings.json
The VS Code extension now respects the launchUrl property in launchSettings.json, using it as the serverReadyAction URI format when launching the debugger.
Owner: @adamint
Changes: #17634
Docs: microsoft/aspire.dev#1459
📝 Documentation required
🌍 Community contribution by @@neoGeneva -
📡 VS Code extension telemetry
The VS Code extension now collects telemetry signals including extension activation, debug session start/stop, and dashboard interactions to help improve the product. Data collection follows Microsoft privacy policies.
Owner: @adamint
Changes: #17723
📝 Documentation required -
🎮 Resource commands in VS Code tree view
Resource commands (such as Start, Stop, and custom commands) are now displayed as child items under each resource in the Aspire VS Code extension tree view. Both enabled and disabled commands are shown.
Owner: @adamint
Changes: #17698
📝 Documentation required
🌍 Community contribution by @@shivamgoel008 -
🐛 Bun debugging support in VS Code extension
The Aspire VS Code extension now supports debugging Bun applications via the WebKit Inspector Protocol debug adapter. Set breakpoints in your Bun code and debug it directly from VS Code when running an AppHost with a Bun resource (requires the oven.bun-vscode extension).
Owner: @ellahathaway
Changes: #17848
📝 Documentation required -
🪟 Open Aspire Dashboard in side panel from VS Code
A new VS Code command lets you open the Aspire Dashboard in a side-by-side panel instead of an external browser, making it easier to monitor your application while editing code.
Owner: @adamint
Changes: #17864
🌍 Community contribution by @@Jah-yee -
🔗 VS Code extension exposes AppHost and resource management APIs
The Aspire VS Code extension now exposes AppHost query and resource management APIs through its extension API surface, enabling C# Dev Kit v2 and other tools to programmatically query AppHost state and manage Aspire resources from the extension.
Owner: @adamint
Changes: #17705
📝 Documentation required
🌍 Community contribution by @@LittleLittleCloud -
📱 MAUI platform debugging in VS Code extension
Aspire MAUI resources are now debuggable from the VS Code extension using the MAUI debugger. Supports iOS simulator, Mac Catalyst, Windows, and Android emulator/device targets when the ms-dotnettools.dotnet-maui extension is installed; falls back to process launch on IDEs without MAUI debug support.
Owner: @adamint
Changes: #17857
📝 Documentation required -
🖥️ Open terminal from resource context menu in VS Code
Resources that support terminal access can now be opened directly from the VS Code extension's resource tree context menu, runningaspire terminal attachfor the selected resource without leaving the IDE.
Owner: @mitchdenny
Changes: #18260
-
🏷️ VS Code extension renamed to Aspire
The VS Code extension has been rebranded from ".NET Aspire" to "Aspire". Users will see the updated display name and icon in the VS Code marketplace and extension panel.
Owner: @adamint
Changes: #17843
Docs: microsoft/aspire.dev#1211 -
🎛️ Improved parameter display in VS Code extension
Parameters now display consistently in both the VS Code extension resource tree and inline AppHost CodeLens. Missing values show as "Value missing" with a warning icon, secret parameters show a masked value, non-secret values show inline text (truncated to 80 characters), and command order now matches the Aspire dashboard.
Owner: @ellahathaway
Changes: #17881 -
🔒 VS Code extension hardened against terminal command injection
VS Code extension terminal commands (Stop AppHost, View Resource Logs, Run Resource Commands) now use structured shell arguments instead of pre-built shell fragments, preventing shell injection via malicious workspace paths or resource names. Control characters are also rejected before terminal input.
Owner: @adamint
Changes: #17930 -
⚡ VS Code AppHost discovery efficiency improvements
VS Code AppHost discovery now respects files.exclude and search.exclude workspace settings, debounces file-change events to prevent repeated refresh floods, and avoids overlapping discovery runs. Large workspaces with generated folders should see significantly less background scanning.
Owner: @adamint
Changes: #17897 -
🔔 Dashboard browser launch is now opt-in in VS Code
The VS Code extension no longer auto-opens the Aspire Dashboard when an AppHost starts. Configure the preferred launch behavior — notification, external browser, integrated browser, or browser-debug — using the newaspire.dashboardBrowsersetting or the per-launchdashboardBrowserproperty inlaunch.json. Legacyaspire.enableAspireDashboardAutoLaunchsettings are preserved for backward compatibility.
Owner: @adamint
Changes: #18361
Docs: microsoft/aspire.dev#1323
⚠️ Breaking change
📝 Documentation required -
📡 Improved VS Code extension Marketplace page and first-run funnel telemetry
Updated the VS Code Marketplace README to showcase the AppHost discovery, run/debug, and dashboard workflow with real screenshots. Added bounded first-run funnel telemetry (activation, CLI availability, AppHost discovery, and launch events) using coarse enum and count values only — no paths, command output, or user content is collected.
Owner: @adamint
Changes: #17898 -
🌲 Simplified AppHosts tree view for single AppHosts
The VS Code extension's AppHosts tree no longer wraps a lone AppHost in a redundant 'Running AppHosts (1)' or 'Workspace AppHosts (1)' grouping node. Single AppHosts are now shown directly at the top level, reducing unnecessary nesting and eliminating the extra click needed to expand the group.
Owner: @ellahathaway
Changes: #18523 -
🔇 Resource commands run without opening a terminal
VS Code resource commands (start, stop, restart, and custom commands) now run via the CLI backchannel instead of opening a visible terminal. Results surface as notifications, preventing command output from mixing with unrelated terminal content and avoiding sensitive argument exposure in terminal scrollback.
Owner: @adamint
Changes: #18457 -
🚀 Faster AppHost startup from VS Code extension
The VS Code extension now passes--nologoon all hidden CLI probe calls (config info, ls, ps, describe, resource commands), making AppHost startup faster by skipping interactive startup output. Older CLIs that do not support--nologoare automatically detected and retried without it.
Owner: @adamint
Changes: #18517 -
🔄 Improved AppHost runtime tracking in VS Code
Refactored AppHost runtime tracking in the VS Code extension soaspire psis the single source of running AppHosts. Each running AppHost now gets its ownaspire describe --followstream, allowing resources to populate before workspace discovery completes.
Owner: @ellahathaway
Changes: #18527
Docs: microsoft/aspire.dev#1382
📝 Documentation required -
📡 VS Code extension telemetry wire names
VS Code extension telemetry events are now emitted with Aspire-specific wire names (aspire/vscode/* and aspire/dashboard/*), while retaining VS Code's privacy safeguards, telemetry opt-in mechanisms, and automatic exception handling.
Owner: @adamint
Changes: #18562 -
📋 Copy AppHost path to clipboard in VS Code
Clicking the Path row under an AppHost in the VS Code Aspire AppHosts tree now copies the AppHost file path to the clipboard, matching the expected behavior when clicking a path.
Owner: @adamint
Changes: #18621 -
⚠️ Show unhealthy resources as warnings in VS Code
Resources in RuntimeUnhealthy or FailedToStart states are now displayed as warnings in the VS Code resource tree, CodeLens, and editor gutter, matching the severity levels shown in the Aspire Dashboard.
Owner: @adamint
Changes: #18973
🌍 Community contribution by @@mturac -
🏃 Accurate run/debug wording for AppHost launches in VS Code
When launching an AppHost without debugging in VS Code, the Debug Console now shows a "run" message instead of a "debug" message, accurately reflecting the launch mode and avoiding confusion about whether a debug session is active.
Owner: @adamint
Changes: #18987
🌍 Community contribution by @@vivekjm -
⚡ Incremental AppHost discovery in VS Code panel
The VS Code Aspire panel now renders AppHosts incrementally as they are discovered via streaming, rather than waiting for all discovery to complete. This eliminates the empty-workspace flash on refresh and provides a more responsive experience in repositories with many AppHosts.
Owner: @ellahathaway
Changes: #18443
-
🛠️ Fix VS Code AppHost launch path resolution
Fixed an issue in the VS Code extension where starting an Aspire debug session from a source file (e.g., Program.cs) would pass the source path to the CLI instead of the project file path, causing the session to fail.
Owner: @davidfowl
Changes: #17408 -
🔒 Security update: tmp package path traversal fix
Updated the tmp npm package to 0.2.6 in the VS Code extension to resolve a path traversal vulnerability (GHSA-ph9p-34f9-6g65).
Owner: @IEvangelist
Changes: #17594
Docs: microsoft/aspire.dev#1123 -
🔒 Security fixes in VS Code extension dependencies
Multiple security vulnerabilities in VS Code extension npm dependencies have been patched. Upgrades include undici (7.27.0) for CRLF injection, WebSocket parser crash, and HTTP smuggling; and @nevware21/ts-utils (0.14.0), fast-uri (3.1.2), qs (6.15.2), and ws (8.21.0) for additional high and moderate severity CVEs.
Owner: @IEvangelist
Changes: #17868, #17951 -
🔌 Fix extension compatibility error for empty AppHost describe
The VS Code extension now shows a compatibility error when a running AppHost successfully returns no resource data from aspire describe, instead of silently displaying no resources. This surfaces a clear message when the AppHost uses an older Aspire.Hosting version (13.1.0 or earlier) that does not support the describe protocol.
Owner: @adamint
Changes: #17925 -
🔄 Fix concurrent AppHost backchannel connection setup
The CLI extension backchannel now serializes concurrent ConnectAsync calls, preventing a race condition that caused errors when multiple AppHost connections were initiated simultaneously.
Owner: @adamint
Changes: #18322 -
🔧 Fix stale AppHost running state in VS Code extension
Stopped AppHosts are now reliably cleared from the VS Code extension running state after debug sessions end. Stop-state transitions are command-aware, so only run command terminations trigger stop state; non-run commands like publish no longer incorrectly mark AppHosts as stopping.
Owner: @ellahathaway
Changes: #17965 -
🔔 Fix false CLI upgrade warning in VS Code extension
The VS Code extension no longer shows CLI upgrade guidance for generic fetch or runtime errors. Upgrade prompts now only appear when a genuine CLI compatibility or version mismatch is detected, reducing false-positive noise in the Aspire panel.
Owner: @ellahathaway
Changes: #18358 -
⏱️ Fix VS Code debug timeout with pre-build AppHost breakpoints
The VS Code extension now sets an extended startup timeout for extension-managed AppHost debug sessions, preventing the CLI from terminating debug sessions when paused on a breakpoint beforebuilder.Build()is called.
Owner: @adamint
Changes: #18353 -
🛡️ Fix extension terminal display fallback security
The VS Code extension's CLI display fallback (InteractionService.displayLines) no longer routes text to the integrated terminal as shell input when no active debug session exists. Display output is now sent to the Aspire log output channel, closing a terminal-injection path for command-shaped or control-character-containing text.
Owner: @adamint
Changes: #18500 -
🪟 Fix global AppHosts showing in workspace view
Fixed a bug where AppHosts discovered in global view were incorrectly shown in the workspace view when VS Code had no open workspace. Switching back to workspace view now immediately re-applies workspace filters to the current snapshot instead of waiting for the next poll cycle.
Owner: @adamint
Changes: #18516 -
🐚 Fixed VS Code extension CLI install walkthrough on all shells
The VS Code extension's 'Install Aspire CLI' walkthrough now works correctly on all shells. Previously it sent PowerShell-specific install commands into terminals that might be running cmd.exe on Windows, causing the install to fail. The walkthrough now offers a package-manager picker for stable releases and a shell-safe script for daily builds.
Owner: @ellahathaway
Changes: #18522
Docs: microsoft/aspire.dev#1434 -
🔧 Fix CLI bundle path forwarding in VS Code extension
Whenaspire.aspireCliExecutablePathis set to a dev-built CLI, the extension now forwards the configured path asAspireCliPathto all build processes — terminals, tasks, debugger child processes, and language-server builds — preventing bundle path mismatches that caused runtime failures such as<unresolved-aspire-terminalhost>.
Owner: @adamint
Changes: #18362 -
🐛 Fix debuggee exit code in VS Code extension
Fixed a bug in the VS Code extension where a crashed debuggee was incorrectly reported with exit code 0, causing dependent resources (using .WaitFor()) to start even when their dependency had failed.
Owner: @ellahathaway
Changes: #18712 -
🐛 Fix debug session stop ordering in VS Code
Fixed an issue in the VS Code extension where the global debug stop command would stop the synthetic Aspire parent session before stopping the real AppHost debug session, leaving the AppHost registry populated after stopping.
Owner: @adamint
Changes: #18561 -
🐛 Fix stale global AppHost entry in VS Code after debug stop
The VS Code extension now correctly prunes a stale global AppHost entry after a debug stop when workspace discovery polling is temporarily unavailable. Stop tracking is now source-aware, ensuring the global view reflects the true AppHost state once polling resumes.
Owner: @adamint
Changes: #18594 -
🪟 Fix Windows global-tool Aspire CLI discovery in VS Code
Fixes the VS Code extension failing to discover the Aspire CLI on Windows when installed as a global tool via dotnet tool install --global Aspire.Cli. The extension now correctly probes aspire.cmd in addition to aspire.exe, resolves Windows PATH shims to fully qualified paths, and honors DOTNET_CLI_HOME.
Owner: @adamint
Changes: #18940 -
🔒 Security fix: pin VS Code extension supply-chain dependency
Pinned the cacheable-request npm dependency in the VS Code extension after an active supply-chain compromise published a malicious version. This protects extension users from potential malicious code execution during install.
Owner: @adamint
Changes: #18997 -
🛠️ Fix VS Code file AppHost build ownership
Fixed a bug where starting a file-based AppHost from VS Code would trigger a redundant rebuild after the Aspire CLI had already built it, potentially using a different SDK version from the wrong working directory and causing the launch to fail.
Owner: @adamint
Changes: #18984 -
🔐 Fixed Azure Functions HTTPS debugging in VS Code
The VS Code extension no longer misroutes .NET Azure Functions HTTPS resources through the normal .NET launch path, which incorrectly passed --cert and --password arguments to dotnet. Functions apps now build and start func host from the compiled output directory, with HTTPS arguments correctly forwarded across PowerShell, cmd, and POSIX shells.
Owner: @ellahathaway
Changes: #19001
8 new features, 8 improvements, 13 bug fixes
-
🧩 Redis module support via WithModule()
Redis resources can now load native Redis 8+ modules or custom .so modules using WithModule(). Supported built-in modules include RedisNativeModule.Json and RedisNativeModule.Search. TypeScript polyglot AppHosts get a matching withModule() export.
Owner: @sebastienros
Changes: #18025
📝 Documentation required
🌍 Community contribution by @@aradalvand -
🔷 Aspire.Hosting.Dotnet integration package
Adds Aspire.Hosting.Dotnet, a new language integration package that brings C# project support on par with the existing Go, Python, and JavaScript integrations. This is the first part of the Project V2 workstream.
Owner: @karolz-ms
Changes: #18442
Docs: microsoft/aspire.dev#1437
📝 Documentation required -
🌐 Aspire.Hosting.Radius integration (preview)
A new preview integrationAspire.Hosting.Radiuslets Aspire AppHosts target Radius as a compute environment alongside Kubernetes, Docker Compose, and Azure Container Apps. CallAddRadiusEnvironment()andaspire publish/deploy emits a nativeapp.bicepand runsrad deploy. Run mode is inert — local development is unchanged. Includes in-code Azure and AWS cloud providers with typed credential modes that are never inlined into generated Bicep.
Owner: @mitchdenny
Changes: #18696
📝 Documentation required
🌍 Community contribution by @@nellshamrell -
🌐 App Service virtual network integration support
Azure App Service environments now support delegated subnet configuration via WithDelegatedSubnet(). AppHost authors can wire an Azure Virtual Network subnet to an App Service environment to enable regional VNet integration for outbound traffic, including workload sites, deployment slots, and the dashboard.
Owner: @davidfowl
Changes: #18738
Docs: microsoft/aspire.dev#1441
📝 Documentation required -
🏷️ Collision-free Azure Container App environment naming with WithUniqueResourceNaming()
A new WithUniqueResourceNaming() extension method lets AppHost authors opt into digit-preserving managed environment names for Azure Container App environments, preventing name collisions when multiple environments are deployed to the same resource group. Aspire now also validates and fails fast with actionable guidance when legacy names would collide.
Owner: @mitchdenny
Changes: #18737
Docs: microsoft/aspire.dev#1443
📝 Documentation required -
🗂️ Kubernetes projected volume support
The Kubernetes publisher now supports projected volumes, allowing secrets, config maps, service account tokens, and downward API data to be mounted into the same directory. This enables scenarios requiring multiple volume sources under a single mount point.
Owner: @mitchdenny
Changes: #16555
📝 Documentation required
🌍 Community contribution by @@ndhansen -
🌐 Ergonomic Azure subnet service-delegation API
New fluent helpers WithServiceDelegation and WithContainerInstanceDelegation on IResourceBuilder make it easy to delegate Azure subnets to services like Azure Container Instances without duplicating the service name string.
Owner: @IEvangelist
Changes: #18728
Docs: microsoft/aspire.dev#1519
📝 Documentation required -
💾 AKS persistent volume support
AKS environments now exposeAddPersistentVolumedirectly, so workloads targeting AKS can configure and mount persistent storage (backed by an Azure managed disk by default) without reaching into the underlying Kubernetes integration.
Owner: @mitchdenny
Changes: #19264
Docs: microsoft/aspire.dev#1474
📝 Documentation required
-
🌇 GitHub Models integration deprecated
TheAspire.Hosting.GitHub.Modelsintegration has been retired. All public APIs are now marked[Obsolete]and the package is hidden fromaspire add. Users relying on GitHub Models should migrate to alternative AI service integrations.
Owner: @sebastienros
Changes: #18405
Docs: microsoft/aspire.dev#1279
📝 Documentation required -
🏗️ Serialized builds for MAUI platform resources
Aspire now serializes MSBuild invocations for MAUI platform resources (Android, iOS, Mac Catalyst, Windows) that share the same project file. This prevents intermittent file-locking and XamlC assembly resolution failures caused by running multiple platform builds concurrently. Build state is reflected as Queued and Building in the dashboard.
Owner: @radical
Changes: #15958
🌍 Community contribution by @@jfversluis -
🔧 ConfigurationSchemaGenerator filename fix and opt-out support
Fixes a typo in the MSBuild variable (AsemblyName→AssemblyName) that caused the configuration schema generator's intermediate response file to be unnamed, preventing per-project identification and risking cross-project file collisions in shared output paths. Also adds aConfigurationSchemaGeneratorEnabledMSBuild property so integration projects can opt out of schema generation.
Owner: @JamesNK
Changes: #18688
🌍 Community contribution by @@bart-vmware -
🔧 Cleaner Go polyglot API for optional parameters
The Go polyglot code generator now emits a cleaner API when a method has a single optional DTO namedoptions: the DTO type is threaded directly as a variadic parameter instead of being wrapped in a generated method-options struct, matching the TypeScript generator behavior.
Owner: @ellahathaway
Changes: #18698
Docs: microsoft/aspire.dev#1360
⚠️ Breaking change
📝 Documentation required -
🔧 DotnetProjectResource moved to Aspire.Hosting.Dotnet namespace
DotnetProjectResource has been moved from the shared ApplicationModel namespace to Aspire.Hosting.Dotnet and marked with the ASPIREDOTNETPROJECT001 experimental diagnostic, aligning it with Go, Python, and JavaScript resource APIs.
Owner: @sebastienros
Changes: #18981
Docs: microsoft/aspire.dev#1473
⚠️ Breaking change
📝 Documentation required -
🔒 Orleans provider annotation made internal
OrleansProviderTypeAnnotation is now an internal implementation type. The supported public API is WithOrleansProviderType, which continues to work as before.
Owner: @sebastienros
Changes: #18975
⚠️ Breaking change
📝 Documentation required -
🎓 Graduate experimental APIs to stable
Two previously experimental APIs have been promoted to stable:ContainerAppExtensions.ConfigureCustomDomain(ASPIREACADOMAINS001) andCompletionState(ASPIREPIPELINES001). Consumers can now use these APIs without suppressing their respective experimental diagnostics.
Owner: @sebastienros
Changes: #19007
Docs: microsoft/aspire.dev#1507
📝 Documentation required -
🖼️ Resource icons for hosting integration packages
Added explicit resource icons to hosting integration packages that previously fell back to generic type-based heuristics. Resources in the dashboard now show semantically meaningful icons (database, message broker, AI model, cloud service, etc.) instead of a generic box or code icon.
Owner: @JamesNK
Changes: #18954
🌍 Community contribution by @@afscrome
-
🐛 Fix EF Hosting migration pipeline step handling
Fixed issues in the Entity Framework hosting integration migration pipeline where migration steps were unconditionally added to the bundle-generate step. Improves reliability of EF migration orchestration in AppHost.
Owner: @AndriySvyryd
Changes: #16966 -
🔒 Fix Redis TLS persistent container startup deadlock
Fixed a deadlock that could occur during Redis container startup when TLS was enabled and the container used a persistent lifetime. The TLS startup arguments now correctly use target-port bindings instead of allocated ports.
Owner: @danegsta
Changes: #17827 -
🐛 Fix RabbitMQ structured log event name display
RabbitMQ log entries no longer show misleading level names ('Error', 'Warn', 'Info') as the event name in the Aspire dashboard structured log view. The event name is now left unset, with log level still flowing correctly via LogLevel.
Owner: @radical
Changes: #17355
🌍 Community contribution by @@alirezafzali -
🔐 Fix Entra ID auth in SqlServer client integrations
The SqlServer client integrations (Aspire.Microsoft.Data.SqlClient and Aspire.Microsoft.EntityFrameworkCore.SqlServer) now reference Microsoft.Data.SqlClient.Extensions.Azure, which contains the Entra ID authentication providers that were moved out of the core SqlClient driver in version 7.0. Apps using managed identity or Active Directory authentication against Azure SQL no longer fail at runtime with 'Cannot find an authentication provider for ActiveDirectoryDefault'.
Owner: @sebastienros
Changes: #18149
📝 Documentation required
🌍 Community contribution by @@0xharkirat -
📡 Fix MAUI OTLP dev tunnel endpoint for dynamic dashboard ports
Fixes MAUI OTLP dev tunnel endpoint resolution when the Aspire dashboard uses dynamically allocated ports. Previously, the tunnel could fall back to the stale default port 18889, causing telemetry from MAUI apps to not appear in the dashboard.
Owner: @JamesNK
Changes: #18053
🌍 Community contribution by @@jfversluis -
🐛 Fix EF publish-mode connection string placeholder error
Fixed a bug whereaspire publishwould fail EF migration bundle generation because connection string environment variables resolved to manifest placeholders in publish mode, causing the design-time EF tool to throw an initialization error. The EF tool now skips connection string references during publish — the real connection string is supplied at deploy time.
Owner: @mitchdenny
Changes: #17905 -
🐛 Fix EF migration connection string not forwarded to dotnet-ef tool
Resolved a bug where calling.WithReference(<db>)on an EF migration resource failed to forward the connection string to the hiddendotnet-eftool resource, resulting inThe ConnectionString property has not been initialized.errors. Connection strings are now lazily forwarded at start time so they are available regardless of declaration order.
Owner: @mitchdenny
Changes: #18452 -
🔑 Fix cross-scope ACR pull identity role assignment
Fixes a deployment failure when using an existing Azure Container Registry in a different resource group or subscription. ACA and App Service now correctly handle ACR pull identity role assignments for cross-scope registries, resolving the Bicep BCP139 validation error.
Owner: @davidfowl
Changes: #18742 -
🔌 Fix Radius service discovery for Kubernetes deployments
Cross-container service discovery was broken when deploying Aspire apps to Radius-enabled Kubernetes clusters. Theservices__*environment variables emitted to consumer containers now correctly reference the Kubernetes ClusterIP Service created by the Radius recipe, so calls between resources (e.g., a Blazor frontend to an API service) resolve correctly in-cluster.
Owner: @mitchdenny
Changes: #18797
🌍 Community contribution by @@nellshamrell -
🔒 Fix Azure SQL managed-identity provisioning on az14.0
Fixes Azure SQL managed-identity provisioning failures when deploying to the az14.0 deployment image. The script no longer depends on the SqlServer PowerShell module, makes user creation idempotent so retries succeed, and validates the identity by SID so a recreated managed identity is correctly replaced.
Owner: @mitchdenny
Changes: #18895 -
📌 Pinned dashboard image for reproducible deployments
Docker Compose and Kubernetes publish now pin the Aspire Dashboard image to a specific reproducible tag instead of an untagged reference, so generated manifests no longer resolve to a mutable:latestbuild that could drift from the app's Aspire version.
Owner: @IEvangelist
Changes: #19249 -
🔑 AKS credential pipeline pinned to deployment subscription
AKS deployment now always fetches cluster credentials and resource group data scoped to the subscription Aspire selected, instead of the ambient Azure CLI default, preventing wrong-subscription credential fetches and confusing "cluster not found" errors.
Owner: @mitchdenny
Changes: #19271 -
🚦 Fixed deploy hang on route-less Gateways and Ingresses
aspire deployno longer hangs for ~15 minutes waiting on a Kubernetes Gateway or Ingress that was intentionally skipped for having no routes, and no longer emits a dangling cert-managerparentRefor orphaned TLS secret for it; a warning now names what was omitted.
Owner: @mitchdenny
Changes: #19254
Docs: microsoft/aspire.dev#1470
1 new feature, 1 improvement
-
🆙 .NET 11 support for project templates
Aspire project templates now support .NET 11 Preview as an opt-in target framework, allowing developers to evaluate Aspire on .NET 11 while templates continue to default to .NET 10. All nine framework-aware templates are updated, including the corresponding OpenAPI package substitutions.
Owner: @DamianEdwards
Changes: #18849
📝 Documentation required
-
📦 CLI bundle enabled by default in C# AppHost templates
New C# AppHost projects and single-file AppHosts created from templates now default to the Aspire CLI bundle layout, avoiding the opt-in warning and enabling bundled dashboard and DCP features out of the box.
Owner: @DamianEdwards
Changes: #19294
To provide feedback, comment on the Changelog feedback issue (e.g., "Exclude PR #1234", "Rename: X → Y", "Merge PRs #1234 and #5678").
PRs processed: ✅ 308 included · ❌ 245 excluded · ⏳ 0 unprocessed · 553 total merged in milestone (View full PR tracker) Docs PRs: ✅ 77 included · ❌ 151 excluded · ⏳ 2 unprocessed · 230 total from microsoft/aspire.dev (View docs PR tracker) PRs analyzed through: #19424 merged 2026-08-17 22:37 UTC