-
Notifications
You must be signed in to change notification settings - Fork 1k
13.6 Change log
47 new features, 58 improvements, 114 bug fixes
- π AppHost
- π» CLI
- π Dashboard
- π§ Engineering
- π§© Extensions
- π Integrations
- π Templates
- π§ͺ Testing
βΉοΈ 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-09-29 18:34 β π Stabilize Aspire.Hosting.Dotnet APIs
- 2026-09-28 23:35 β π§© Terminal dock, detached windows, and new rendering engine
- 2026-09-28 16:57 β π¬ CLI terminal automation and tape commands
- 2026-09-28 16:56 β π Keep dashboard run menu open when pinning
- 2026-09-26 01:31 β π§Ή Fix dashboard filter badges and toolbar navigation
- 2026-09-26 01:30 β π Run persistence help in dashboard
- 2026-09-26 01:29 β π Avoid JSDisconnectedException telemetry during dashboard layout initialization
- 2026-09-25 20:23 β π« Remove redundant experimental annotations from Azure Sandboxes
- 2026-09-25 17:45 β β¨οΈ Docked REPL commands for database and cache integrations
- 2026-09-25 17:42 β β‘ Enable multithreaded .NET project builds
6 new features, 12 improvements, 24 bug fixes
-
π Executable references to container-network endpoints
Executables and projects can now reference endpoints on Aspire's default container network, so a self-reference or reference to another executable no longer waits indefinitely for an allocation that was never produced. UseGetEndpoint(name, KnownNetworkIdentifiers.DefaultAspireContainerNetwork)to resolve the container-network address for an endpoint.
Owner: @danegsta
Changes: #20214
Docs: microsoft/aspire.dev#1723
π Documentation required -
π₯οΈ AppHost-owned interactive terminals
The AppHost can now create and own interactive terminal processes independent of resources orchestrated by DCP, via new experimentalTerminalService,AspireTerminal, andTerminalLaunchOptionsAPIs inAspire.Hosting.ApplicationModel. Terminals can be placed in the dashboard dock, shown in a dialog viaIInteractionService.PromptTerminalAsync, or run headlessly for automation, enabling scenarios like authenticating an external tool or running interactive setup from AppHost code.
Owner: @mitchdenny
Changes: #19887, #20261
Docs: microsoft/aspire.dev#1684, microsoft/aspire.dev#1726
π Documentation required -
π DotnetProjectResource publishing support
AddDotnetProject()resources can now be published and deployed, matching the capabilities already available toAddProject()resources. Docker Compose, Kubernetes, Azure Container Apps, Azure App Service, Azure Sandboxes, Foundry, and Radius publishers all recognize publishable .NET program resources, and EF Core migration and hosted Blazor scenarios work with the newer Project V2 model.
Owner: @karolz-ms
Changes: #19997
π Documentation required -
π Portable volume path environment variables
Volume mount paths can now be resolved through environment variables, so the same volume configuration works whether a project or executable runs locally on the host filesystem or in a container under Docker Compose, Kubernetes, or Azure Container Apps.
Owner: @mitchdenny
Changes: #19404
Docs: microsoft/aspire.dev#1593
π Documentation required -
π± Expose resolved environment variables to debug launch producers
Debug launch configuration producers can now read Aspire-resolved environment variables through a new context-basedWithDebugSupportoverload, enabling IDE launch configurations that depend on resolved values.
Owner: @adamint
Changes: #19077
π Documentation required -
π§° Local tool manifest support for AppHost DNX invocation
C# AppHosts can now opt into DNX resolution that honors an in-scope .NET local tools manifest, letting a repository pin the Aspire.Cli version used to launch the AppHost viadotnet run.
Owner: @DamianEdwards
Changes: #19310
π Documentation required
-
β‘ Enable multithreaded .NET project builds
Project V2's coordinated build and rebuild commands now use MSBuild's multithreaded task execution (-mt) when the selected .NET SDK supports it, reducing the time it takes for coordinated project builds to complete and the dashboard to reach full readiness.
Owner: @karolz-ms
Changes: #20441
Docs: microsoft/aspire.dev#1744 -
π Consistent socket and directory permissions
Aspire now applies consistent default permissions to the Unix domain sockets it creates and the parent directories within the user's ~/.aspire folder, reducing the risk of unintended local access.
Owner: @mitchdenny
Changes: #20427 -
π Portable connection-string environment variable aliases
Connection-string environment variables now separate the logical .NET configuration name from the physical environment-variable name.WithReferenceemits both the legacy alias (e.g.ConnectionStrings__my-db) and a portable alias without-(e.g.ConnectionStrings__my_db) when supported, while strict deployment targets such as Azure App Service and Kubernetes emit only the portable alias. Updated Aspire client integrations resolve the logical name first, then fall back to the portable key; consumers using older integrations or directIConfigurationlookup on strict targets can migrate explicitly withWithReference(database, connectionName: "my_db").
Owner: @sebastienros
Changes: #19729
Docs: microsoft/aspire.dev#1778
β οΈ Breaking change
π Documentation required -
β‘ Unified restore for Project V2 builds
Project V2's coordinated builds now restore compatible project groups together in a single NuGet graph instead of restoring each root project separately, reducing redundant restore work and improving startup performance. Projects that need per-project restore hooks can opt back in withAspire:Dotnet:RestoreProjectsIndividually.
Owner: @karolz-ms
Changes: #20294
Docs: microsoft/aspire.dev#1722
π Documentation required -
βοΈ Distinct icon for Azure environment resource
The dashboard's Resources page now shows a filled cloud-and-cube icon for the azure-environment control resource instead of the generic cog fallback, making it easier to identify at a glance.
Owner: @maddymontaquila
Changes: #20011
Docs: microsoft/aspire.dev#1664
π Documentation required -
ποΈ Coordinated project build phase
Project resources now share one coordinated initial build phase instead of building independently, preventing nondeterministic failures when multiple services reference the same .csproj and write to shared bin/obj directories concurrently.
Owner: @karolz-ms
Changes: #19678
π Documentation required -
π Hide Azure environment when all resources use emulators
The azure-environment resource is now hidden in the dashboard when every Azure resource in the model runs through a local emulator, since there is nothing to provision.
Owner: @eerhardt
Changes: #19843
Docs: microsoft/aspire.dev#1618 -
π Harden interaction file uploads
File uploads in interactions are now consistently enforced across the Dashboard, CLI, and custom clients: upload counts respect AllowMultipleFiles, uploads are bounded instead of unbounded, and client-provided filenames are sanitized before use.
Owner: @JamesNK
Changes: #19488
Docs: microsoft/aspire.dev#1554
π Documentation required -
βοΈ Support advanced dotnet invocation options
Executable-annotated project resources now recognize additional supporteddotnetcommand prefixes (likedotnet --diagnostics runordotnet -d watch), so more valid invocation styles get the expected configuration and launch-profile handling instead of being skipped.
Owner: @karolz-ms
Changes: #19352 -
π Move progress prompt title to options
The interaction service's progress prompt title is now configurable through options rather than a fixed positional parameter, making the API more flexible and consistent across C# and polyglot AppHosts.
Owner: @JamesNK
Changes: #19382 -
β οΈ Require confirmation before change-location deletes Azure resources
Thechange-locationdev-time command previously could delete and recreate an existing location-immutable Azure resource without warning, risking permanent data loss. It now requires an explicit confirmation (--confirm-deleteon the CLI, a dashboard warning checkbox, orarguments.confirmDelete=truevia MCP) before deleting a live Azure resource.
Owner: @IEvangelist
Changes: #19345
π Documentation required -
β οΈ Warn when the update notification can't be dismissed
When clicking Ignore on the AppHost update notification silently failed because user secrets weren't configured correctly, the notification kept returning on later runs. The AppHost now logs a warning explaining the failure and links to user-secrets documentation.
Owner: @JamesNK
Changes: #19162
-
π Fix log streaming for terminal-backed executables
Fixed a DCP400 BadRequestwhen reading logs for terminal-backed executables (WithTerminal()). Aspire no longer requests unavailable separate stdout/stderr streams for these executables; startup and system logs remain visible viaaspire logs, the dashboard, and other log subscribers.
Owner: @karolz-ms
Changes: #20317
Docs: microsoft/aspire.dev#1717 -
π‘οΈ Fix startup crash from stale pending DCP address observations
Fixed a startup crash ("Service should have valid address at this point") caused by a stale, pending DCP service observation overwriting an already-allocated endpoint port with 0 right before workload endpoints were created. Pending address data can no longer regress a usable allocation.
Owner: @danegsta
Changes: #20326 -
π©Ή Fix file-based C# resource launch in unsupported IDE sessions
File-based C# resources (bare.csfiles) now run using primary process execution when Visual Studio's IDE session can't load them as a project, instead of incorrectly attempting IDE-based debugging. VS Code.csdebugging is unaffected.
Owner: @karolz-ms
Changes: #20243
Docs: microsoft/aspire.dev#1721 -
π Fixed duplicate resource-stopped notifications during restart
Fixed a bug where an OnResourceStopped handler that initiates a restart could receive a duplicate callback for the same stop, because restart preparation changed the snapshot state that was being compared. The handler now fires exactly once per real stop.
Owner: @JamesNK
Changes: #20279
Docs: microsoft/aspire.dev#1705 -
π Preserve explicit Kestrel certificate configuration
WithProjectDefaultsno longer overwrites an explicit Kestrel certificate configuration (Kestrel__Certificates__Default__Path,KeyPath, orSubject) set viaWithHttpsCertificateConfiguration. Previously the built-in PFX default replaced the certificate path while leaving a stale key path, producing a mixed PFX/PEM configuration that Kestrel rejected with "The provided key file is missing or invalid."
Owner: @karolz-ms
Changes: #20133
Docs: microsoft/aspire.dev#1669
π Documentation required -
π Terminal-host telemetry now opt-in
Terminal-host telemetry fromWithTerminal()is now disabled by default, so its hidden helper resources no longer show up in the dashboard's telemetry resource list (including the Traces filter) unless explicitly opted into withShowTerminalHost = true.
Owner: @mitchdenny
Changes: #20005
Docs: microsoft/aspire.dev#1651 -
βΈοΈ Fix Helm cleanup ordering for AKS destroy
aspire destroy no longer fails for AKS deployments when the cluster isn't already selected in the ambient kubeconfig; a dedicated credential step now runs before Helm cleanup so it doesn't race resource-group deletion.
Owner: @sebastienros
Changes: #19243
Docs: microsoft/aspire.dev#1620 -
π― Avoid ephemeral executable target port collisions
DCP no longer briefly releases an ephemeral port between reservation and use when allocating executable target ports, closing a window where an unrelated outbound connection could claim the port and cause workloads like the dashboard to fail binding.
Owner: @danegsta
Changes: #19822 -
π Fix polyglot AppHost settings discovery from project root
Polyglot AppHosts now loadappsettings.jsonand other configuration files from the guest AppHost's project root instead of the CLI-owned server directory, so configuration files placed next toapphost.mtsare discovered correctly.
Owner: @sebastienros
Changes: #19719 -
π Isolate deployment state for source-file AppHosts
Source-file AppHosts in the same directory previously shared a directory-scoped deployment-state identity, letting one AppHost read or clear state belonging to a sibling. Each source AppHost now gets its own deployment-state identity while preserving safe access to legacy state during migration.
Owner: @spboyer
Changes: #19709
π Documentation required -
β±οΈ Extend DCP startup timeout through API readiness
AppHost startup no longer fails when DCP's kubeconfig is ready but its first API call is still slow. The startup timeout budget now extends through the first successful DCP API operation instead of ending as soon as the kubeconfig is parsed.
Owner: @adamint
Changes: #19641 -
π Fix Kubernetes hostname publishing and routing
Kubernetes publishing no longer hardcodes runtime-only hostname parameter values or leaves hostless Ingress paths and Gateway routes as catch-all rules, soWithHostname(...)provides the documented routing scope andpublishValueAsDefault: falseis honored for these resources.
Owner: @mitchdenny
Changes: #19430
Docs: microsoft/aspire.dev#1574 -
β±οΈ Use separate timeout for DCP initialization
DCP can take longer than 20 seconds to write its initial kubeconfig on contended CI hosts, which previously aborted AppHost startup. Initial kubeconfig discovery and client creation now get a separate 60-second timeout, while subsequent DCP API calls keep the existing 20-second timeout.
Owner: @adamint
Changes: #19636 -
π Fix DevTunnel endpoint URL publication
After upgrading to Aspire 13.5, DevTunnel port resources could become Running and Healthy while the Dashboard and MCP resource snapshots still reported no URLs. The proxyless endpoint allocator's temporary localhost port assignment forDevTunnelPortResourceis now handled correctly, restoring endpoint URL publication.
Owner: @danegsta
Changes: #19590
Docs: microsoft/aspire.dev#1570 -
π Avoid duplicate dashboard connection metadata
Azure provisioning could raiseConnectionStringAvailableEventmultiple times for a resource, causing duplicate dashboard connection metadata and duplicate-property warnings. Publishing connection metadata is now idempotent, replacing existingresource.connectionStringandresource.connectionPropertiesvalues by property name instead of appending duplicates.
Owner: @sebastienros
Changes: #19613 -
β Fix incomplete Kubernetes values for embedded parameters
Kubernetes publishing now declares embedded config and secret parameters invalues.yamlinstead of emitting Helm references without the corresponding values, fixing incomplete generated output such ashttp:///test.
Owner: @mitchdenny
Changes: #19429
Docs: microsoft/aspire.dev#1565 -
π Stop redisplaying dismissed parameters notification
Dismissing the unresolved-parameters notification no longer causes it to immediately reappear; parameters remain unresolved but can still be set from their resource commands.
Owner: @JamesNK
Changes: #19336 -
πͺͺ Detect principal type from credential
The Bicep provisioner now detects the actual principal type from the Azure credential instead of hardcoding "User", fixing role-assignment failures when the AppHost runs under a service principal or federated workload identity (e.g., CI/CD pipelines, Codespaces).
Owner: @denisivan0v
Changes: #18063
π Community contribution by @denisivan0v -
π§Ή Handle SIGTERM in terminal host and clean up orphaned sockets
WithTerminal()could leave orphaned per-replica Unix-domain sockets under~/.aspire/trmnl/when a terminal host was stopped with SIGTERM or its owning AppHost exited unexpectedly. Terminal lifecycle cleanup is now resilient across graceful stops, forced termination, crashes, PID reuse, reboots, containers, and concurrent AppHosts.
Owner: @IEvangelist
Changes: #19344 -
πΆοΈ Fix secret leak in describe for owning resources
aspire describe --format jsonredacted generated secret parameters (such as passwords created byAddPostgres) when they flowed into a dependent resource, but still leaked the plaintext value via the owning resource's own environment variable (e.g.POSTGRES_PASSWORD). Redaction discovery now walks the full dependency graph so owning resources' own secret env vars are redacted too.
Owner: @IEvangelist
Changes: #19248
Docs: microsoft/aspire.dev#1499 -
π TypeScript AppHosts now trust the dev certificate
TypeScript AppHosts now trust the ASP.NET Core development certificate when custom AppHost code opens TLS connections to Aspire-managed resources in run mode, fixing TLS handshake failures for polyglot AppHosts.
Owner: @danegsta
Changes: #15634 -
π οΈ Fix custom IDE project launch argument separator regression
Fixed a regression where custom IDE project launches (such as Azure Functions) that combined launch-profile and AppHost arguments received an invaliddotnet -- ...separator, producing a broken command line.
Owner: @karolz-ms
Changes: #19306 -
β±οΈ Fix hang when waiting on an unavailable resource that doesn't exist
CallingWaitForResourceHealthyAsyncwithWaitBehavior.StopOnResourceUnavailablefor a resource name that isn't registered in the application model used to hang indefinitely. The wait now checks the application model upfront and stops immediately when the resource doesn't exist.
Owner: @mitchdenny
Changes: #17351
π Community contribution by @rsd-darshan -
π¦ Fix deployment hang from route-less Gateways and Ingresses
Deploying an AppHost with a Gateway that had no routes (or an Ingress with no paths) could makeaspire deployhang for around 15 minutes waiting on Kubernetes objects that were never created, and could leave TLS certificates stuck in a pending state. Route-less Gateways and path-less Ingresses are now consistently excluded from all TLS and deployment steps, and a clear warning names what was skipped.
Owner: @mitchdenny
Changes: #19220
Docs: microsoft/aspire.dev#1470
π Documentation required
11 new features, 10 improvements, 22 bug fixes
-
π¬ CLI terminal automation and tape commands
The CLI adds terminal commands (terminal attach,terminal ps,terminal tape,terminal tape play) for inspecting and driving AppHost-owned or resource terminals, including a VHS-style tape subset for scripted input/wait sequences and recording final screen output for automation and testing scenarios. These commands no longer require enabling thefeatures.terminalCommandsEnabledfeature flag.
Owner: @mitchdenny
Changes: #19887, #20548
Docs: microsoft/aspire.dev#1684
π Documentation required -
π§ Project v2 migration skill for AI agents
The Aspire CLI's agent-init skill installer now embeds the official attested Project v2 migration skill, giving AI coding agents an approval-first workflow for migrating AppHosts to Project v2.
Owner: @karolz-ms
Changes: #20405
π Documentation required -
π Firefox NSS certificate support in the CLI
The CLI's development-certificate trust support now recognizes Firefox NSS certificate databases under XDG_CONFIG_HOME. The override is now exposed as standard Aspire configuration (certificates.nssDbPaths, including user-level~/.aspiresettings) instead of a dedicated environment variable, and takes precedence over the existingDOTNET_DEV_CERTS_NSSDB_PATHSupstream environment variable.
Owner: @danegsta
Changes: #20210, #20298
Docs: microsoft/aspire.dev#1716, microsoft/aspire.dev#1725
π Documentation required -
π aspire update now updates repository CLI manifest pins
aspire updatenow updates repository-local Aspire CLI tool manifest pins (.config/dotnet-tools.json,dotnet-tools.json, andpackage.json) alongside AppHost integration updates, instead of treating CLI version pinning as a--self-only operation. Restoring/installing the updated CLI and refreshing lockfiles remains the package manager's responsibility;aspire update --selfis unchanged.
Owner: @eerhardt
Changes: #20295
Docs: microsoft/aspire.dev#1715
π Documentation required -
π§Ή Opt-in volume cleanup for aspire stop
Theaspire stop --forcecommand now supports an opt-in--volumesflag to also remove persistent volumes created by the AppHost, while preserving them by default.
Owner: @danegsta
Changes: #20195
Docs: microsoft/aspire.dev#1729, microsoft/aspire.dev#1746
π Documentation required -
π New
--file-basedoption foraspire init
Added--file-basedtoaspire initso an empty, file-based C# AppHost can be scaffolded in the current directory without .NET solution discovery, avoiding unwanted prompts or solution-based scaffolding caused by incidental.sln/.slnxfiles.
Owner: @mitchdenny
Changes: #20004
Docs: microsoft/aspire.dev#1648
π Documentation required -
π¦ Deno support for TypeScript AppHost
The CLI's TypeScript AppHost toolchain resolver now detects and supports Deno 2+ projects, adding scaffolding, doctor diagnostics, CI images, and VS Code debugger handoff.
Owner: @sebastienros
Changes: #18627
π Documentation required
π Community contribution by @rickylabs -
π€ Detect GitHub Copilot App as an agent client
aspire agent initnow detects and configures the GitHub Copilot App as an agent client, not just Copilot CLI, since both share the Copilot runtime, MCP configuration, skills, and hooks.
Owner: @ellahathaway
Changes: #19820
π Documentation required -
π Export canonical TypeScript API data from the CLI
Addedaspire sdk export, which emits a deterministic TypeScript API reference as JSON forAspire.Hostingat the running CLI SDK version, or for an exactPackageName@Versionsupplied with--package. Generated TypeScript signatures and the exported documentation model now share the same projector.
Owner: @adamint
Changes: #19032
π Documentation required -
π¦ Launch profile selection for aspire run and start
Added--launch-profile <name>(and the-lpalias) toaspire runandaspire start, letting users pick a specific launch profile. When the direct AppHost launcher can't safely reproduce the selected profile, the request is forwarded todotnet runso the .NET SDK remains responsible for validation and diagnostics.
Owner: @adamint
Changes: #19494
π Documentation required
π Community contribution by @prom3theu5 -
π¦ Enable the CLI bundle in generated C# AppHosts
New C# AppHost templates andaspire initsingle-file AppHosts now opt into the Aspire CLI bundle by default. Generated projects use bundled dashboard and DCP components without requiring a manualAspireUseCliBundleopt-in.
Owner: @DamianEdwards
Changes: #19076
Docs: microsoft/aspire.dev#1483, microsoft/aspire.dev#1511, microsoft/aspire.dev#1586
π Documentation required
-
π In-process NuGet operations in the CLI
Bundled NuGet operations (search, restore, and package inspection) now run in-process in the nativeaspire.exeinstead of launching a separateaspire-managedhelper process. This also enables installed NuGet credential provider plugins (for example, for Azure Artifacts) to authenticate feeds that previously returned 401 errors.
Owner: @eerhardt
Changes: #19847, #20391
π Documentation required -
π MCP configuration now opt-in in agent setup
The chained agent setup inaspire newandaspire initno longer offers to install the Aspire MCP server, and non-interactiveaspire agent initnever selects MCP through its default skill set. The standaloneaspire agent initcommand still lets you opt in with a new--mcpconfirm prompt, unselected by default.
Owner: @ellahathaway
Changes: #19893
β οΈ Breaking change
π Documentation required -
π Harden CLI Sigstore/TUF trust root verification
Updated the Aspire CLI's Sigstore and TUF dependencies to 1.0.1, refreshing the embedded TUF trust root and hardening sequential trust-root rotation verification used for CLI provenance checks.
Owner: @mitchdenny
Changes: #19595 -
π Aspire CLI executables signed with Microsoft certificate
Windows and Linux Aspire CLI executables are now signed with Arcade's general Microsoft first-party certificate instead of the .NET-specific certificate, so the publisher identity shown to users reflects Microsoft.
Owner: @DamianEdwards
Changes: #19686 -
π Reusable CLI resource observation for describe and wait
aspire describe --follownow streams from a single resource snapshot subscription for both initial state and later updates, andaspire waituses a shared typed wait service with consistent timeout, cancellation, and failure handling.
Owner: @adamint
Changes: #19567
Docs: microsoft/aspire.dev#1591
π Documentation required -
π Harden Aspire skills bundle caching
The Aspire skills cache is now keyed by both bundle version and archive SHA-512 digest, so an updated skills bundle whose contents changed without a version bump is no longer served from a stale cached extraction.
Owner: @ellahathaway
Changes: #19068 -
π¨ Color statuses in aspire ps output
aspire psnow color-codes known resource statuses in table output βrunningin green andstoppedin red β making it easier to scan AppHost state at a glance. JSON output is unchanged.
Owner: @JamesNK
Changes: #19369 -
π Use SHA-512 for Aspire Skills bundle integrity checks
The Aspire Skills bundle now verifies integrity using SHA-512 instead of SHA-256, aligning with the CLI acquisition scripts, and the previewaspireSkillsRemoteFetchEnabledtoggle is hidden from user-facing surfaces.
Owner: @IEvangelist
Changes: #19303 -
π‘ Honor ASPIRE_HOME for deployment state
Deployment state now respects the CLI's effectiveASPIRE_HOMEinstead of always writing to the persistent user profile, which was breaking isolated CI runs and side-by-side CLI usage. Deployment parameters and secrets are stored under<ASPIRE_HOME>/deployments/<AppHostSha>/<environment>.json, with~/.aspireretained as the fallback.
Owner: @sebastienros
Changes: #19244
π Documentation required -
π¬ Clearer error message when no AppHost is found
When no AppHost can be found, the CLI's error message now correctly names the--apphostoption instead of referring to a nonexistent "project argument", and no longer implies .NET-only projects.
Owner: @adamint
Changes: #19069
-
π Fix aspire stop hang from auxiliary backchannel shutdown race
aspire stopcould hang while scanning AppHosts when an auxiliary backchannel connection was accepted just as the AppHost began shutting down. Accepted connections are now tracked and drained during shutdown so clients observe disconnection promptly instead of the AppHost hanging.
Owner: @danegsta
Changes: #20319 -
π Honor selected launch profile in bundled dotnet run
dotnet run --launch-profile <name>now honors the selected profile when it delegates toaspire runwith CLI bundles enabled, instead of always falling back to the first profile.
Owner: @karolz-ms
Changes: #19958
π Community contribution by @gabisonia -
π CLI MessagePack dependency vulnerability fix
The CLI's transitive MessagePack dependency is pinned to 2.5.302, removing two known vulnerabilities (CVE-2026-48109 and CVE-2026-48506) without changing RPC contracts, serializers, or the NativeAOT StreamJsonRpc preview.
Owner: @joperezr
Changes: #20071 -
π― VS Code now preselects CLI-default agent assets
The VS Code Quick Pick for AI agent skills duringaspire newandaspire initnow preselects the same skill location and bundled skills that the Aspire CLI terminal prompt already defaults to, instead of opening with nothing checked.
Owner: @ellahathaway
Changes: #19996
Docs: microsoft/aspire.dev#1660
π Documentation required -
π Fixed extension CLI teardown during AppHost build
Stopping a dynamic debug session no longer force-exits the Aspire CLI while a cold single-file AppHost build is still running. Extension stop requests now route through the CLI's normal cancellation and process-tree cleanup, preventing orphaned build processes from locking their working directory.
Owner: @ellahathaway
Changes: #20021 -
β±οΈ Don't count AppHost builds against CLI startup timeout
aspire run and detached aspire start no longer count time spent restoring and building the AppHost against the startup timeout, fixing misleading timeout failures for cold or large solutions.
Owner: @ellahathaway
Changes: #19478
Docs: microsoft/aspire.dev#1619 -
π₯οΈ Avoid live CLI rendering when stdout is redirected
The CLI no longer enters live Spectre rendering when stdout is redirected (e.g. in a Remote SSH session), fixing a crash that could also stop the AppHost.
Owner: @adamint
Changes: #19673 -
π§ Match AppHosts across equivalent filesystem paths
The CLI now compares AppHost identities using a filesystem-canonical path, so it correctly discovers and reconnects to a running AppHost even when it's referenced through paths that differ by Windows casing, Unix symbolic links, or macOS/varfirmlinks.
Owner: @danegsta
Changes: #19762 -
β±οΈ Bound AppHost auxiliary backchannel handshake
An AppHost that accepts its auxiliary socket but never answers JSON-RPC can no longer hangaspire run,aspire ps,aspire stop, or other backchannel-scanning commands indefinitely β a 10-second deadline is now enforced around the handshake.
Owner: @adamint
Changes: #19832 -
π Persist CLI channel across self-updates
The Aspire CLI now records its install channel in a sidecar file that is updated on self-update, soaspire update --channel stagingno longer falls back to resolving stable after a subsequent update.
Owner: @mitchdenny
Changes: #19469 -
𧬠Preserve TypeSystem compatibility with older CLIs
TypeScript and Java AppHost codegen now probe for newer Aspire.TypeSystem members before using them, fixing a MissingMethodException/TypeLoadException when a newer SDK's generated code runs against an older installed CLI.
Owner: @adamint
Changes: #19506 -
π Preserve the default AppHost for explicit runs
Running aspire run --apphost no longer overwrites the configured default AppHost, so a later bare aspire run keeps using the original default.
Owner: @adamint
Changes: #19394 -
β³ Bound Aspire CLI process termination wait
Aspire CLI bundle setup commands that exceed their timeout now have a bounded five-second post-termination wait, so MSBuild reports a clear cleanup timeout instead of waiting indefinitely for process termination to complete.
Owner: @karolz-ms
Changes: #19367 -
π©Ή Tolerate credential-provider stdout preamble in package search
aspire addpackage search no longer fails when the NuGet Azure Artifacts Credential Provider writes progress lines to stdout before the JSON payload on an authenticated feed.
Owner: @IEvangelist
Changes: #19343 -
π¦ Fixed mixed-quality staging package discovery
The TypeScript/polyglotaspire addpath no longer filters stable-shaped staging feeds as stable-only, so integrations that intentionally remain prerelease (like Azure Kubernetes) are discovered again instead of disappearing from search results.
Owner: @mitchdenny
Changes: #19426 -
π¦ Fix npm registry hard-coded to internal feed
A previous change accidentally made the internal dnceng Azure Artifacts feed the customer-facing default npm registry, which returns 401 for uncached tarballs and brokeaspire agent initwhen installing packages such asplaywright. The public npm registry is restored as the default in generated Dockerfiles andaspire newtemplates.
Owner: @IEvangelist
Changes: #19388 -
π Fix developer certificate generation deadlock on Unix/macOS
Synced the vendored ASP.NET Core certificate generation source to pick up a Unix/macOS process deadlock fix, avoiding hangs when generating developer HTTPS certificates.
Owner: @sebastienros
Changes: #19320 -
β±οΈ Bound the NuGet package search timeout
aspire addno longer hangs indefinitely when the bundled NuGet helper is searching package metadata; a 3-minute timeout now produces a clear timeout error instead of waiting for the 10-minute CI hang timeout.
Owner: @adamint
Changes: #19178 -
π§± Fix misleading AppHost build failure diagnostics
When an AppHost exists but fails MSBuild evaluation, Aspire CLI now preserves the user-selected project and surfaces the real build diagnostics instead of incorrectly claiming that no AppHost was found.
Owner: @DamianEdwards
Changes: #19082
Docs: microsoft/aspire.dev#1523
π Community contribution by @ellahathaway -
π₯οΈ Suppress CLI progress spinners when console logging is enabled
CLI commands that emit console or debug logs now keep readable status messages without interactive spinner frames. Aspire still reports progress, but renders it as stable text so verbose logging no longer interleaves with spinner output.
Owner: @JamesNK
Changes: #19214, #19272 -
π©Ί Resolve dotnet paths consistently in doctor checks
aspire doctorlaunched .NET SDK and deprecated-workload checks using the baredotnetexecutable name. It now resolvesdotnetthrough the CLI's shared path-lookup logic before starting the process, so checks consistently use the executable selected fromPATH.
Owner: @JamesNK
Changes: #19232 -
π Fix CLI hang on macOS from inherited TTY stdin
Fixed a hang on macOS where aspire new/init/add/restore for the TypeScript starter would silently stall because a spawned guest process inherited the parent CLI's TTY and blocked on a stdin read.
Owner: @spboyer
Changes: #17562
3 new features, 18 improvements, 31 bug fixes
-
π§© Terminal dock, detached windows, and new rendering engine
The dashboard adds a persistent, resizable, tabbed terminal dock and detached terminal windows for interacting with AppHost-owned or resource terminals, alongside a new state-based rendering engine (@hex1b/web-terminal) that replaces xterm.js with Kitty Graphics Protocol and Sixel support, improved copy/paste, a WebGPU renderer with WebGL2 fallback, and font-size/sizing controls that persist across dock and detached windows. The dock's empty state was simplified to a console icon, heading, documentation link, and backtick-key hint, and the Terminals header button and mobile navigation entry were removed in favor of the backtick shortcut.
Owner: @mitchdenny
Changes: #19887, #20541, #20562
Docs: microsoft/aspire.dev#1684
π Documentation required -
π Run persistence help in dashboard
The dashboard run selector now includes a Learn about runs option that opens the run-persistence documentation, helping users understand live, historical, and pinned runs. The run button's light-theme hover and pressed states are also lightened.
Owner: @JamesNK
Changes: #20510
Docs: microsoft/aspire.dev#1764
π Documentation required -
ποΈ Dashboard run history and persistence
The Dashboard can now persist resources and telemetry to SQLite, so you can inspect completed application runs, compare telemetry before and after code changes, or resume a standalone Dashboard's data across restarts. A new run selector in the header lets you switch between the live run and historical runs.
Owner: @JamesNK
Changes: #18924
Docs: microsoft/aspire.dev#1649
π Documentation required
-
π¬ Animate terminal dock on first open
The terminal dock now slides into view with an animation the first time it's opened after a dashboard refresh, instead of appearing instantly.
Owner: @JamesNK
Changes: #20432 -
πΌοΈ Aspire Dashboard application icon
The Aspire Dashboard executable now displays the Aspire icon in Windows Task Manager, File Explorer, and other shell surfaces, matching the icon already used by the CLI and managed host executables.
Owner: @JamesNK
Changes: #20306 -
π Native AOT dashboard with Fluent UI v5
The Aspire Dashboard can now publish and run as a standalone Native AOT executable, using an updated Fluent UI v5 across grids, dialogs, filters, charts, and log/telemetry views.aspire dashboard runand AppHost startup select the AOT dashboard automatically, with no new command-line options required.
Owner: @JamesNK
Changes: #19565
Docs: microsoft/aspire.dev#1714
π Documentation required -
π Higher dashboard log and trace retention limits
Default console log, structured log, and trace retention limits increased from 10,000 to 100,000 entries, keeping more diagnostic history available during longer runs. The limits remain configurable viaDashboard:Frontend:MaxConsoleLogCount,Dashboard:TelemetryLimits:MaxLogCount, andDashboard:TelemetryLimits:MaxTraceCount.
Owner: @JamesNK
Changes: #20169
π Documentation required -
π§΅ Improved Fluent UI overflow handling
Updated the dashboard's Fluent UI library to a preview build that fixes a global overlay spinner flash. Overflow menus for resource URLs, metric filter tags, and trace span summaries now keep their intrinsic width and stay bounded for large collections, and single resource URLs truncate with an ellipsis when a grid column is too narrow.
Owner: @JamesNK
Changes: #20176 -
π°οΈ Dimmed links in historical dashboard runs
Links from historical dashboard runs (resource URLs, console log links, and property-grid/text-visualizer links) now render at reduced opacity to visually distinguish them from the current run. Switching back to the current run restores normal opacity.
Owner: @JamesNK
Changes: #20171 -
π« Show incompatible dashboard runs as disabled
The dashboard run selector now shows runs with an incompatible schema version as disabled items instead of hiding them, with a tooltip explaining why and the ability to pin them before retention removes them.
Owner: @JamesNK
Changes: #20082 -
π±οΈ Improved dashboard scroll-to-bottom behavior
The scroll-to-bottom button on console logs, structured logs, and traces no longer flashes during initial scroll restoration, hides immediately on click, and reliably reaches the latest content even while native smooth scrolling is still animating.
Owner: @JamesNK
Changes: #20139 -
ποΈ Flattened dashboard persistence directory layout
Dashboard persistence now stores all run snapshots directly under a sharedrunsdirectory instead of nesting them under an application-specific directory, and resume-mode databases move to a sharedresumesdirectory. No configuration changes are required, and existing retention, pinning, locking, and run-selection behavior is preserved.
Owner: @JamesNK
Changes: #20006
Docs: microsoft/aspire.dev#1665 -
π¨ Matched grid column popups to dashboard styling
Grid column menus and column-width popups now match the dashboard's standard popup styling, with left-aligned labels, accent-colored icons, and consistent background instead of the previous mismatched Fluent UI v5 defaults.
Owner: @JamesNK
Changes: #20080 -
π¨ Dashboard migrated to Fluent UI Blazor v5
The Aspire Dashboard now uses Fluent UI Blazor v5, refreshing dialogs, notifications, menus, grids, tabs, trees, and selectors while keeping familiar navigation and filtering workflows across Resources, Console Logs, Structured Logs, Traces, and Metrics.
Owner: @JamesNK
Changes: #19431 -
πΈοΈ Improve resource graph action discoverability
Resource nodes in the dashboard Graph view now show a cog icon on hover to open the resource's context menu, making its actions easier to discover than right-click alone.
Owner: @IEvangelist
Changes: #19905
Docs: microsoft/aspire.dev#1617 -
βΈοΈ Show consistent pause warnings across dashboard pages
Console logs now show a localized capture-paused warning in the page footer, matching the visibility already given to structured logs and traces. The metrics pause warning has also been moved so it no longer sits below the fold inside scrollable chart content, making the active pause state harder to miss.
Owner: @ellahathaway
Changes: #19624 -
π« Disable autocomplete on dashboard filters
Disabled browser autocomplete on page-level filter boxes across Structured Logs, Traces, Console Logs, Resources, and Trace Detail, so unrelated browser-saved values no longer appear when a filter receives focus. This matches the existing behavior of the Resource, Span, and Structured Log detail filters.
Owner: @JamesNK
Changes: #19044
π Community contribution by @vivekjm -
π Update dashboard metrics graphing library
Updates the Plotly.js bundle used for dashboard metrics graphs from 2.35.2 to 4.0.0-rc.0, keeping the metrics visualization current with the upcoming Plotly.js major release.
Owner: @JamesNK
Changes: #19377 -
π Clearer guidance on dashboard unsecured access risks
Anonymous dashboard access and unauthenticated OTLP ingestion configuration now consistently link to documentation explaining the risks and mitigations, making it easier to understand the tradeoffs before opting in.
Owner: @JamesNK
Changes: #19461
π Documentation required -
π§Ή Lifecycle management for interaction upload files
Uploaded interaction files are now cleaned up based on their lifecycle: files for failed or canceled interaction uploads are removed immediately, and uploads are validated against the owning interaction and input to prevent misuse.
Owner: @JamesNK
Changes: #19322 -
π¨ Official Aspire branding in the dashboard
The dashboard now uses the official Aspire brand palette for accent colors and the embedded logo, replacing colors that had drifted from the current brand while preserving WCAG AA contrast in both light and dark themes.
Owner: @maddymontaquila
Changes: #19247
-
π Keep dashboard run menu open when pinning
Pinning or unpinning a historical run in the dashboard run selector no longer closes the menu, so runs can be compared or organized without reopening the selector each time.
Owner: @JamesNK
Changes: #20546 -
π§Ή Fix dashboard filter badges and toolbar navigation
Dashboard filter badges no longer stay visible with an empty count, narrow resource-details controls wrap instead of overlapping properties, and mobile Resources tab navigation updates the URL immediately unless the filter panel is open.
Owner: @JamesNK
Changes: #20511 -
π Avoid JSDisconnectedException telemetry during dashboard layout initialization
Disconnecting from the dashboard while its layout restores saved navigation state no longer raises an unhandled JSDisconnectedException in telemetry; other browser-storage read errors continue to be logged at Information level.
Owner: @JamesNK
Changes: #20509 -
βοΈ Fix truncation of selected dropdown values
Long selected resource names in dashboard dropdowns are now truncated with an ellipsis instead of being hard-cut, making it clear the value is shortened.
Owner: @JamesNK
Changes: #20430 -
β¨οΈ Fix dashboard shortcut availability
Standalone dashboards without the resource service no longer advertise or execute shortcuts for the unavailable Resources and Console Logs pages, and shortcut help now reflects the running configuration.
Owner: @JamesNK
Changes: #20431 -
π±οΈ Fix scrollbars in Events grid cells
Trace details Events grid cells no longer show internal scrollbars when span events contain nested attribute grids, keeping event names and attributes fully visible.
Owner: @JamesNK
Changes: #20429 -
π±οΈ Fix dashboard menu reopen and terminal focus after Fluent UI v5 migration
Fixed dashboard regressions introduced by the Fluent UI v5 migration: resource graph context menus now reopen reliably right after pressing Escape or clicking away, and terminal auto-fit sizing no longer steals keyboard focus from the control the user is actively using.
Owner: @JamesNK
Changes: #20341, #20410 -
π§ Dashboard popup positioning fixes
Fixed dashboard popups (filters, view options, profile, and URL-overflow) that could misalign with their trigger, overflow the viewport, or close unexpectedly while live metric values were updating.
Owner: @JamesNK
Changes: #20362, #20410
Docs: microsoft/aspire.dev#1728 -
π Reject empty OTLP API keys
The dashboard's OTLP endpoint now rejects an explicitly empty API key, closing a gap where an empty configured secondary key could authenticate a request that sent an emptyx-otlp-api-keyheader.
Owner: @JamesNK
Changes: #20363, #20408 -
πͺ Scope dashboard cookies by application name
Dashboard authentication and antiforgery cookie names, and collapsed-resource storage keys, are now scoped by the configured application name so multiple dashboards on the same hostname no longer interfere with each other's cookies or resource-expansion state.
Owner: @JamesNK
Changes: #20299, #20407
π Documentation required -
π Fixed dashboard startup race on lock file cleanup
Fixed a race on Unix where parallel dashboard processes could delete a lock file another dashboard had just created, causing it to fail to start with an IOException. Only unheld lock files at least a day old are now cleaned up.
Owner: @JamesNK
Changes: #20223 -
π¦ Force WebGL2 for Firefox dashboard terminals
Dashboard terminals now explicitly use the WebGL2 renderer on desktop and Android Firefox to avoid a WebGPU performance issue in that browser, even when WebGPU is otherwise available.
Owner: @mitchdenny
Changes: #20262
Docs: microsoft/aspire.dev#1703 -
π Fixed tall dashboard submenu overflow
Updated the Fluent UI Blazor package to fix tall, nested dashboard menus overflowing outside the viewport instead of staying within it.
Owner: @JamesNK
Changes: #20197 -
π·οΈ Fixed metric filter tag overflow
Metric dimension filter tags no longer truncate unnecessarily when multiple values are displayed side by side. Each tag now keeps its natural width, overflowing values move into the overflow count, and a tag is only ellipsized when it is the sole displayed value and still too wide to fit.
Owner: @JamesNK
Changes: #20220 -
π¨ Fixed dashboard layout and disabled control styling
Fixed dashboard styling regressions: dialogs now expand to fit their content instead of scrolling prematurely, an empty message bar no longer reserves visible space, and disabled text inputs, dropdowns, number inputs, and checkboxes use consistent dark-theme surfaces and cursors.
Owner: @JamesNK
Changes: #20170
Docs: microsoft/aspire.dev#1682
π Documentation required -
β Fixed dashboard selection indicators
Fixed the selection checkmark in the Console Logs settings menu overlapping the label, and removed a stray fallback checkmark that appeared alongside the accent styling in selected Fluent dropdown options.
Owner: @JamesNK
Changes: #20141 -
π§Ή Clean up stale dashboard run locks
The dashboard now cleans up abandoned run lock files left behind by an interrupted process, preventing stale locks from lingering indefinitely while active locks and unrelated files remain untouched.
Owner: @JamesNK
Changes: #20140 -
π Fixed dashboard SQLite cancellation error
Cancelling a dashboard metrics read while a SQLite statement was preparing could surface an unrelated SQLite error instead of a normal cancellation, causing intermittent dashboard metrics failures. Any SQLite failure is now treated as cancellation when the caller's token is already canceled.
Owner: @JamesNK
Changes: #20007 -
π¨ Fixed dashboard disabled and row hover styles
Fixed visual regressions from the Fluent UI v5 upgrade: disabled dropdown options and menu items now share consistent opacity without hover/active/focus backgrounds, and resource and structured log grid rows use the correct light-mode hover color again.
Owner: @JamesNK
Changes: #20084 -
π Fixed dashboard overflow behavior
Resizing the dashboard no longer lets secondary resource URLs or metric dimension values displace the primary value before it is truncated. Filter popups on the Metrics and Resources pages now cap their width and ellipsize long checkbox labels instead of overflowing.
Owner: @JamesNK
Changes: #20079 -
π§Ή Filter blank values from dashboard filter dialog
Filter value comboboxes in the dashboard no longer display blank options with a count, such as an empty trace ID. Empty values are removed from suggestions while non-empty values keep their aggregated counts.
Owner: @JamesNK
Changes: #20081
π Documentation required -
ποΈ Fix SQLite-backed dashboard telemetry filtering
Dashboard telemetry filtering now runs entirely through SQLite for both production and tests, fixing incorrect negative service-name filtering and stale asynchronous filter results clearing a newer structured-log selection.
Owner: @JamesNK
Changes: #19661 -
π Harden Markdown link validation
Markdown links with URLs that couldn't be parsed bySystem.Uriwere previously rendered instead of being blocked. These URLs are now classified as prohibited, closing a gap where browsers or registered protocol handlers could still act on them.
Owner: @JamesNK
Changes: #19698 -
π Restore dashboard unsecured endpoint FWLink
The unsecured endpoint warning in the dashboard UI once again links to the stablehttps://aka.ms/aspire/api-endpoint-unsecuredFWLink instead of a direct security-considerations URL, so the destination documentation can change without requiring a dashboard update.
Owner: @JamesNK
Changes: #19462 -
πΌοΈ Fix Graph view crash for multi-path icons
Fixed a crash in the dashboard's Graph view for resources (such as Azure Blob storage) whose icon uses multiple sibling SVG paths, by combining them into a single compound path before rendering.
Owner: @sebastienros
Changes: #19579 -
π Harden dashboard WebSocket origin validation
The dashboard now validates the Origin header on Blazor Server WebSocket upgrade requests, rejecting cross-origin or malformed connection attempts with 403 Forbidden to prevent unauthorized pages from hijacking a dashboard session.
Owner: @JamesNK
Changes: #19484 -
β©οΈ Revert parent resource state from replicas
Reverted the parent resource state derived-from-replicas change while preserving the resource subscription race fix, restoring the dashboard's previous parent resource state behavior after issues were found.
Owner: @adamint
Changes: #19545 -
π Fix dashboard resource subscription race
Fixed a race between applying a resource update and notifying dashboard subscribers that could cause a newly-registered subscriber to receive both a stale in-flight change and the updated snapshot.
Owner: @JamesNK
Changes: #19534 -
𧬠Update parent resource state from replicas
Dashboard resource rows now reflect the state of their replica child rows, fixing the case where a deployed Azure Container Apps parent row stayed "Scaled to zero" even after one of its replicas reported "Running".
Owner: @adamint
Changes: #18642 -
βΏ Fix Dashboard HTML language under invariant culture
Fixed the Dashboard rendering<html lang="">when running under invariant culture, which broke accessibility tooling; invariant culture now maps tolang="en".
Owner: @sebastienros
Changes: #19331 -
ποΈ Fix database resource peer resolution
The dashboard now resolves database peers more accurately for telemetry spans that share a server address, using the reported database name to prefer the matching database resource instead of attributing spans to the wrong container or sibling database.
Owner: @JamesNK
Changes: #19224
Docs: microsoft/aspire.dev#1508
2 bug fixes
-
πΊ Fixed Homebrew cask deprecation warnings
Fixed the Homebrew cask template sobrew updateand cask validation no longer emit deprecation warnings, and preserved release-binary signing/notarization verification during cask audits.
Owner: @JamesNK
Changes: #19965
π Community contribution by @askpt -
π¦ Restore WinGet publication
Restored WinGet package publication by installing the .NET 9 runtime required by the latest wingetcreate tool, fixing failed release publication to WinGet.
Owner: @radical
Changes: #19551
6 new features, 9 improvements, 17 bug fixes
-
π§΅ Managed Blazor WebAssembly debugging in VS Code
Debugging a Blazor WebAssembly client resource in the VS Code extension now hands the browser launch to the C# extension's managedblazorwasmdebugger instead of always starting a plain JavaScript debugger, so breakpoints set in client C# code are hit directly. Generic browser resources continue to use js-debug.
Owner: @adamint
Changes: #20001
π Documentation required -
β οΈ Warn when VS Code uses an outdated Aspire CLI
VS Code now warns when the Aspire CLI selected for an active extension operation is outdated for its installed published release lane, for example when a stable CLI is older than the latest stable release.
Owner: @ellahathaway
Changes: #19670
Docs: microsoft/aspire.dev#1608
π Documentation required -
π οΈ Debugger setup hints for missing extensions
The VS Code extension now shows setup guidance when a running resource supports debugging (Python, Go, Bun, Rust, Java, .NET MAUI, Azure Functions) but the required language extension isn't installed.
Owner: @adamint
Changes: #19131
π Documentation required -
π Deploy, publish, and pipeline actions in Aspire pane
AppHost items in the Aspire pane now expose Deploy, Publish, Run pipeline step, and Debug pipeline step actions directly, so these operations no longer require finding the matching Command Palette command.
Owner: @adamint
Changes: #19466
Docs: microsoft/aspire.dev#1750
π Documentation required
π Community contribution by @SankeerthNara -
β¨ Create Aspire projects from the pane
The Aspire pane now offers a "Create with Aspire..." action to start theaspire newandaspire initproject creation flows directly from the toolbar, instead of requiring the Command Palette.
Owner: @adamint
Changes: #19539
Docs: microsoft/aspire.dev#1749
π Documentation required
π Community contribution by @SankeerthNara -
π€ Let agents start and stop AppHosts through VS Code
Addedaspire_apphost_startandaspire_apphost_stopLanguage Model tools so AI agents in VS Code can start and stop a discovered AppHost directly instead of spawning a separate CLI process.
Owner: @adamint
Changes: #19134
π Documentation required
-
π οΈ Consolidated VS Code AppHost build failure notifications
AppHost build failures in VS Code now surface as a single consolidated error notification with Open CLI Log and Open AppHost Log actions, instead of separate error and log-path notifications that had to be copied manually.
Owner: @ellahathaway
Changes: #19755
Docs: microsoft/aspire.dev#1605
π Documentation required -
πͺ΅ Deduplicate and colorize AppHost logs in VS Code
AppHost logs shown in the VS Code debug console are now deduplicated across the CLI backchannel, console logger, and .NET debug logger paths and color-coded, making output easier to read.
Owner: @adamint
Changes: #19129 -
π Show Hot Reload advisory only once per workspace
The C# Dev Kit Hot Reload advisory now appears at most once per workspace instead of reappearing after every extension-host reload. It can also be disabled entirely with the newaspire.enableHotReloadNotificationsetting.
Owner: @adamint
Changes: #19672
π Documentation required -
π Retry invalid project creation destinations
Aspire: New Aspire Projectnow reopens the folder picker instead of aborting when the chosen destination is invalid, and unqualified local template resolution now deterministically selects theAspire.ProjectTemplatespackage matching the running CLI version.
Owner: @adamint
Changes: #19300 -
β Prompt for AppHost on ambiguous directory launch
The VS Code extension now prompts you to pick an AppHost when a debug configuration's directory contains multiple buildable AppHosts, instead of failing the launch with no way to disambiguate.
Owner: @adamint
Changes: #19541
π Community contribution by @SankeerthNara -
π³ Scope AppHost lifecycle by git worktree
Running an AppHost from a linked git worktree in VS Code no longer conflicts with the primary checkout's ports and user secrets, andaspire stopwithout--apphostno longer stops an AppHost running in a nested linked worktree.
Owner: @adamint
Changes: #19384
Docs: microsoft/aspire.dev#1745
π Community contribution by @Shaurya2k06 -
ποΈ Show AppHosts from every VS Code workspace root
The VS Code extension's AppHosts view now discovers and combines AppHosts from every open workspace root instead of only the first, so multi-root workspaces show all available AppHosts.
Owner: @adamint
Changes: #19295 -
π Make Aspire extension activity progress dismissible
Long-running Aspire extension activity now shows as window progress instead of a modal notification, so it can be ignored or hidden without blocking the editor while builds, AppHost startup, or dashboard startup continue.
Owner: @adamint
Changes: #19124 -
π₯ Make C# Dev Kit Hot Reload discoverable while debugging
The VS Code extension now surfaces whether C# Dev Kit Hot Reload is enabled for .NET project debug sessions, showing an advisory with a direct link to the relevant setting when Hot Reload is off.
Owner: @adamint
Changes: #19067
-
π Fixed Edge compatibility layer breaking browser debugging
Fixed a VS Code issue where an inherited __COMPAT_LAYER environment variable could cause Edge to replace its initial process during Debug in Browser, leaving the browser stuck at about:blank instead of launching correctly.
Owner: @adamint
Changes: #20152 -
π¦ Fixed Deno debugger missing startup breakpoints
Debugging a Deno resource in the VS Code extension could silently miss breakpoints in startup code because the generated launch released Deno as soon as the debugger connected, before breakpoints were configured. The generated launch now uses--inspect-brkso Deno stays paused until breakpoints are set.
Owner: @ellahathaway
Changes: #20020 -
πͺ Fix unpackaged WinUI debugging
Fixed a crash when debugging unpackaged WinUI 3 project resources through the Aspire VS Code extension by detecting unpackaged WinUI projects and launching them correctly.
Owner: @ellahathaway
Changes: #19877 -
π Consistent CLI notification claim timestamps
Fixed an inconsistency in the Aspire CLI notification claim timestamps used by the VS Code extension's cross-window suppression handshake.
Owner: @ellahathaway
Changes: #19854 -
β Fix Java starter JDK and transport reliability
Fixed the Java starter using the wrong JDK (Java 21 from the ambient process instead of the modeled Java 25 toolchain) and tightened the surrounding Java AppHost path, including Maven wrapper/module resolution and JSON-RPC response routing reliability.
Owner: @adamint
Changes: #19635 -
π¦ Fix Rust AppHost run-session notification routing
Fixed Rust AppHosts launched through CodeLLDB or cppvsdbg sometimes leaving a resource stuck at PID 0 with no logs or proxy, caused by an empty run-session ID being sent to DCP before the Rust resource started.
Owner: @adamint
Changes: #19831 -
π Prevent Aspire view from stealing sidebar focus
Reloading VS Code while another sidebar view was active no longer causes the Aspire view to steal focus and reappear in the Activity Bar; AppHost discovery no longer force-reveals itself when the view is hidden.
Owner: @ellahathaway
Changes: #19754
Docs: microsoft/aspire.dev#1598 -
π Fix dashboard launch blocking AppHost startup
Fixed a VS Code extension issue where a debugger-backed dashboard browser launch could block AppHost startup completion; the browser launch now runs as observed background work instead.
Owner: @adamint
Changes: #19559 -
π‘οΈ Harden Azure Functions VS Code launch lifecycle
Hardened the Azure Functions VS Code launch lifecycle: launch arguments are validated and quoted before building, more POSIX shells (dash, ash, zsh, fish, ksh) are supported, and malformed Core Tools output or invalid worker PIDs are reported with a clear error instead of failing silently.
Owner: @ellahathaway
Changes: #19205 -
ποΈ Fix remembered AppHost folder in multi-root workspaces
In multi-root VS Code workspaces, the extension now remembers which workspace folder's AppHost was selected instead of always resolving to the first folder on a later F5.
Owner: @adamint
Changes: #19359 -
π Honor selected AppHost launch profile in VS Code
The VS Code extension now honors the AppHost launch profile selected inlaunch.jsoninstead of launching with the default profile's environment variables and URL when an older Aspire CLI flattens them.
Owner: @adamint
Changes: #19400 -
β‘ Fix Azure Functions task launch in VS Code
Fixed Azure Functions resources failing to start in current VS Code releases by launching them through an Aspire-owned registeredfunc: host starttask instead of relying on a dynamic task type VS Code doesn't recognize.
Owner: @adamint
Changes: #19313 -
π VS Code debugger fixes for browser targets, webRoot, and shutdown ordering
Fixed VS Code debugger issues: browser debug targets now validate against an explicit allowlist with clearer errors, empty webRoot values no longer break source-map resolution, and resource debug sessions now stop in an ordered, concurrent sequence before the AppHost.
Owner: @adamint
Changes: #19145 -
πͺ Close dashboard debug browsers when sessions end
Stopping an Aspire debug session in VS Code now also closes the dashboard browser by default, preventing orphaned browser windows from accumulating after AppHosts stop.
Owner: @adamint
Changes: #19296 -
π Fix AppHost editor state in symlinked workspaces
CodeLens and gutter resource state now keep working when an AppHost is opened through a symlinked workspace path. The extension falls back to canonical filesystem paths when normalized paths do not match directly.
Owner: @adamint
Changes: #19292 -
π Fix DCP session termination when stopping resources from VS Code
Stopping a VS Code-controlled resource from the Aspire dashboard now reliably emits a single terminal notification and keeps DCP run-session lifecycle consistent across requested stops, natural exits, and stale WebSocket reconnects.
Owner: @adamint
Changes: #19125 -
π― Keep launch-configuration AppHost targets out of the workspace default
Debugging a specific AppHost via alaunch.jsonconfiguration no longer silently overwrites the workspace's default AppHost inaspire.config.json. The default is only established or replaced through normal discovery or explicit user selection.
Owner: @adamint
Changes: #19126
20 new features, 9 improvements, 17 bug fixes
-
β¨οΈ Docked REPL commands for database and cache integrations
Added opt-in dashboard REPL access for PostgreSQL, Redis, Valkey, MongoDB, MySQL, and SQL Server. Selecting the REPL command on a running resource opens the bundled client (psql, redis-cli, valkey-cli, mongosh, mysql, or sqlcmd) in the dashboard terminal dock, already authenticated to the container, so developers can query local resources without installing clients or copying credentials.
Owner: @mitchdenny
Changes: #20419
Docs: microsoft/aspire.dev#1752
π Documentation required -
𧬠Complete Azure provisioning SDK integration coverage
Twelve new opt-in Azure Provisioning SDK proxy packages let polyglot AppHosts customize generated Bicep for AppConfiguration, AppContainers, AppService, Cdn, ContainerService, Kusto, Network, PrivateDns, PostgreSql, Redis, RedisEnterprise, and SignalR, extending the experimental proxy model to the remaining hosting integrations.
Owner: @sebastienros
Changes: #20131
Docs: microsoft/aspire.dev#1748
π Documentation required -
π§ Launch profile options for polyglot addDotnetProject
Polyglot AppHosts can now configure named or excluded .NET launch profiles when callingaddDotnetProject, using a new flatDotnetProjectOptionsobject that supportslaunchProfileName,excludeLaunchProfile, andexcludeKestrelEndpointswith the same semantics as the existing C# options.
Owner: @karolz-ms
Changes: #20157
Docs: microsoft/aspire.dev#1695
π Documentation required -
β‘ Azure Container Apps Express support
Added experimental, opt-in support for Azure Container Apps Express deployment mode via.AsExpress()on a Container App environment (available from both C# and TypeScript AppHosts). Express environments default to zero minimum replicas and skip the implicit Consumption workload profile, managed dashboard, and .NET data-protection configuration, while app-to-app references resolve to standard public HTTPS endpoints.
Owner: @eerhardt
Changes: #20115
Docs: microsoft/aspire.dev#1694
π Documentation required -
π MongoDB replica set resource
Introduced a new MongoDBReplicaSetResource meta-resource type for modeling a MongoDB replica set as a single Aspire resource. A follow-up adds a simplerWithReplicaSet()opt-in directly on the standalone MongoDB server resource, enabling transactions and change streams for the common single-member inner-loop scenario without a separate replica-set resource or TLS configuration.
Owner: @sebastienros
Changes: #18196, #19961
Docs: microsoft/aspire.dev#1730
π Documentation required
π Community contribution by @aradalvand -
𧬠Polyglot Azure provisioning proxy SDKs
Polyglot AppHosts written in TypeScript, Python, Go, and Java can now customize generated Azure infrastructure the same way C# AppHosts do, using new opt-in, integration-specific Azure provisioning proxy packages (Application Insights, Cognitive Services, Container Registry, Cosmos DB, Event Hubs, Key Vault, Operational Insights, Search, Service Bus, SQL, Storage, and Web PubSub). EachConfigureInfrastructurecallback exposes Bicep literals, expressions, secure values, and resource references through a bounded, source-generated ATS surface.
Owner: @sebastienros
Changes: #19675
Docs: microsoft/aspire.dev#1756
π Documentation required -
β±οΈ Configurable DevTunnel idle expiration
Added aWithExpiration(int expirationHours)option for DevTunnel resources so AppHosts can set the tunnel's idle expiration explicitly, from 1 hour up to 30 days. This helps keep dev tunnel usage under account limits without manually deleting tunnels.
Owner: @krubenok
Changes: #19987
π Documentation required
π Community contribution by @krubenok -
π§° Foundry Toolbox resource
Aspire.Hosting.Foundry now supports Foundry Toolbox data-plane resources, letting AppHosts create toolboxes that bundle web search, MCP, and Azure AI Search tools behind a single MCP endpoint via AddToolbox().
Owner: @davidfowl
Changes: #17742
π Documentation required -
π Azure Connector Namespace integration
Added the Aspire.Hosting.Azure.ConnectorNamespace integration for provisioning Azure Connector Namespace resources.
Owner: @spboyer
Changes: #19024
π Documentation required -
π¦ Add Deno hosting support
Aspire.Hosting.JavaScriptnow supports first-class Deno application hosting viaAddDenoApp/DenoAppResource, runningdeno run, nameddeno tasktasks, ordeno servehandlers alongside the existing Node and Bun support.
Owner: @sebastienros
Changes: #18628
π Documentation required
π Community contribution by @rickylabs -
ποΈ Add CSI volume source to Kubernetes VolumeV1
VolumeV1inAspire.Hosting.Kubernetesnow supports thecsivolume source, enabling inline ephemeral CSI volumes such as those projected by the Secrets Store CSI driver.
Owner: @mitchdenny
Changes: #19826
π Documentation required
π Community contribution by @timritzer -
π‘ Emit OpenTelemetry from Cosmos DB preview emulator
The Cosmos DB preview emulator now emits OpenTelemetry traces by default, giving visibility into emulator activity in the dashboard alongside the rest of the application.
Owner: @davidfowl
Changes: #15671
π Community contribution by @afscrome -
π¦ Azure Container Apps Sandboxes deployment target
Added an experimentalAspire.Hosting.Azure.Sandboxesdeployment target so Aspire applications can publish container-backed compute resources to Azure Container Apps Sandboxes.
Owner: @spboyer
Changes: #19008, #19801
Docs: microsoft/aspire.dev#1752
π Documentation required -
π Blazor gateway APIs for polyglot AppHosts
Polyglot AppHosts (Python, Go, Java, TypeScript, Rust) can now call theDotnetProjectResource-backed Blazor gateway APIs, which were previously only usable from C# AppHosts.
Owner: @karolz-ms
Changes: #19026
Docs: microsoft/aspire.dev#1564
π Documentation required -
π Blazor WebAssembly debugging support
Blazor hosting now supports opt-in browser debugging for WebAssembly client apps, laying the groundwork for attaching a debugger to Blazor WebAssembly resources launched by the AppHost.
Owner: @maraf
Changes: #18928
π Documentation required
π Community contribution by @maraf -
β Java hosting integration
AddsAspire.Hosting.Java, a new hosting integration for running and building Java applications (including Maven and Gradle projects), ported and reworked from the Community Toolkit for parity with the existing Rust, Go, Node, and Python resource integrations.
Owner: @adamint
Changes: #18033
Docs: microsoft/aspire.dev#1794
π Documentation required
π Community contribution by @marshalhayes -
π¦ Add Rust hosting support with VS Code debugging
Aspire now has first-party support for Rust hosting via a newAspire.Hosting.Rustintegration that models Cargo applications, resolves Cargo targets for debugging and publishing, and exports APIs to C# and polyglot AppHosts. The VS Code extension adds matching debugger wiring for Rust resources and Rust AppHosts.
Owner: @afscrome
Changes: #18906
π Documentation required
π Community contribution by @afscrome -
π Add command to show dev tunnel URLs
Dev tunnel port resources now publish their public tunnel, inspect, and local endpoint URLs as highlighted resource properties, and add a Show tunnel URLs dashboard action to view them.
Owner: @maddymontaquila
Changes: #16842
Docs: microsoft/aspire.dev#1492
π Documentation required -
πΎ AKS persistent volume support
AKS workloads can now configure and mount Kubernetes persistent volumes directly throughAddPersistentVolumeonAzureKubernetesEnvironmentResource, instead of reaching through to the underlying Kubernetes integration. Claims use the cluster's default storage class, dynamically provisioning an Azure managed disk on standard AKS clusters, when none is specified.
Owner: @mitchdenny
Changes: #19226
Docs: microsoft/aspire.dev#1474
π Documentation required -
π Radius recipe parameters and secret management
AppHosts can now customize Radius recipe parameters and supply secrets declaratively in the app model, instead of configuring them out-of-band against the cluster.
Owner: @nellshamrell
Changes: #18834
π Documentation required
-
π Stabilize Aspire.Hosting.Dotnet APIs
Aspire.Hosting.Dotnet APIs no longer require the ASPIREDOTNETPROJECT001 experimental suppression to use, though the package itself remains prerelease. The remaining diagnostic references in Blazor gateway methods, tests, and playground code have also been cleaned up.
Owner: @eerhardt
Changes: #20496, #20581
π Documentation required -
π« Remove redundant experimental annotations from Azure Sandboxes
Removed theASPIREAZURE001experimental-API annotations from Azure Sandbox resources, extension methods, options, and enums, since the entireAspire.Hosting.Azure.Sandboxespackage is already prerelease. Consumers no longer need to suppressASPIREAZURE001to use Azure Sandboxes.
Owner: @eerhardt
Changes: #20483
π Documentation required -
π "Manage" link pattern extended to remaining management UI integrations
phpMyAdmin, pgAdmin, pgweb, Kafka UI, Mongo Express, and Attu now hide their management tool containers and add a "Manage" link back onto the resource(s) they manage, matching the pattern already used by Redis. Qdrant, RabbitMQ, the Durable Task Scheduler emulator, and Cosmos DB's built-in dashboard links are also renamed to "Manage" for consistency, and "Manage" links now sort above a resource's other URLs.
Owner: @JamesNK
Changes: #20070
π Community contribution by @afscrome -
πͺͺ Front Door origin identity now reflects backend hostname
Azure Front Door origin names now include the backend hostname, so switching a compute resource's backend creates a distinct origin instead of silently reusing the previous origin's Azure identity. Existing deployments receive new origin names the first time this ships; useConfigureInfrastructureto restore the previous naming if needed.
Owner: @eerhardt
Changes: #20035
Docs: microsoft/aspire.dev#1646
β οΈ Breaking change
π Documentation required -
π§ͺ Improve Azure Sandbox defaults
Azure Sandbox groups now work as compute environments without requiring every workload to opt in through PublishAsAzureSandbox, automatically assigning and deploying projects while keeping endpoints private by default.
Owner: @mitchdenny
Changes: #19810
Docs: microsoft/aspire.dev#1623
β οΈ Breaking change
π Documentation required -
π Allow skipping main.bicep generation
AzurePublishingContext can now skip building and writing the root main.bicep for publishers that deploy each resource module directly, avoiding unnecessary compilation failures for models that don't need the root template.
Owner: @eerhardt
Changes: #19914 -
β‘ Reuse generated TypeScript fluent promise implementations
Generated TypeScript SDKs for provisioning proxy packages are now smaller and compile faster: a sharedFluentPromise<T>runtime dispatcher replaces hundreds of repeated fluent forwarding implementations, cutting generated SDK size by roughly 10% and clean build time by up to 17% in measured fixtures, with no change to public TypeScript APIs.
Owner: @sebastienros
Changes: #19728 -
π Cosmos DB emulator now defaults to vNext
RunAsEmulatorfor Azure Cosmos DB now defaults to the Linux-based vNext emulator image. A newRunAsClassicEmulatorAPI preserves access to the classic emulator, and the formerRunAsPreviewEmulatoris now an obsolete alias that forwards toRunAsEmulator.
Owner: @eerhardt
Changes: #19510
Docs: microsoft/aspire.dev#1563
β οΈ Breaking change
π Documentation required -
π Health check for Azure App Configuration emulator
The Azure App Configuration emulator now exposes an HTTP health check, soOnResourceReadyonly fires once the emulator is actually ready to accept requests instead of racing its startup.
Owner: @sebastienros
Changes: #19041
π Community contribution by @zhiyuanliang-ms
-
π Fix Azure sandbox ExtraSmall and Small tier disk sizes
Fixed Azure sandbox deployments always failing for the ExtraSmall and Small tiers because requested disk sizes exceeded the Azure Container Apps Sandboxes service's per-tier maximum. ExtraSmall now requests 5Gi and Small requests 10Gi, matching the service's cores x 20Gi limit.
Owner: @eerhardt
Changes: #20479 -
ποΈ Removed retired GitHub Models integration
GitHub Models was fully retired, so theAspire.Hosting.GitHub.Modelsintegration no longer worked and has been removed from the repository. Existing users must migrate to another model provider, such as Microsoft Foundry. Previously published package versions remain hidden fromaspire add.
Owner: @eerhardt
Changes: #19848
Docs: microsoft/aspire.dev#1672
β οΈ Breaking change
π Documentation required -
π°οΈ Fixed Radius backing resource connections
Aspire apps deployed to Radius could not reach their own backing resources (Redis, PostgreSQL, MongoDB, SQL Server, RabbitMQ) because connection values were derived from Aspire's endpoint model instead of the Radius recipe's actual outputs. Connection strings, hosts, ports, usernames, and passwords are now projected from recipe outputs so they always match what the recipe deployed, and misconfigurations that previously failed silently now surface as publish-time diagnostics. Radius is also upgraded to 0.60.
Owner: @nellshamrell
Changes: #19555
β οΈ Breaking change
π Documentation required -
π©Ή Fixed Kafka health-check producer leak
Kafka AppHost health checks now reuse a DI-owned, keyed singleton producer per resource instead of creating a new producer on every check. This stops polling threads from accumulating over time and releases them when the AppHost is disposed.
Owner: @davidfowl
Changes: #20092 -
π Patched Snappier dependency for MongoDB v2 security fix
Aspire.MongoDB.Driver.v2 now requires Snappier 1.3.1 or later, fixing a vulnerability (CVE-2026-44302) where malformed compressed data could cause an infinite loop during decompression.
Owner: @joperezr
Changes: #20072 -
π Fixed Redis "Manage" links to tool resources
Redis Commander/Insight "Manage" links now appear on every Redis resource in the app instead of only the one that called WithRedisCommander()/WithRedisInsight(), and a DCP bug that left cross-resource URLs stuck as inactive after the tool started has been fixed.
Owner: @DamianEdwards
Changes: #19969
π Community contribution by @afscrome -
π‘ Fix MAUI OTLP dev tunnel resolution
Fixed WithOtlpDevTunnel() so MAUI apps on Android and iOS reliably reach the Aspire Dashboard's OTLP endpoint, preferring OTLP/HTTP over the resolved local listener port and refreshing mobile launch environment variables on restart.
Owner: @IEvangelist
Changes: #19386
π Community contribution by @jfversluis -
π¦ Fix MAUI launch queue handoff
Fixed a NETSDK1085 build failure in the MAUI shared-project launch handoff on .NET SDK 10.0.201 by making the build queue platform-aware, so multiple platform resources for one MAUI project continue to build and launch serially without errors.
Owner: @IEvangelist
Changes: #19383
π Community contribution by @jfversluis -
π€ Fix Foundry Local lifecycle and remote endpoints
Fixed Aspire hanging when Foundry Local daemonizes through the newer foundry server CLI, and added support for connecting to a Foundry Local service already running on another host from WSL2 and Linux AppHosts.
Owner: @sebastienros
Changes: #19197
Docs: microsoft/aspire.dev#1621 -
π Fix Python callback handle wrapping
Fixed Python callbacks exported as resource builder actions receiving the wrong handle type, which caused calls like with_host_port to fail at runtime.
Owner: @sebastienros
Changes: #19870 -
π Fix enum values in YARP environment configuration
FixedWithForwarderRequestConfigenum values such asHttpVersionPolicy.RequestVersionExactbeing dropped when YARP configuration was flattened to environment variables, which prevented HTTPS-terminating proxies from forwarding gRPC traffic to h2c backends correctly.
Owner: @IEvangelist
Changes: #19403
π Community contribution by @air-hand -
π₯ Implement health checks for Azure AI Inference clients
Health checks forAspire.Azure.AI.Inference'sChatCompletionsClientandEmbeddingsClientnow actually run instead of being silently disabled β they were previously hardcoded off and would throwNotImplementedExceptionif enabled.
Owner: @sebastienros
Changes: #15969
π Community contribution by @Formatted -
π©Ί Fix DevTunnel health check for auto-selected regions
Fixed DevTunnel health checks failing when a tunnel region was auto-selected, because per-port access queries require the cluster-qualified tunnel ID rather than the bare tunnel ID returned bydevtunnel show.
Owner: @DamianEdwards
Changes: #19230
π Community contribution by @Vladipz -
π§΅ Fix TypeScript codegen Promise wrapper for zero-capability builders
Fixed TypeScript AppHost codegen so exported methods returning a zero-capability resource builder still generate the*Promisewrapper, preventingTS2552compile errors for undeclared references such asResourceWithServiceDiscoveryPromise.
Owner: @adamint
Changes: #19577
π Community contribution by @flojon -
π©Ί Cosmos DB health check
The Azure Cosmos DB client integration now registers a health check, so /health and readiness probes correctly report unhealthy when Cosmos DB is unreachable instead of falsely reporting healthy.
Owner: @thomhurst
Changes: #18554
π Community contribution by @thomhurst -
π Pin AKS credential fetch to the deployment subscription
Fetching AKS cluster credentials during deployment now passes--subscriptionto the Azure CLI, so it always targets the subscription Aspire selected for the deployment rather than whichever subscription the ambientazCLI happened to default to (a risk for multi-subscription tenants and CI agents).
Owner: @mitchdenny
Changes: #19219
Docs: microsoft/aspire.dev#1476
π Documentation required -
π Fix duplicate default Azure Storage service
Fixed a bug where adding a custom-named blob, queue, or data lake service and then calling AddBlobContainer/AddQueue/AddDataLakeFileSystem created a duplicate default-named service instead of reusing the custom one.
Owner: @spboyer
Changes: #16275
1 bug fix
-
π©Ή Fixed port replacer leaking into vendored files
The aspire-starter template's port substitution previously replaced any matching numeric literal, corrupting unrelated values in vendored files like bootstrap.bundle.js when they happened to match a default port. Port substitution now only applies inlocalhost:<port>contexts, so generated projects no longer have spurious diffs in vendored assets.
Owner: @JamesNK
Changes: #20031
π Community contribution by @bart-vmware
1 new feature
-
π§ͺ Run the dashboard from tests
DistributedApplicationTestingBuilderOptions now supports EnableDashboard, allowing an application test to start the Aspire dashboard alongside the app under test and retrieve its login URL.
Owner: @adamint
Changes: #19135
π Documentation required
To provide feedback, comment on the Changelog feedback issue (e.g., "Exclude PR #1234", "Rename: X β Y", "Merge PRs #1234 and #5678").
PRs processed: β 229 included Β· β 196 excluded Β· β³ 0 unprocessed Β· 425 total merged in milestone (View full PR tracker) Docs PRs: β 60 included Β· β 111 excluded Β· β³ 0 unprocessed Β· 171 total from microsoft/aspire.dev (View docs PR tracker) PRs analyzed through: #20583 merged 2026-09-29 18:49 UTC