Skip to content

13.5 Change log

github-actions[bot] edited this page Jul 1, 2026 · 165 revisions

Table of Contents

25 new features, 69 improvements, 67 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.

What's New

๐Ÿ  AppHost

9 new features, 25 improvements, 17 bug fixes

New features

  1. โณ 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.
    Owner: @JamesNK
    Changes: #18493
    ๐Ÿ“ Documentation required

  2. ๐Ÿท๏ธ Custom Orleans provider type annotation
    Users can now explicitly specify the Orleans provider type for a resource using WithOrleansProviderType(). 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

  3. ๐Ÿ‘๏ธ 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

  4. ๐ŸŒ 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
    ๐Ÿ“ Documentation required

  5. ๐Ÿ–ฅ๏ธ 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
    ๐Ÿ“ Documentation required

  6. ๐ŸŒ 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
    ๐Ÿ“ Documentation required

  7. ๐Ÿ”ง 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

  8. ๐Ÿ’š 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
    ๐Ÿ“ Documentation required

  9. ๐Ÿณ 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

Improvements

  1. ๐Ÿ”‘ 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

  2. ๐Ÿ”„ Improved Azure provisioning recovery commands
    Azure provisioning recovery is now more actionable. A new cancel-azure-operation resource command cancels in-flight Azure operations from the CLI or dashboard, while reprovision and delete-azure-resource are 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

  3. ๐Ÿ“‹ 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

  4. ๐Ÿ” 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

  5. โš™๏ธ 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

  6. ๐Ÿ”” 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

  7. ๐ŸŒŒ 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

  8. ๐Ÿท๏ธ 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

  9. ๐Ÿ” Improved Azure provisioning diagnostics
    Azure provisioning failures now surface richer diagnostics with actionable recovery guidance in resource state and aspire deploy output. 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

  10. ๐Ÿ“‹ 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

  11. ๐Ÿ”Œ 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

  12. โœ… 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
    ๐Ÿ“ Documentation required

  13. ๐Ÿ”„ 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

  14. ๐Ÿšซ PublishAsConnectionString marked obsolete
    The PublishAsConnectionString extension 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 to AddConnectionString in publish-mode app model code.
    Owner: @davidfowl
    Changes: #18044
    โš ๏ธ Breaking change
    ๐Ÿ“ Documentation required

  15. โš™๏ธ 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

  16. ๐Ÿฉบ 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

  17. ๐Ÿค– 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

  18. โธ๏ธ 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

  19. ๐ŸŒ 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
    ๐Ÿ“ Documentation required
    ๐ŸŒ Community contribution by @kola-tm

  20. ๐Ÿค– 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

  21. ๐ŸŽ‰ 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

  22. โš™๏ธ 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

  23. โš“ 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

  24. ๐ŸŒ 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

  25. ๐Ÿ”Œ 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

Bug fixes

  1. ๐Ÿ“‹ 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

  2. ๐Ÿ—๏ธ 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

  3. ๐Ÿ› 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

  4. ๐Ÿ” 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

  5. ๐Ÿ”— 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

  6. ๐Ÿ”Œ 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

  7. ๐Ÿ› 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

  8. ๐Ÿ”’ 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

  9. ๐Ÿ”ง 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

  10. ๐Ÿ”’ Secret parameter values redacted in backchannel snapshots
    Secret parameter values marked with secret: true were exposed in plaintext through the backchannel API (used by aspire describe and MCP resource tools) when consumed via WithEnvironment. The AppHost now redacts these values before snapshots leave the host, covering all backchannel consumers.
    Owner: @mitchdenny
    Changes: #18089
    ๐ŸŒ Community contribution by @shauryalowkeygotaura

  11. ๐Ÿ› Fix Foundry hosted agent deployment with explicit target port
    Fixed a deployment failure when Foundry hosted agents were configured with an explicit targetPort (e.g., .WithHttpEndpoint(targetPort: 9000).AsHostedAgent(...)). The publish path no longer attempts to emit unsupported TargetPort endpoint metadata for Foundry deployment targets.
    Owner: @tommasodotNET
    Changes: #17903

  12. ๐Ÿ› 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

  13. ๐Ÿ”„ 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

  14. ๐Ÿ”ง 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

  15. ๐Ÿ”— 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

  16. ๐Ÿ”“ 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

  17. ๐ŸŒ 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

๐Ÿ’ป CLI

4 new features, 24 improvements, 21 bug fixes

New features

  1. ๐Ÿ”„ aspire update --migrate for TypeScript AppHost format
    The aspire update command now supports a --migrate flag that detects and automatically upgrades legacy apphost.ts TypeScript AppHosts to the newer apphost.mts format. 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

  2. ๐Ÿ“ฆ 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 now includes install, verify, update, and troubleshooting guidance, and a postinstall check warns when the matching native platform package is missing on supported platforms.
    Owner: @adamint
    Changes: #17297, #18455
    Docs: microsoft/aspire.dev#1239, microsoft/aspire.dev#1243, microsoft/aspire.dev#1252
    ๐Ÿ“ Documentation required

  3. ๐Ÿง 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. Use nix run github:microsoft/aspire#aspire-cli to 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

  4. ๐Ÿ“ฆ 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

Improvements

  1. ๐Ÿ” aspire add filters to polyglot-compatible integrations
    aspire add and aspire integration list/search now 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
    ๐Ÿ“ Documentation required

  2. โšก 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

  3. โšก Faster AppHost discovery in large repositories
    AppHost discovery (used by aspire 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 by up to 2ร— in large repos.
    Owner: @ellahathaway
    Changes: #18436

  4. ๐Ÿ›‘ Unified graceful shutdown for aspire run
    The aspire run command 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 with aspire start/aspire stop on all platforms.
    Owner: @danegsta
    Changes: #17814

  5. ๐Ÿ”€ 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

  6. ๐Ÿ”ค 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

  7. ๐Ÿ–ผ๏ธ Aspire CLI displays application icon on Windows
    The aspire.exe and aspire-managed.exe processes now display the Aspire application icon in Windows Task Manager, File Explorer, and other shell surfaces.
    Owner: @JamesNK
    Changes: #18303

  8. ๐Ÿ”— DCP connection health check in aspire doctor
    The aspire doctor command 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

  9. ๐Ÿ” Improved docs search relevance
    The aspire docs search command 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

  10. ๐Ÿ–ฅ๏ธ OS information in aspire doctor
    The aspire doctor command 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

  11. ๐Ÿท๏ธ 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

  12. ๐Ÿฉบ 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

  13. โœ… 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

  14. ๐Ÿงน 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

  15. ๐Ÿ› ๏ธ --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
    ๐Ÿ“ Documentation required
    ๐ŸŒ Community contribution by @nanookclaw

  16. ๐Ÿ› ๏ธ 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

  17. ๐Ÿšซ 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

  18. ๐Ÿค– 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

  19. โšก 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

  20. ๐Ÿ“š 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

  21. ๐Ÿ—‘๏ธ 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

  22. ๐Ÿ”Ž 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

  23. ๐Ÿ” 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

  24. ๐ŸŽจ 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

Bug fixes

  1. ๐Ÿ” 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

  2. ๐Ÿ”• Fix spurious backchannel error logging in aspire run
    Fixed spurious error-level logging when aspire run ends normally โ€” a race condition caused ConnectionLostException and FailedToConnectBackchannelConnection errors to surface as warnings instead of being silently treated as expected disconnects.
    Owner: @JamesNK
    Changes: #18487

  3. ๐Ÿงน Fix stale socket file after aspire stop
    The Aspire CLI now deletes the backchannel socket file when aspire stop terminates an AppHost, preventing subsequent commands like aspire add from failing with connection timeouts when trying to reconnect to the stopped process.
    Owner: @mitchdenny
    Changes: #18296

  4. ๐Ÿ”ง Fix NuGet package source mapping overwrite during aspire update
    When running aspire 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

  5. ๐Ÿ“ค Fix aspire resource command polluting stdout
    Status messages from the aspire resource command are now routed to stderr instead of stdout, allowing JSON output to be piped cleanly to tools like jq.
    Owner: @JamesNK
    Changes: #18395

  6. ๐Ÿ”– 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

  7. ๐Ÿ”— 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

  8. ๐Ÿ› Fix AppHost selection error in non-interactive mode
    Non-interactive CLI commands such as aspire describe now return a clear, actionable error message instead of crashing when AppHost selection is ambiguous and an interactive prompt is unavailable.
    Owner: @mitchdenny
    Changes: #18297

  9. ๐Ÿ“ Fix aspire doctor text wrapping
    Fixes text alignment in the aspire doctor output so that long messages wrap correctly, aligning continuation lines with the message text rather than indenting under the emoji icon.
    Owner: @JamesNK
    Changes: #18257

  10. ๐Ÿ”ง Fix false version-skew warning during aspire update
    Fixes a false positive version-mismatch warning that appeared during aspire 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

  11. ๐Ÿ› Fix non-interactive self-update channel selection
    Running aspire update --self --non-interactive now correctly auto-detects the update channel from the CLI's current identity, fixing a failure when --channel is not specified.
    Owner: @JamesNK
    Changes: #17512
    ๐ŸŒ Community contribution by @alirezafzali

  12. โฑ๏ธ 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

  13. ๐Ÿงน Fix stale backchannel sockets blocking CLI commands
    Stale AppHost backchannel socket files left behind by exited processes no longer block CLI commands like aspire add. The CLI now automatically prunes orphaned PID-qualified sockets before probing, preventing spurious connection errors.
    Owner: @davidfowl
    Changes: #18038

  14. ๐Ÿ”จ 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

  15. ๐Ÿ›‘ 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

  16. ๐Ÿ› 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

  17. ๐Ÿ“‹ 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

  18. ๐Ÿ”ง 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

  19. ๐Ÿ› 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

  20. ๐Ÿ’ฌ 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

  21. ๐Ÿ”’ 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

๐Ÿ“Š Dashboard

2 new features, 10 improvements, 13 bug fixes

New features

  1. ๐Ÿ” 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

  2. ๐Ÿ• 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

Improvements

  1. โŒจ๏ธ 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

  2. ๐Ÿงน 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

  3. ๐Ÿท๏ธ 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

  4. ๐Ÿท๏ธ 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

  5. โ™ฟ 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

  6. ๐Ÿ”— 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

  7. โ™ฟ 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

  8. ๐Ÿ” 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

  9. ๐Ÿ”ข 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: @JamesNK
    Changes: #17708
    ๐ŸŒ Community contribution by @ellahathaway

  10. ๐Ÿ“‹ 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

Bug fixes

  1. โ™ฟ 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

  2. ๐Ÿ“ 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

  3. ๐Ÿ›‘ 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

  4. ๐Ÿšฆ 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

  5. ๐ŸŽจ 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

  6. ๐Ÿ–ฑ๏ธ 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

  7. ๐Ÿ“ˆ 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

  8. ๐Ÿ› 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

  9. โ™ฟ 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

  10. ๐Ÿ” 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

  11. ๐Ÿ”ค 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

  12. ๐ŸŽจ 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

  13. ๐Ÿ”„ 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

๐Ÿงฉ Extensions

9 new features, 8 improvements, 11 bug fixes

New features

  1. ๐Ÿ–ฅ๏ธ 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, running aspire terminal attach for the selected resource without leaving the IDE.
    Owner: @mitchdenny
    Changes: #18260

  2. ๐Ÿ“ฑ 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

  3. ๐Ÿ”— 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

  4. ๐ŸชŸ 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

  5. ๐Ÿ› 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: @adamint
    Changes: #17848
    ๐Ÿ“ Documentation required
    ๐ŸŒ Community contribution by @ellahathaway

  6. ๐ŸŽฎ 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

  7. ๐Ÿ“ก 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

  8. ๐Ÿ”— 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
    ๐Ÿ“ Documentation required
    ๐ŸŒ Community contribution by @neoGeneva

  9. ๐Ÿ—‚๏ธ 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: @adamint
    Changes: #17506
    ๐Ÿ“ Documentation required
    ๐ŸŒ Community contribution by @ellahathaway

Improvements

  1. ๐Ÿ”‡ 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

  2. ๐ŸŒฒ 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

  3. ๐Ÿ“ก 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

  4. ๐Ÿ”” 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 new aspire.dashboardBrowser setting or the per-launch dashboardBrowser property in launch.json. Legacy aspire.enableAspireDashboardAutoLaunch settings are preserved for backward compatibility.
    Owner: @adamint
    Changes: #18361
    โš ๏ธ Breaking change
    ๐Ÿ“ Documentation required

  5. โšก 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

  6. ๐Ÿ”’ 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

  7. ๐ŸŽ›๏ธ 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: @adamint
    Changes: #17881
    ๐ŸŒ Community contribution by @ellahathaway

  8. ๐Ÿท๏ธ 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

Bug fixes

  1. ๐Ÿš 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

  2. ๐ŸชŸ 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

  3. ๐Ÿ›ก๏ธ 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

  4. โฑ๏ธ 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 before builder.Build() is called.
    Owner: @adamint
    Changes: #18353

  5. ๐Ÿ”” 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

  6. ๐Ÿ”ง 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

  7. ๐Ÿ”„ 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

  8. ๐Ÿ”’ 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

  9. ๐Ÿ”Œ 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

  10. ๐Ÿ”’ 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

  11. ๐Ÿ› ๏ธ 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

๐Ÿ”Œ Integrations

1 new feature, 2 improvements, 5 bug fixes

New features

  1. ๐Ÿงฉ 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

Improvements

  1. ๐Ÿ—๏ธ 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

  2. ๐ŸŒ‡ GitHub Models integration deprecated
    The Aspire.Hosting.GitHub.Models integration has been retired. All public APIs are now marked [Obsolete] and the package is hidden from aspire add. Users relying on GitHub Models should migrate to alternative AI service integrations.
    Owner: @sebastienros
    Changes: #18405
    Docs: microsoft/aspire.dev#1279
    ๐Ÿ“ Documentation required

Bug fixes

  1. ๐Ÿ“ก 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

  2. ๐Ÿ” 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

  3. ๐Ÿ› 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

  4. ๐Ÿ”’ 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

  5. ๐Ÿ› 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


To provide feedback, comment on the Changelog feedback issue (e.g., "Exclude PR #1234", "Rename: X โ†’ Y", "Merge PRs #1234 and #5678").

PRs processed: โœ… 175 included ยท โŒ 169 excluded ยท โณ 0 unprocessed ยท 344 total merged in milestone (View full PR tracker) Docs PRs: โœ… 32 included ยท โŒ 86 excluded ยท โณ 0 unprocessed ยท 78 total from microsoft/aspire.dev (View docs PR tracker) PRs analyzed through: #18569 merged 2026-06-30 22:06 UTC

Clone this wiki locally