From cd2f532b234ca13b39aace54f8e8ce1ec914c233 Mon Sep 17 00:00:00 2001 From: David Pine <7679720+IEvangelist@users.noreply.github.com> Date: Mon, 17 Aug 2026 16:20:44 -0500 Subject: [PATCH 1/3] Revise "What's new in Aspire 13.5" for DX impact Reframe the 13.5 release notes as a developer-experience release: - Showcase all CLI installers (Homebrew, npm, NuGet, WinGet, mise, Nix) - Reframe the Interaction Service around C#/TypeScript parity - Lead the TypeScript AppHost section with GA (ASPIREATS001 removed) - Chain TypeScript fluent API samples to mirror the C# tabs - Reframe the .NET project/Go debugging section around AddDotnetProject, accurate VS Code debug-attach, and the publish limitation - Add ceremony to New & updated integrations - Rewrite "CLI bundle by default" (template opt-in, dnx acquisition, aspire run delegation, graceful diagnostics) - Embed refreshed dashboard screenshots - Add a C# AppHost CLI-bundle/dnx upgrade note - Add intro prose under every section heading (no sequential headings) - Reorder sections (CLI/Dashboard/VS Code before Deployment) for impact Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../content/docs/whats-new/aspire-13-5.mdx | 330 +++++++++++------- 1 file changed, 204 insertions(+), 126 deletions(-) diff --git a/src/frontend/src/content/docs/whats-new/aspire-13-5.mdx b/src/frontend/src/content/docs/whats-new/aspire-13-5.mdx index a30dd42c4..4c239bda9 100644 --- a/src/frontend/src/content/docs/whats-new/aspire-13-5.mdx +++ b/src/frontend/src/content/docs/whats-new/aspire-13-5.mdx @@ -1,6 +1,6 @@ --- title: "What's new in Aspire 13.5" -description: "Explore Aspire 13.5: interactive terminal sessions, polyglot IInteractionService with file uploads and progress dialogs, user-defined resource command arguments, TypeScript AppHost health checks and container files, HTTPS certificates for projects, Kubernetes and AKS persistent volumes, a refreshed dashboard, and a rebranded VS Code extension." +description: "Explore Aspire 13.5, a developer-experience release: interactive terminal sessions, the Interaction Service across C# and TypeScript AppHosts with file uploads and progress dialogs, user-defined resource command arguments, generally available TypeScript AppHosts with health checks and container files, HTTPS certificates for projects, Kubernetes and AKS persistent volumes, a refreshed dashboard, and a rebranded VS Code extension." sidebar: label: Aspire 13.5 order: 0 @@ -18,24 +18,27 @@ import { } from '@astrojs/starlight/components'; import LearnMore from '@components/LearnMore.astro'; import OsAwareTabs from '@components/OsAwareTabs.astro'; +import { Image } from 'astro:assets'; -Aspire 13.5 is here, with a release focused on **developer experience**, **polyglot feature parity**, and **runtime stability**. The headline is a richer, more interactive AppHost: resources can host **interactive terminal sessions** with `WithTerminal()`, the **Interaction Service** works across every polyglot AppHost — now with **file uploads** and **progress dialogs** — and resource commands can **prompt for user-defined arguments** before they run. TypeScript AppHosts gain **custom health checks** and **container file copying** to close the gap with C#, projects can request **HTTPS developer certificates**, and deployment picks up **persistent volumes for Kubernetes and AKS**. The dashboard gets an officially branded visual refresh and sharper telemetry filtering, and the Visual Studio Code extension is rebranded to **Aspire** with dashboard, debugging, and discovery improvements. +import dashboardResources from '@assets/dashboard/explore/projects.png'; +import dashboardStructuredLogsFiltered from '@assets/dashboard/explore/structured-logs-filtered.png'; +import dashboardTracesFiltering from '@assets/dashboard/explore/traces-filtering.png'; + +Aspire 13.5 is here, and it's a **developer-experience** release through and through — sharper tooling, **C# and TypeScript feature parity**, and a batch of runtime-stability fixes. The headline is a richer, more interactive AppHost: resources can host **interactive terminal sessions** with `WithTerminal()`, the **Interaction Service** now works across both **C#** and **TypeScript** AppHosts — with **file uploads** and **progress dialogs** — and resource commands can **prompt for user-defined arguments** before they run. **TypeScript AppHosts are now generally available**, gaining **custom health checks** and **container file copying** to close the gap with C#. Projects can request **HTTPS developer certificates**, and deployment picks up **persistent volumes for Kubernetes and AKS**. The dashboard gets an officially branded visual refresh and sharper telemetry filtering, and the Visual Studio Code extension is rebranded to **Aspire** with dashboard, debugging, and discovery improvements. We'd love to hear what you think. Drop by [ Discord](https://aka.ms/aspire-discord) to chat with the team and the community, or file feedback and issues on [ GitHub](https://github.com/microsoft/aspire/issues). This release introduces: - **Interactive terminal sessions** with the experimental `WithTerminal()` API, so you can attach to REPLs, shells, and other terminal programs running as Aspire resources from the dashboard — with an opt-in `aspire terminal` CLI command. -- **Polyglot Interaction Service parity**, bringing prompts, message boxes, notifications, and dynamic inputs to TypeScript, Python, Go, Java, and Rust AppHosts alongside C#. -- **File uploads and progress dialogs** in the Interaction Service — the file-upload input is stable, and progress dialogs are available behind an experimental diagnostic. -- **Stable prompt and input APIs** — the core `PromptInput`/`PromptInputs` surface no longer requires suppressing `ASPIREINTERACTION001`. +- **The Interaction Service across C# and TypeScript AppHosts** — prompts, message boxes, notifications, and dynamic inputs, now with **file uploads** and **progress dialogs**. The core `PromptInput`/`PromptInputs` surface is stable and no longer requires suppressing `ASPIREINTERACTION001`. - **User-defined resource command arguments**, so the dashboard can prompt for input before invoking a command — the CLI exposes them as `--` options — with full C# and TypeScript parity. -- **Custom health checks and container file copying for TypeScript AppHosts**, plus faster startup and a batch of reliability fixes. - **HTTPS certificates for project resources** through a new experimental configuration API. -- **Cross-scope Azure resource references** with the `AsExisting*` family, and **persistent volumes for Kubernetes and AKS**. +- **Generally available TypeScript AppHosts**, adding **custom health checks** and **container file copying** at parity with C#, plus faster startup and a batch of reliability fixes. +- **The Aspire CLI on npm and Nix**, with the CLI bundle enabled by default in new C# projects — acquired on the fly via `dnx`. - **A refreshed, officially branded dashboard** with timestamp filtering, numeric operators, and console-log text search. - **A rebranded Visual Studio Code extension** with a dashboard side panel, Bun and MAUI debugging, and resource commands in the tree view. -- **The Aspire CLI on npm and Nix**, with the CLI bundle enabled by default in new projects. +- **Cross-scope Azure resource references** with the `AsExisting*` family, and **persistent volumes for Kubernetes and AKS**. - …and much more. ## 🆙 Upgrade to Aspire 13.5 @@ -73,7 +76,54 @@ The easiest way to upgrade to Aspire 13.5 is using the [`aspire update` command] -Or install the CLI from scratch: +Or install the CLI from scratch. The Aspire CLI ships through the package managers you already use — added in the 13.4 timeframe and now the recommended way to get it — so pick whichever fits your environment: + + + + +```bash title="Install with Homebrew" +brew install --cask microsoft/aspire/aspire +``` + + + + +```bash title="Install with npm" +npm install -g @microsoft/aspire-cli +``` + + + + +```bash title="Install with the .NET CLI" +dotnet tool install -g Aspire.Cli +``` + + + + +```powershell title="Install with WinGet" +winget install Microsoft.Aspire +``` + + + + +```bash title="Install with mise" +mise use -g aspire +``` + + + + +```bash title="Run with Nix" +nix run github:microsoft/aspire#aspire-cli +``` + + + + +Prefer the one-line install script? It still works everywhere: @@ -93,11 +143,17 @@ Or install the CLI from scratch: - For more details on installing the Aspire CLI, see [Install the CLI](/get-started/install-cli/). + For every installation method, see [Install the CLI](/get-started/install-cli/). + + ## 🧩 App model and AppHost +The AppHost is where 13.5 invests most heavily. These additions make local development more interactive and bring the C# and TypeScript app models closer to parity — from terminal sessions and richer user interactions to modeling more kinds of resources. + ### 🖥️ Interactive terminal sessions with WithTerminal() AppHost authors can now call `WithTerminal()` on a resource to enable an interactive terminal session. The dashboard can attach to and detach from the session at will, so you can drive REPLs, shells, and other terminal programs that run as Aspire resources — right from the dashboard's terminal view. Terminal dimensions are configurable through `TerminalOptions`, which exposes `Columns` (default `120`), `Rows` (default `30`), and `ShowTerminalHost`. @@ -134,8 +190,7 @@ const builder = await createBuilder(); // Polyglot AppHosts expose a parameterless withTerminal(). Terminal dimensions // (TerminalOptions.Columns/Rows) can only be configured from C#. -const db = await builder.addContainer('db', 'postgres'); -await db.withTerminal(); +await builder.addContainer('db', 'postgres').withTerminal(); await builder.build().run(); ``` @@ -147,9 +202,9 @@ await builder.build().run(); For details, see [Interactive terminal sessions with WithTerminal()](/app-host/with-terminal/). -### 💬 IInteractionService across every polyglot AppHost +### 💬 Interaction Service for C# and TypeScript AppHosts -The Interaction Service and all of its related types — prompts, message boxes, notifications, and dynamic inputs — are now available in **polyglot AppHosts** written in TypeScript, Python, Go, Java, and Rust, reaching parity with C#. In addition, the core prompt and input APIs (`PromptInputAsync`, `PromptInputsAsync`, and the supporting `InteractionInput`, `InputType`, and `InteractionInputCollection` types) are now **stable**, so you no longer have to suppress `ASPIREINTERACTION001` to use them from production code. +The Interaction Service and all of its related types — prompts, message boxes, notifications, and dynamic inputs — now work the same way from **C#** and **TypeScript** AppHosts, so the examples below come in both languages. The core prompt and input APIs (`PromptInputAsync`, `PromptInputsAsync`, and the supporting `InteractionInput`, `InputType`, and `InteractionInputCollection` types) are now **stable**, so you no longer have to suppress `ASPIREINTERACTION001` to use them from production code. The example below adds a resource command that prompts the user to choose a region, then acts on the selection. @@ -457,9 +512,7 @@ import { createBuilder, InputType } from './.aspire/modules/aspire.mjs'; const builder = await createBuilder(); -const api = await builder.addContainer('api', 'nginx'); - -await api.withCommand('echo', 'Echo', async (ctx) => { +await builder.addContainer('api', 'nginx').withCommand('echo', 'Echo', async (ctx) => { const args = await ctx.arguments(); const message = await args.value('message'); // Use the collected argument... @@ -512,8 +565,7 @@ import { createBuilder } from './.aspire/modules/aspire.mjs'; const builder = await createBuilder(); -const api = await builder.addProject('api', './src/Api'); -await api.withHttpsDeveloperCertificate(); +await builder.addProject('api', './src/Api').withHttpsDeveloperCertificate(); await builder.build().run(); ``` @@ -557,8 +609,8 @@ const name = await builder.addParameter('sb-name'); const resourceGroup = await builder.addParameter('sb-rg'); const subscription = await builder.addParameter('sb-sub'); -const sb = await builder.addAzureServiceBus('sb'); -await sb.asExistingInResourceGroup(name, resourceGroup, subscription); +await builder.addAzureServiceBus('sb') + .asExistingInResourceGroup(name, resourceGroup, subscription); await builder.build().run(); ``` @@ -570,9 +622,9 @@ await builder.build().run(); For run- versus publish-mode behavior, see [Use existing Azure resources](/integrations/cloud/azure/customize-resources/). -### 🐞 Debugging .NET project and Go resources +### 🐞 Model .NET projects by path with AddDotnetProject -Aspire 13.5 adds the experimental `AddDotnetProject(name, path)` API in the new `Aspire.Hosting.Dotnet` package, which models a .NET project by path (as a `DotnetProjectResource`) and participates in the debugging experience. Go AppHosts also gain multi-client Delve attach, so you can attach a debugger to Go resources under orchestration. +Aspire 13.5 adds the experimental `AddDotnetProject(name, path)` API in the new `Aspire.Hosting.Dotnet` package. It models a .NET project **by its path** — as a `DotnetProjectResource` — which is useful when you can't (or don't want to) add a compile-time `ProjectReference` from the AppHost, for example when the project lives outside your solution or you're assembling a mixed-language app. The resource participates in orchestration like any other project, and the [Aspire Visual Studio Code extension](/get-started/aspire-vscode-extension/) can attach a debugger to it through the new `SupportsDebuggingAnnotation`.