Repository navigation
17.0 Change log
24 new features, 56 improvements, 39 bug fixes
ℹ️ This changelog is automatically generated from merged pull requests and may contain inaccuracies. For official release notes, see https://aka.ms/aspire/update-latest.
- 2026-10-17 01:36 — 🔌 Terminal disconnect recovery
- 2026-10-16 21:50 — 🚦 Fail promptly when dotnet run launches an AppHost in publish mode
- 2026-10-16 15:49 — 🌐 Azure Front Door endpoint resource IDs
- 2026-10-16 13:48 — 🔐 Cross-resource-group ACR pull for AKS
- 2026-10-15 23:03 — 🤝 Unified agent client and scope selection
- 2026-10-15 22:15 — 🧭 AKS Gateway API uses stable provisioning SDK
- 2026-10-15 19:19 — 🩺 WSLc recognized by aspire doctor
- 2026-10-15 15:28 — 🤖 New Azure AI client packages replace Azure.AI.OpenAI and Azure.AI.Inference
- 2026-10-15 15:12 — 📡 Azure Web PubSub emulator support
- 2026-10-15 00:28 — 🔄 Unified NuGet restore and channel-update policy for AppHosts
6 new features, 16 improvements, 6 bug fixes
-
⚡ TypeScript Azure Functions app support
AppHost can now model, run, publish, and deploy TypeScript/JavaScript Azure Functions apps (Node worker) as directory-based resources, with local Core Tools launch support and deterministic Dockerfile publishing for Azure Container Apps.
Owner: @davidfowl
Changes: #17980
📝 Documentation required -
🪪 Entra ID application hosting integration
Added a newAspire.Hosting.Azure.EntraIdintegration that models Entra ID application registrations as a first-class AppHost resource, including client-secret, certificate, and federated-identity credential types. This provides a single source of truth that the AppHost, CLI, and dashboard can read to configure authentication for referencing services and project publish-mode federated credentials.
Owner: @eerhardt
Changes: #14668
📝 Documentation required
🌍 Community contribution by @jmprieur -
🎛️ Optional and programmatic parameter values
Parameter resources can now be marked optional with WithOptional()/WithRequired(), allowing unset values to resolve to null without prompting or blocking publish. AppHost code can also inspect and set parameter values programmatically with TryGetCurrentValue() and SetValueAsync(), with changes syncing to the dashboard and prompts across C# and TypeScript AppHosts.
Owner: @davidfowl
Changes: #18108
📝 Documentation required -
🔑 Kubernetes fileKeyRef environment variable support
Kubernetes workloads can now source individual environment variables from an env file written by an init container, using the newFileKeySelectorV1andEnvVarSourceV1.FileKeyRefAPIs matching Kubernetes 1.35'sEnvFilesschema, without mounting the file or overriding the entrypoint.
Owner: @mitchdenny
Changes: #20847
Docs: microsoft/aspire.dev#1868
📝 Documentation required -
🚇 Configurable container tunnel base image
Aspire now exposes configuration for the base image used by DCP's container network tunnel, viaaspire config set containerTunnel.baseImage, theDcpPublisher:ContainerTunnelBaseImagesetting, or the--dcp-container-tunnel-base-imageargument. This lets environments that require a customized or mirrored image configure the tunnel without modifying DCP directly.
Owner: @danegsta
Changes: #20667
📝 Documentation required -
📦 Customizable Kubernetes PersistentVolumeClaims
AddsWithConfiguration(...)for customizing the generated KubernetesPersistentVolumeClaimfor first-class persistent volumes, plusWithoutStorageClass()and polyglotWithPersistentVolumeName(...)for claiming existing volumes. This lets callers mutate claim metadata and spec fields not covered by the existing volume configuration methods.
Owner: @mitchdenny
Changes: #19900
📝 Documentation required
🌍 Community contribution by @cdbrown2018
-
📦 Deprecate Aspire.AppHost.Sdk
Aspire.Hosting.AppHost.Sdkis now obsolete (ASPIRE012) as the default C# AppHost experience moves to explicit package references,AddDotnetProject, and the CLI bundle. The warning is suppressible viaSuppressAspireAppHostSdkObsoleteWarningorNoWarn, and C# templates/aspire initnow generate projects using the explicit AppHost and Dotnet packages instead of the SDK.
Owner: @davidfowl
Changes: #20867
⚠️ Breaking change
📝 Documentation required -
☸️ Standard control-plane tier default for AKS clusters
Aspire-managed AKS clusters now default to the Standard control-plane tier, providing an uptime SLA suited for production as the integration moves toward general availability. Existing AppHost code can opt back into the Free tier via ConfigureInfrastructure; applying updated infrastructure to an existing cluster can change its tier and introduce a cluster-management charge.
Owner: @mitchdenny
Changes: #20917
⚠️ Breaking change
📝 Documentation required -
🧹 Graduate Dockerfile builder APIs to stable
Consumers can now use the Dockerfile builder API family without suppressing theASPIREDOCKERFILEBUILDER001experimental-API warning. Signatures, defaults, and runtime behavior are unchanged.
Owner: @mitchdenny
Changes: #20823 -
🧹 Graduate deployment-state APIs to stable
Consumers can now useIDeploymentStateManagerandDeploymentStateSectionwithout suppressing theASPIREPIPELINES002experimental-API warning. Signatures, defaults, and behavior are unchanged.
Owner: @mitchdenny
Changes: #20816 -
🧹 Graduate user secrets APIs to stable
Consumers can now use Aspire's user-secrets manager (IUserSecretsManager,IDistributedApplicationBuilder.UserSecretsManager) without suppressing theASPIREUSERSECRETS001experimental-API warning. Signatures, defaults, and persistence behavior are unchanged.
Owner: @mitchdenny
Changes: #20817 -
⚠️ Obsolete AddCSharpApp in favor of AddDotnetProject
AddCSharpAppis now marked[Obsolete]with a warning directing consumers toAddDotnetProjectfromAspire.Hosting.Dotnet. Signatures, defaults, and behavior are otherwise unchanged; existing callers should migrate toAddDotnetProject.
Owner: @mitchdenny
Changes: #20825
⚠️ Breaking change
📝 Documentation required -
🧹 Graduate pipeline output service APIs to stable
Consumers can now useIPipelineOutputServiceand related pipeline output-directory APIs without suppressing theASPIREPIPELINES004experimental-API warning. Method signatures, output/temp-directory behavior, and lifecycle semantics are unchanged.
Owner: @mitchdenny
Changes: #20814 -
🧹 Graduate core pipeline APIs to stable
Consumers can now use the core pipeline API family (includingIDistributedApplicationBuilder.Pipeline) without suppressing theASPIREPIPELINES001experimental-API warning. This is an attribute-only graduation; signatures, defaults, and runtime behavior are unchanged.
Owner: @mitchdenny
Changes: #20809 -
🧹 Graduate HTTP probe APIs to stable
Consumers can now use the existing HTTP probe APIs (WithHttpProbeand related types) without suppressing theASPIREPROBES001experimental-API warning. This is an attribute-only graduation; signatures, defaults, and runtime behavior are unchanged.
Owner: @mitchdenny
Changes: #20813 -
🧹 Graduate filesystem APIs to stable
Consumers can now use Aspire's filesystem services and temporary-file abstractions (IFileSystemService,ITempFileSystemService,TempDirectory,TempFile) without suppressing theASPIREFILESYSTEM001experimental-API warning. APIs, signatures, and behavior are unchanged.
Owner: @mitchdenny
Changes: #20808 -
🙈 Hide terminal hosts by default
Terminal hosts are now always hidden by default instead of being controlled by a separateTerminalOptions.ShowTerminalHostAppHost option, which has been removed. Use the dashboard's Show hidden resources control to reveal them without restarting the AppHost.
Owner: @mitchdenny
Changes: #20756
⚠️ Breaking change
📝 Documentation required -
🌉 Use Blazor gateway CLI during development
Standalone Blazor WebAssembly apps added viaAddBlazorWasmApp/AddBlazorGatewaynow use the official Blazor Gateway CLI during local development instead of Aspire's generated file-based gateway, keeping development aligned with the ASP.NET Core gateway implementation while preserving the existing API, endpoints, and dashboard experience.
Owner: @JamesNK
Changes: #19432
📝 Documentation required
🌍 Community contribution by @javiercn -
🔇 Quieter AppHost logs for CLI connections and readiness checks
AppHost diagnostic logs are quieter during normal operation: expected CLI backchannel connects/disconnects and already-healthy resource readiness checks no longer emit routine Debug noise, and the CLI backchannel filters noisy HttpClientFactory Debug logs. Errors and unexpected failures are still reported.
Owner: @JamesNK
Changes: #20542 -
🔢 DisplayOrder property for resource URLs
ResourceUrlAnnotation.DisplayOrder is now a non-obsolete, nullable read/write property instead of an obsolete field, so consumers can set WithUrlForEndpoint ordering without obsolete warnings. Replacing a field with a property is a binary compatibility break for consumers compiled against the old field; rebuild against the updated package.
Owner: @JamesNK
Changes: #20637
⚠️ Breaking change
📝 Documentation required -
🔒 Consistent local socket permissions
Backchannel, DCP, and terminal local sockets now consistently get restrictive directory and endpoint permissions before binding, reducing the risk of other local users accessing these channels.
Owner: @mitchdenny
Changes: #20330 -
🧭 Clearer startup error reporting
Startup failures now surface the specific DCP dependency-check reason (such as an unsupported Docker CLI version) in warnings and exceptions, and executable process-start failures include the resolved working directory to help distinguish an invalid working directory from an invalid executable path.
Owner: @karolz-ms
Changes: #20334
-
🚦 Fail promptly when dotnet run launches an AppHost in publish mode
dotnet run --operation publishno longer hangs at "Starting dashboard..." when the CLI run hook starts an AppHost in publish mode. The backchannel now rejects the dashboard-readiness request and exits promptly with guidance to useaspire publishinstead.
Owner: @DamianEdwards
Changes: #21065 -
🚰 Keep DCP watches draining and close abandoned connections
Aspire now actively drains DCP watch responses and closes them on cancellation or periodic restart, so a paused resource handler or canceled watch setup no longer exhausts the HTTP/2 receive window and blocks DCP watcher publication and resource mutations.
Owner: @danegsta
Changes: #20972 -
🔐 Pre-acquire Azure deployment token audiences
Azure deployments using short-lived federated credentials could finish lengthy ARM provisioning and then fail when ACR authentication requested a different token audience. Deployment now pre-acquires all required token audiences before resource-group creation, avoiding this class of late-stage authentication failure.
Owner: @mitchdenny
Changes: #20907 -
🧯 Recover ambiguous DCP creates with configurable timeouts
Resources no longer fail to start after a timed-out or HTTP 504 DCP create that the server actually committed. AppHost now checks for an existing resource before retrying, with configurableKubernetesApiTimeout,KubernetesInitializationAdditionalTimeout, andKubernetesCreateRecoveryTimeoutsettings for slower environments.
Owner: @danegsta
Changes: #20752
📝 Documentation required -
🐛 Fix Go AppHost start timeout error
Fixed a Go AppHost startup timeout error caused by the generated ATS transport client, so Go-authored AppHosts start reliably.
Owner: @IEvangelist
Changes: #20086 -
🧯 Skip Blazor WASM client discovery on unsupported SDKs instead of crashing
Hosted Blazor WebAssembly client discovery no longer crashes the entire AppHost with an MSB4057 error when the active .NET SDK doesn't support the required MSBuild target. Aspire now probes the SDK version first and logs a warning and skips discovery instead of throwing.
Owner: @JamesNK
Changes: #20575
🌍 Community contribution by @maraf
5 new features, 9 improvements, 3 bug fixes
-
🔐 Environment-specific Aspire secrets for deployment
Addedaspire secretcommands (set,get,list,delete,path) with--environment/-esupport, so deployment workflows can configure secrets per environment ahead of time instead of relying on Development-only user secrets or prompts. Secrets now live in Aspire-owned files under~/.aspire/secrets/<apphost-id>/<environment>.json, with existing Development .NET user secrets imported automatically.
Owner: @davidfowl
Changes: #20135
⚠️ Breaking change
📝 Documentation required -
🌐 Polyglot hosting integrations through ATS projection
Hosting integrations can now be authored outside .NET through Aspire's ATS metadata, SDK generation, and runtime dispatch pipeline. A consuming AppHost gets normal generated builder methods while the integration runs in its own runtime and configures the same .NET resource model as a managed integration. TypeScript-authored examples ship today, including Kafka, Deno, and a real@aspire/nuxtpreview integration.
Owner: @davidfowl
Changes: #16110
📝 Documentation required -
📡 CLI Azure Monitor log export for product events
The CLI now exports reported usage/error events and errors to Azure Monitor as structured logs, in addition to its existing operation-span trace export. This uses a separate, isolated telemetry pipeline honoringASPIRE_CLI_TELEMETRY_OPTOUT.
Owner: @JamesNK
Changes: #20730
📝 Documentation required -
🖥️ Experimental tray companion for AppHost management
An experimental native tray companion (macOS menu bar / Windows notification area) lets users manage running AppHosts — view health, open the dashboard, stop instances, and pin favorites — without repeatedly runningaspire ps. Start it withaspire tray start; the CLI supplies a versioned discovery/health stream backing the native frontend.
Owner: @davidfowl
Changes: #20096
📝 Documentation required -
⌨️ CLI shell completions
Addsaspire completions script [bash|fish|pwsh|zsh]to generate shell tab-completion scripts for commands, subcommands, options, and completion-enabled values. Release installers (shell, PowerShell, Homebrew) register completions automatically where supported, with a--skip-completionsopt-out.
Owner: @DamianEdwards
Changes: #20026
📝 Documentation required
-
🤝 Unified agent client and scope selection
aspire agent init,new, andinitnow share a unified prompt flow for choosing agent clients (GitHub Copilot, Claude Code, OpenCode), assets, and project/global installation scope, instead of asking users to pick skill folders directly. Detected agents are preselected, and selecting no agents performs no writes.
Owner: @ellahathaway
Changes: #20932
📝 Documentation required -
🩺 WSLc recognized by aspire doctor
aspire doctornow recognizes WSLc as a supported container runtime on Windows and only checks the runtime you've configured via the environment variable, instead of reporting unrelated problems from runtimes you aren't using. Auto-detection lists all installed runtimes (Docker, Podman, WSLc) in priority order and marks the active one.
Owner: @danegsta
Changes: #21004
Docs: microsoft/aspire.dev#1898
📝 Documentation required -
🔄 Unified NuGet restore and channel-update policy for AppHosts
Unified how the CLI composes NuGet restore, package/template discovery, and channel-update policy across package-only and polyglot AppHosts, so the packages offered by discovery now agree with what can actually be restored and persisted configuration stays consistent after a channel update.
Owner: @danegsta
Changes: #19763
📝 Documentation required -
🚀 TerminalHost ships as a standalone Native AOT executable
WithTerminal()now launches a standalone Native AOTAspire.TerminalHostexecutable instead of running inside the managedaspire-managedprocess, improving startup and resource usage. Older Hosting versions keep working through a thinaspire-managed terminalhostcompatibility shim.
Owner: @mitchdenny
Changes: #20775
Docs: microsoft/aspire.dev#1866
📝 Documentation required -
🛟 More durable telemetry shutdown
CLI and Dashboard product telemetry shutdown now follows an explicit persist-first policy: successful local commands write queued telemetry without waiting on ingestion, failed commands get a bounded persistence-and-delivery window, and CI commands attempt delivery immediately instead of relying on a later invocation. No commands or flags changed.
Owner: @JamesNK
Changes: #20851
Docs: microsoft/aspire.dev#1864
📝 Documentation required -
🔏 Hardened Sigstore cache configuration
The CLI's Sigstore and TUF dependencies are upgraded to stable 1.1.0, using one shared verifier configured via dependency injection with its TUF cache under~/.aspire/cache/tuf. This improves attestation verification reliability for npm and GitHub artifacts and respects custom Aspire-home settings.
Owner: @mitchdenny
Changes: #20538 -
🔓 Terminal commands available by default
Theaspire terminalcommands (ps,attach,tape play) are now available by default without enabling thefeatures.terminalCommandsEnabledexperimental flag. The experimentalWithTerminal()AppHost API is unchanged.
Owner: @mitchdenny
Changes: #20525
📝 Documentation required -
🎯 CLI retargeted to .NET 11
The Aspire CLI now targets .NET 11 instead of .NET 10. Behavior for users of the nativeaspirebinary is unchanged, but theAspire.Cli.<rid>dotnet tool packages now place the binary undertools/any/<rid>/instead of a TFM-specific folder, matching the pointer package's layout.
Owner: @eerhardt
Changes: #20436 -
⚡ Faster agent telemetry hooks
Reduces CLI agent telemetry hook startup overhead by removing shell startup and synchronous upload waits, while preserving existing telemetry coverage. Also upgrades OpenTelemetry packages, which lowers the default maximum OTLP request size from 128 MiB to 64 MiB; configureOtlpExporterOptions.MaxRequestSizeBytesif your project relies on the previous limit.
Owner: @IEvangelist
Changes: #20387
⚠️ Breaking change
📝 Documentation required
-
⚖️ Fix CLI/SDK version-skew warning false positives
The CLI/SDK version-skew warning now appears only when the CLI has lower precedence than the AppHost's SDK, so newer CLIs running AppHosts pinned to older SDKs no longer see a misleading warning. Duringaspire update, the comparison now checks the target SDK version instead of the stale on-disk value.
Owner: @spboyer
Changes: #20477 -
🔧 Fix experimental polyglot AppHost feature key names
aspire config setfor experimental polyglot AppHost languages (Java, Go, Python, Rust) now uses flat feature keys (e.g.,experimentalPolyglotJava) instead of colon-separated names, which previously produced an invalid nestedfeaturesobject. Existing settings using the oldexperimentalPolyglot:java-style keys must be renamed to the new flat key names.
Owner: @sebastienros
Changes: #20481
⚠️ Breaking change
📝 Documentation required -
🧹 Fix Windows AppHost cleanup leaving stray containers
On Windows, session-scoped containers could survive AppHost shutdown (via Ctrl+C oraspire stop) because DCP was killed by a nested process job before it finished cleanup. .NET AppHosts launched throughdotnet run/dotnet watchnow let DCP complete removing session-scoped resources, while persistent resources are unaffected.
Owner: @danegsta
Changes: #20494
6 new features, 19 improvements, 14 bug fixes
-
🔌 Terminal disconnect recovery
The dashboard now keeps the last terminal screen (including Sixel/Kitty graphics) visible when a workload exits or the connection drops, instead of clearing it. A disconnect banner explains what happened and offers recovery actions: restarting the owning resource for resource terminals, or closing the tab for docked terminals, while a collapsible top-right icon lets you uncover the retained output.
Owner: @mitchdenny
Changes: #20726
📝 Documentation required -
📈 Dashboard startup telemetry
The Dashboard now records anaspire/dashboard/startupproduct telemetry event capturing startup result, duration, and launch context (AppHost, CLI, or container), helping track startup reliability and performance across launch scenarios.
Owner: @JamesNK
Changes: #20846
Docs: microsoft/aspire.dev#1867
📝 Documentation required -
📖 Markdown descriptions in text visualizer dialogs
Text visualizer dialogs (used for Mermaid graph exports and other content) can now show an optional Markdown description above the source or rendered content, with a link to relevant Aspire documentation.
Owner: @JamesNK
Changes: #20819
Docs: microsoft/aspire.dev#1863
📝 Documentation required -
🖍️ Add SQL highlighting to the dashboard text visualizer
The dashboard's text visualizer now applies syntax highlighting to SQL content, making query text easier to read alongside the existing JSON and XML highlighting.
Owner: @JamesNK
Changes: #20754
📝 Documentation required -
🧭 Add Mermaid resource graph export to the dashboard and CLI
Resource graphs can now be exported as Mermaid diagrams from both the dashboard (Export as Mermaid, with copy/download asresources.mmd) and the CLI viaaspire resources --format mermaid/aspire describe --format mermaid, reflecting current filters and hidden-resource visibility.
Owner: @mitchdenny
Changes: #20746
📝 Documentation required -
🔌 Setting to disable Dashboard WebSocket compression
A newDashboard:Frontend:DisableWebSocketCompressionsetting lets users disable Blazor WebSocket compression through configuration or an environment variable, fixing standalone Dashboard initialization failures behind IIS ARR without needing to strip headers at the reverse proxy.
Owner: @JamesNK
Changes: #20633
📝 Documentation required
-
📡 Align dashboard and CLI telemetry metadata
Dashboard product telemetry attributes are renamed to lowercase, dot-separated OpenTelemetry-style keys and now share the CLI's environment, OS, machine, and Microsoft-internal enrichment. Startup events also report the configured persistence mode (none, run, resume, or unknown).
Owner: @JamesNK
Changes: #20905
⚠️ Breaking change
📝 Documentation required -
📦 Migrate dashboard consumers to canonical Aspire images
Dashboard consumers (Docker Compose, Kubernetes, and standalone documentation) now reference the canonical mcr.microsoft.com/aspire image repositories instead of the legacy dotnet/aspire-dashboard repositories. Generated deployments keep their existing pinned tags; only the repository name changes.
Owner: @IEvangelist
Changes: #20177
Docs: microsoft/aspire.dev#1679 -
🙈 Visually distinguish hidden resources
Hidden resources shown via "Show hidden resources" now display an eye-off icon and a subtle background tint in the Resources grid, Parameters view, and graph, making them easy to distinguish from normally visible resources without appearing disabled.
Owner: @JamesNK
Changes: #20155
🌍 Community contribution by @afscrome -
📡 Migrate Dashboard product telemetry to Azure Monitor
Dashboard product usage/error reporting moves from the IDE telemetry transport to direct Azure Monitor export, so reporting now works for CLI-launched, standalone, and deployed dashboards without an IDE debug session or OpenTelemetry Collector. Dashboard product telemetry no longer honors IDE telemetry consent; setASPIRE_DASHBOARD_TELEMETRY_OPTOUT=trueto opt out instead.
Owner: @JamesNK
Changes: #20730
⚠️ Breaking change
📝 Documentation required -
⌨️ Add Terminals keyboard shortcut and improve shortcut help
The dashboard's Terminals page now has a keyboard shortcut (E) to open it, matching its navigation availability. Shortcut help also places Page navigation before Panels and aligns category card heights for a cleaner layout.
Owner: @JamesNK
Changes: #20748 -
⚡ Reduce dashboard CPU under sustained metric ingestion
Dashboard CPU usage no longer steadily increases under sustained metric ingestion. Metric retention previously re-ranked every retained point on each insertion even when below the retention limit; it now caches the retained point count and only trims the oldest surplus points when capacity is exceeded, giving roughly 45x faster exports in benchmarks.
Owner: @JamesNK
Changes: #20736 -
🧵 Preserve child exception stacks in dashboard error telemetry
Dashboard telemetry for Blazor circuit errors now records the child exception types, messages, and stack traces from aggregate disposal exceptions instead of an empty aggregate stack trace, so disposal failures can be traced back to the affected components.
Owner: @JamesNK
Changes: #20732 -
⌨️ Prefer Terminal shortcuts for terminal-enabled resources
Resource rows now use Terminal as their default output shortcut when a live terminal is defined, instead of always defaulting to Console logs. Ordinary resources, disconnected dashboards, and historical runs still default to Console logs, and both views remain reachable from resource menus.
Owner: @mitchdenny
Changes: #20719 -
🖥️ Upgraded terminal engine with new navigation and metadata
The dashboard terminal integration is upgraded to Hex1b 0.171.0, adding a canvas overlay scrollbar with retained command marks, a header showing workload title/working directory/progress with copy support, reorderable dock tabs with keyboard and drag/drop support, and an explicit Dark/Light terminal palette selector independent of the dashboard theme. A follow-up upgrade to Hex1b 0.172.0 further refines the scrollbar with circular command markers, improved marker hit-testing, rounded track geometry, and palette-derived colors.
Owner: @mitchdenny
Changes: #20255, #20721
📝 Documentation required -
🏷️ Configure dashboard OTLP service name
Dashboard traces exported through OTLP now useaspire-dashboardas the defaultservice.nameinstead of the OpenTelemetry SDK's generic default, making dashboard telemetry identifiable. Deployments can still override the name withOTEL_SERVICE_NAME.
Owner: @JamesNK
Changes: #20600
📝 Documentation required -
⌨️ Keycap styling for terminal F6 shortcut
The terminal footer's F6 shortcut is now rendered as a theme-aware keyboard key (kbd) instead of plain text, making it easier to recognize as a focus-the-controls shortcut.
Owner: @JamesNK
Changes: #20694 -
🔔 Smaller dashboard notification badge
The dashboard header notification badge is more compact: 18x18px for single-digit counts and 22x18px for the "9+" overflow indicator, down from roughly 26x20px.
Owner: @JamesNK
Changes: #20647 -
🖳 Dedicated dashboard Terminals page
Resource terminals now have a dedicated Terminals page in the dashboard navigation instead of sharing the Console logs page, making terminals easier to discover and keeping log viewing focused. The page defaults to no selection and only lists terminal-capable resources.
Owner: @JamesNK
Changes: #20650
📝 Documentation required -
🧹 Simplified dashboard terminal navigation
The dashboard's top-right Terminals button and mobile Terminal menu entry are removed to reduce navigation clutter. The backtick (`) shortcut remains the entry point for opening the terminal dock on both desktop and mobile layouts.
Owner: @mitchdenny
Changes: #20528
📝 Documentation required -
✨ Match dashboard brand hover to Aspire website
Hovering the dashboard logo, application name, or page title now applies the same brightness treatment used on aspire.dev, in both light and dark themes.
Owner: @JamesNK
Changes: #20416 -
🖌️ Update Fluent UI to v5 RTM
Updates Fluent UI Blazor Components and Icons to the 5.0.0 RTM release. The AppBar overflow trigger now renders as a native button matching the navigation toggle's sizing, icon alignment, and hover styling, and dashboard navigation shuts down cleanly instead of failing when a browser disconnects during a pending page-state update.
Owner: @JamesNK
Changes: #20527
📝 Documentation required -
🧽 Simplify terminal dock empty state
The terminal dock's empty state is simplified to its heading, console icon, documentation link, and backtick-key hint. The More information link is now a plain underlined text link with a visible keyboard-focus outline instead of a button-styled hover background.
Owner: @mitchdenny
Changes: #20537
📝 Documentation required -
❓ Run persistence help in dashboard
The dashboard run selector menu now includes a Learn about runs option that explains live, historical, and pinned runs and links to the run persistence documentation.
Owner: @JamesNK
Changes: #20469
Docs: microsoft/aspire.dev#1764
📝 Documentation required -
🎬 Animated terminal dock first open
The terminal dock now slides into view on its first open after a dashboard refresh, instead of appearing immediately. Subsequent open and close transitions are unchanged.
Owner: @JamesNK
Changes: #20414
-
🧯 Fix dashboard command failure toasts with HTML-like output
Resource command failure toasts no longer throw a rendering exception when the output contains HTML-like text, such as Playwright assertion diagnostics. The output is now HTML-encoded and truncated to a 250-character preview, so the original diagnostic text is shown literally instead of being interpreted as markup.
Owner: @JamesNK
Changes: #20888 -
📉 Fix histogram temporality and bucket aggregation
Histogram charts on the Metrics page no longer show incorrect counts or percentiles with delta data, cumulative resets, or mismatched bucket layouts across dimensions. When selected dimensions share no bucket boundaries, percentiles are now hidden with a warning instead of showing invented values, while the count view remains usable.
Owner: @JamesNK
Changes: #20755
Docs: microsoft/aspire.dev#1865
📝 Documentation required -
🧩 Fix dashboard graph initialization and teardown errors
Fixed unhandled errors on the Resources page when switching to the graph view before the first resource snapshot loads, or when the browser circuit disconnects during graph teardown.
Owner: @JamesNK
Changes: #20811 -
🎯 Fix dashboard selection of shortened resource instance IDs
Selecting a replicated resource by its shortened GUID instance ID (for exampledotnet-cli-6a764b7d) could incorrectly reset the Traces, Structured logs, or Metrics resource selector to(All). Resource lookup now also resolves shortened instance IDs, so selection stays consistent across these pages.
Owner: @JamesNK
Changes: #20783 -
🔢 Localize dashboard record counts
Large record counts on the Structured logs, Traces, and Resources pages now use locale-aware digit grouping (for example,10,000inen-USversus10.000inde-DE) instead of a fixed format.
Owner: @JamesNK
Changes: #20753 -
🖱️ Fix metrics tree scrolling
The Metrics page's left-hand meter/instrument tree can now be scrolled with the mouse wheel when it's taller than the window. This regressed when the dashboard moved to Fluent UI Blazor v5, which removed the tree pane's scroll container.
Owner: @JamesNK
Changes: #20758
🌍 Community contribution by @heyysiri -
🔕 Keep connected terminal clipboard and selection errors console-only
A connected terminal no longer shows a misleading clipboard-permission or selection banner while still connected; these status errors are now logged to the console instead. Fatal disconnections still show the connection-failure banner and retry.
Owner: @mitchdenny
Changes: #20720 -
🧵 Fix intermittent telemetry read errors during eviction
The Traces, Spans, Structured Logs, and Metrics views now read dependent SQLite telemetry rows from a consistent snapshot, fixing intermittent HTTP 500 errors and incomplete details when telemetry eviction removed rows between a selection and its related queries.
Owner: @JamesNK
Changes: #20597 -
📌 Keep dashboard run menu open when pinning
Pinning or unpinning a historical dashboard run no longer closes the run selector menu. The selector now stays open, preserves the current run selection, and restores focus to the same pin/unpin button while the item re-sorts.
Owner: @JamesNK
Changes: #20523
📝 Documentation required -
🔌 Fix spurious disconnect errors during dashboard layout init
Disconnecting from the dashboard while its layout restores browser-saved navigation state no longer reports an unhandledJSDisconnectedExceptioncircuit error. Other browser-storage read failures are still logged at Information level, and the layout falls back to defaults when storage is unavailable.
Owner: @JamesNK
Changes: #20472 -
🧰 Fix dashboard filter badges and toolbar navigation
Dashboard filter badges no longer stay visible with an empty count or shift toolbar height when toggled. Resource details, Structured Logs, and Traces toolbars wrap more correctly at narrow widths, and a mobile Resources tab change no longer leaves a stale navigation queued when the filter panel is closed.
Owner: @JamesNK
Changes: #20471 -
⌨️ Fix dashboard shortcut availability
The dashboard help dialog (?) now only lists shortcuts that are actually available. In standalone configurations without a resource service, Resources (r) and Console Logs (c) shortcuts are no longer listed or actionable, while panel shortcuts remain listed on every page.
Owner: @JamesNK
Changes: #20413 -
📜 Fix Events grid scrollbars
The trace details Events grid no longer shows scrollbars inside multiline cells that contain nested attribute grids; content now clips with the existing text visualizer available for truncated values.
Owner: @JamesNK
Changes: #20425 -
✂️ Fix dropdown text truncation
Long resource names selected in dashboard dropdowns (such as on the Console and Metrics pages) now truncate with an ellipsis on one line instead of being hard-cut before the chevron.
Owner: @JamesNK
Changes: #20426
1 bug fix
-
🔒 Fix critical and high dependency vulnerabilities
Updates dependencies responsible for critical and high security alerts across starter templates, playground apps, VS Code extension tooling, and E2E fixtures (Next.js, brace-expansion, @grpc/grpc-js, @angular/router, urllib3, jackson-databind), so new scaffolds and repository builds no longer restore vulnerable package versions.
Owner: @joperezr
Changes: #20703
3 new features, 2 bug fixes
-
🐞 VS Code debugging for Node Azure Functions
With the Aspire VS Code extension installed, debugging an AppHost containing a TypeScript or JavaScript Azure Functions app now starts Azure Functions Core Tools, reserves a Node inspector port, and attaches the Node debugger automatically, stopping Core Tools when the debug session ends.
Owner: @mitchdenny
Changes: #20943
📝 Documentation required -
🛠️ Add Aspire editor assistance language model tools
The VS Code extension adds six new editor-assistance language-model tools for Copilot Chat: inspecting AppHost/resource debug session status, explaining the latest launch failure, opening the dashboard or Output panel, listing active debug sessions, and reporting Hot Reload applicability. The existing AppHost start/stop tools are also hardened with safer target resolution and failure handling.
Owner: @adamint
Changes: #19414
📝 Documentation required -
💬 One-time Aspire usefulness feedback prompt in VS Code
Adds a draft, one-time VS Code notification that asks whether Aspire improves the user's development experience (Yes/No/Don't ask again), to measure perceived benefit without a full survey. The campaign is currently disabled pending classification/privacy approval before it can be enabled.
Owner: @maddymontaquila
Changes: #20399
-
👻 Fix VS Code extension re-adding stale AppHost paths
The VS Code extension no longer re-adds a stale or mistyped configured AppHost path as a phantom, buildable candidate. Discovery and selection are now separated, so configuration can only select an AppHost that the CLI actually discovered.
Owner: @ellahathaway
Changes: #20112
🌍 Community contribution by @SankeerthNara -
🧯 Fix VS Code AppHost watcher lifecycle and duplicate startup requests
Fixed the VS Code extension leavingaspire ps --followprocesses running across polling restarts and deactivation, and eliminated duplicate AppHost detail and dashboard requests when connection snapshots were unchanged.
Owner: @ellahathaway
Changes: #20763
4 new features, 10 improvements, 8 bug fixes
-
🌐 Azure Front Door endpoint resource IDs
The Azure Front Door integration now exposes each origin's endpoint resource ID viaAzureFrontDoorResource.GetEndpointId(string), alongside the existing endpoint URL, so apps can configure Azure DNS apex alias records that require the resource ID.
Owner: @IEvangelist
Changes: #21053
📝 Documentation required -
🤖 New Azure AI client packages replace Azure.AI.OpenAI and Azure.AI.Inference
ReplacesAspire.Azure.AI.OpenAIandAspire.Azure.AI.Inference, which are discontinued, with two new packages:Aspire.Azure.AI.Projectsfor Foundry project-basedAIProjectClientregistration, andAspire.Azure.AI.Extensions.OpenAIfor both Foundry project (ProjectOpenAIClient) and Azure OpenAI account registrations backed by the standard OpenAI SDK. Also fixes Foundry hosted/prompt agents failing on Send Message by aligning the Azure SDK on 3.0.0-beta.3, and removes the previewHostedAgentConfiguration.Toolsproperty since the new SDK no longer serializes hosted-agent tools.
Owner: @tommasodotNET
Changes: #20712
⚠️ Breaking change
📝 Documentation required -
📡 Azure Web PubSub emulator support
Azure Web PubSub hosting now supportsRunAsEmulator(), letting AppHosts run locally against the Web PubSub emulator container without an Azure subscription, with local connection strings and hub event handler callbacks wired automatically. The emulator image is pinned to1.0.0-beta.2, which exposes a built-inGET /api/healthendpoint so the resource uses Aspire's standardWithHttpHealthCheckinstead of a custom check.
Owner: @davidfowl
Changes: #20956, #21019
📝 Documentation required
🌍 Community contribution by @vicancy -
🗄️ Choose the Service Bus emulator's SQL Server instance
The Azure Service Bus emulator's companion SQL Server instance can now be customized or replaced. NewWithSqlServeroverloads on the emulator builder let you configure the auto-created SQL Server resource using the regular SQL Server integration APIs, or reuse an existing SQL Server resource instead of creating a dedicated one.
Owner: @eerhardt
Changes: #17885
📝 Documentation required
🌍 Community contribution by @thomhurst
-
🧭 AKS Gateway API uses stable provisioning SDK
Updated the AKS integration to the latest Azure Provisioning SDK, which now has typed support forManagedClusterIngressProfileand Gateway API configuration. Gateway API-only deployments use the SDK's stable API version, while only the application load balancer feature still requires a preview API version.
Owner: @eerhardt
Changes: #21025 -
🔕 Disable dashboard telemetry in Docker and Kubernetes deployments
Dashboards generated for Docker Compose and Kubernetes deployments now setASPIRE_DASHBOARD_TELEMETRY_OPTOUT=trueby default, so deployed dashboards no longer report product usage/error telemetry unless explicitly re-enabled. Application OpenTelemetry ingestion and local AppHost dashboard behavior are unchanged.
Owner: @JamesNK
Changes: #20906
Docs: microsoft/aspire.dev#1888
📝 Documentation required -
🧰 IServiceProvider support in Cosmos DB extensions
Cosmos DB client configuration callbacks now receive anIServiceProvider, changingAction<CosmosClientOptions>toAction<IServiceProvider, CosmosClientOptions>. This letsCustomHandlersresolve DI-registered services, and theCosmosClientis now resolved through the DI container instead of being cached as a field.
Owner: @sebastienros
Changes: #19349
⚠️ Breaking change
📝 Documentation required
🌍 Community contribution by @AdamDotNet -
🧹 Graduate Azure role-assignment APIs to stable
AzureRoleAssignmentResourceis no longer experimental. Consumers can use Azure role-assignment APIs without suppressing theASPIREAZURE003experimental-API warning. Runtime provisioning and authorization behavior are unchanged.
Owner: @eerhardt
Changes: #20857 -
🧹 Graduate core Azure deployment APIs to stable
Consumers can now use the core Azure deployment APIs (AzurePublishingContext,AzureEnvironmentResource,AddAzureEnvironment,WithLocation,WithResourceGroup) without suppressing theASPIREAZURE001experimental-API warning. Signatures, defaults, and provisioning/deployment behavior are unchanged.
Owner: @mitchdenny
Changes: #20820 -
🧹 Graduate Azure Container Apps resource naming APIs to stable
Consumers of Azure Container Apps resource naming can now callWithUniqueResourceNaming()andWithCompactResourceNaming()without suppressing experimental-API diagnostics. The APIs, signatures, and opt-in defaults are unchanged.
Owner: @mitchdenny
Changes: #20806
📝 Documentation required -
⚡ Faster dev tunnel readiness and lifecycle tracking
Dev tunnel resources now report ready much more promptly by observing the tunnel host's console output directly, instead of relying solely on slower service-based reconciliation. Lifecycle events like stops, disconnects, reconnects, and host takeovers now update port resources and URL availability correctly.
Owner: @DamianEdwards
Changes: #20658 -
🗑️ Removed legacy RabbitMQ.Client v6 and MongoDB.Driver v2 packages
The legacyAspire.RabbitMQ.Client.v6andAspire.MongoDB.Driver.v2integration packages are removed from the repository and will no longer be published. Consumers should migrate toAspire.RabbitMQ.Client(RabbitMQ.Client 7.x) andAspire.MongoDB.Driver(MongoDB.Driver 3.x); previously published versions remain available on NuGet.
Owner: @eerhardt
Changes: #20608
Docs: microsoft/aspire.dev#1800
⚠️ Breaking change
📝 Documentation required -
📦 Updated and consolidated MongoDB dependencies
MongoDB integrations now consistently use MongoDB.Driver 3.12.0 across target frameworks, updated MongoDB EF Core provider versions, and ship a new net10.0 asset forAspire.MongoDB.EntityFrameworkCore. The upstream driver now requires MongoDB Server 4.4 or later.
Owner: @eerhardt
Changes: #20607 -
🧹 Remove redundant experimental warnings from Aspire.Hosting.Dotnet
Consumers ofAspire.Hosting.Dotnetno longer need to suppress theASPIREDOTNETPROJECT001experimental-API warning to useAddDotnetProject,DotnetProjectResource, orWithBuildEnvironment, since the package is already prerelease.
Owner: @eerhardt
Changes: #20490
Docs: microsoft/aspire.dev#1761
📝 Documentation required
-
🔐 Cross-resource-group ACR pull for AKS
AKS clusters can now pull application images from an existing Azure Container Registry in a different resource group or subscription, using role assignments scoped to the registry. Separate pre-created identities are used for the control plane and kubelets instead of the previous AKS-managed kubelet identity.
Owner: @mitchdenny
Changes: #20919
⚠️ Breaking change
📝 Documentation required -
🌐 Fix Azure Front Door resource-name regression
Updated the Azure Container Apps CDN/Front Door integration toAzure.Provisioning.Cdn1.0.0-beta.4, restoring the expected Front Door resource-name character and length rules that had regressed in beta.3.
Owner: @eerhardt
Changes: #20855 -
🔑 Fix Azure Npgsql username resolution for Base64Url tokens
The Azure Npgsql integration now correctly resolves the username from Microsoft Entra access tokens that use Base64Url encoding (containing-or_characters). Previously these tokens failed to decode, causing the database connection to fail.
Owner: @eerhardt
Changes: #20880
🌍 Community contribution by @enhancer13 -
🐛 Fix TypeScript Bicep parameter expressions on enum Azure properties
Fixed TypeScript AppHosts failing to publish whenconfigureInfrastructureassigned abicep().parameter(...)expression to an enum-valued Azure provisioning property (such as a storage SKU name). String-backed Bicep expressions now flow into enum-valued properties while literal type checking is preserved.
Owner: @sebastienros
Changes: #20557 -
🔗 Fix Mongo Express connection with single-member replica sets
AddMongoDB("mongo").WithReplicaSet().WithMongoExpress()previously left Mongo Express crashing after about 30 seconds because it tried to connect to the replica set'slocalhostmember address instead of the server's container-network address. Mongo Express is now configured through a direct connection URL for single-member replica sets, so the two APIs work together without manual connection-string overrides.
Owner: @sebastienros
Changes: #20571 -
📄 Preserve multiline quoted values in Docker Compose env files
Publishing Docker Compose output no longer drops continuation lines and the closing quote from multiline quoted.envvalues, preserving original line endings, escaped quotes, blank lines, and embedded#/=characters. Unterminated quoted values now fail fast with a clear error.
Owner: @mitchdenny
Changes: #20620
🌍 Community contribution by @Benziza -
🐛 Fix SQL Server REPL launch on Windows
Fixes the SQL Server dashboard REPL failing to launch from Windows checkouts due to CRLF line endings in an embedded shell script. The REPL now launchessqlcmddirectly and adds aSqlServerReplOptionscallback withSqlServerReplCommand.Version17/Version18so older or custom images can select an installed client path.
Owner: @mitchdenny
Changes: #20704
⚠️ Breaking change
📝 Documentation required -
🩺 Fix SQL Server health check false negatives from pool blocking
SQL Server health checks forAddSqlServerandAddDatabasenow connect using a dedicated connection string withPoolBlockingPeriod.NeverBlock, so a transient failure from other code sharing the same pool can no longer poison health-check results for up to a minute, and SQL resources can become healthy faster during startup.
Owner: @JamesNK
Changes: #20534
🌍 Community contribution by @afscrome
1 improvement, 1 bug fix
-
🧹 Remove redundant experimental warnings from Azure Sandboxes
Consumers of Azure Container Apps Sandboxes no longer need to suppress theASPIREAZURE001experimental-API warning, since the entireAspire.Hosting.Azure.Sandboxespackage is already prerelease.
Owner: @eerhardt
Changes: #20482
📝 Documentation required
-
💾 Fix Azure Sandbox disk sizing for small tiers
Deploying an Azure Container Apps Sandbox with theExtraSmallorAzureSandboxTier.Smalltier always failed because the requested disk size exceeded the Azure Dev Compute data plane's cores-based disk cap. Disk sizing is now scaled per tier so every tier deploys successfully.
Owner: @eerhardt
Changes: #20461
1 improvement, 2 bug fixes
-
⬆️ Raise Aspire's minimum supported .NET version to .NET 10
Aspire's minimum supported .NET version is raised to .NET 10: shipping libraries and C# templates now targetnet10.0/net11.0and no longer support .NET 8 or .NET 9.dotnet new aspire-starter --frameworknow only acceptsnet10.0ornet11.0, defaulting tonet10.0. Applications targeting .NET 8 or .NET 9 must upgrade before adopting this major version's library packages.
Owner: @DamianEdwards
Changes: #20614
⚠️ Breaking change
📝 Documentation required
-
🔒 Fix Log4j vulnerability in Java starter template
Updates Log4j to 2.25.5 in the CLI's Java starter template and Spring Boot playground samples, fixing CVE-2026-49844 whereMapMessagecould serialize non-finite floating-point values as invalid JSON.
Owner: @radical
Changes: #20830 -
🔒 Patch vulnerable JavaScript dependencies in starter templates
Patches vulnerable JavaScript dependencies (proxy-addr,source-map-js, and several database instrumentation packages) in shipped starter frontend templates, playgrounds, deployment fixtures, and TypeScript SDK tests, so new scaffolds no longer restore vulnerable package versions.
Owner: @radical
Changes: #20831
2 bug fixes
-
🗂️ Fix FileSystemService access in testing builders
Accessing FileSystemService on DistributedApplicationTestingBuilder and the generic testing builder no longer throws NotImplementedException, since both wrappers now forward the property to the underlying DistributedApplicationBuilder.
Owner: @IEvangelist
Changes: #20966 -
🔁 Prevent recursive test runner invocation
DistributedApplicationTestingBuilder.CreateAsync now detects when the target type belongs to a Microsoft.Testing.Platform test project rather than an AppHost executable, and fails fast with a clear diagnostic instead of recursively relaunching the test runner and leaving stray AppHost/DCP processes behind.
Owner: @danegsta
Changes: #20573
To provide feedback, comment on the Changelog feedback issue (e.g., "Exclude PR #1234", "Rename: X → Y", "Merge PRs #1234 and #5678").
PRs processed: ✅ 121 included · ❌ 78 excluded · ⏳ 0 unprocessed · 199 total merged in milestone (View full PR tracker) Docs PRs: ✅ 6 included · ❌ 38 excluded · ⏳ 0 unprocessed · 44 total from microsoft/aspire.dev (View docs PR tracker) PRs analyzed through: #20726 merged 2026-10-17 01:36 UTC