diff --git a/src/frontend/src/assets/whats-new/aspire-13.2/dash1-actions-menu.png b/src/frontend/src/assets/whats-new/aspire-13.2/dash1-actions-menu.png new file mode 100644 index 000000000..1cda9610d Binary files /dev/null and b/src/frontend/src/assets/whats-new/aspire-13.2/dash1-actions-menu.png differ diff --git a/src/frontend/src/assets/whats-new/aspire-13.2/dashboard-set-parameters.png b/src/frontend/src/assets/whats-new/aspire-13.2/dashboard-set-parameters.png new file mode 100644 index 000000000..892f1461d Binary files /dev/null and b/src/frontend/src/assets/whats-new/aspire-13.2/dashboard-set-parameters.png differ diff --git a/src/frontend/src/assets/whats-new/aspire-13.2/export-all-button.png b/src/frontend/src/assets/whats-new/aspire-13.2/export-all-button.png new file mode 100644 index 000000000..d757844a5 Binary files /dev/null and b/src/frontend/src/assets/whats-new/aspire-13.2/export-all-button.png differ diff --git a/src/frontend/src/assets/whats-new/aspire-13.2/export-env-dialog.png b/src/frontend/src/assets/whats-new/aspire-13.2/export-env-dialog.png new file mode 100644 index 000000000..4fa58ca4d Binary files /dev/null and b/src/frontend/src/assets/whats-new/aspire-13.2/export-env-dialog.png differ diff --git a/src/frontend/src/assets/whats-new/aspire-13.2/export-json-dialog.png b/src/frontend/src/assets/whats-new/aspire-13.2/export-json-dialog.png new file mode 100644 index 000000000..93a5fc753 Binary files /dev/null and b/src/frontend/src/assets/whats-new/aspire-13.2/export-json-dialog.png differ diff --git a/src/frontend/src/assets/whats-new/aspire-13.2/export-json-menu.png b/src/frontend/src/assets/whats-new/aspire-13.2/export-json-menu.png new file mode 100644 index 000000000..d0f36fc37 Binary files /dev/null and b/src/frontend/src/assets/whats-new/aspire-13.2/export-json-menu.png differ diff --git a/src/frontend/src/assets/whats-new/aspire-13.2/manage-dialog.png b/src/frontend/src/assets/whats-new/aspire-13.2/manage-dialog.png new file mode 100644 index 000000000..4ca9ba520 Binary files /dev/null and b/src/frontend/src/assets/whats-new/aspire-13.2/manage-dialog.png differ diff --git a/src/frontend/src/assets/whats-new/aspire-13.2/resource-graph-after.png b/src/frontend/src/assets/whats-new/aspire-13.2/resource-graph-after.png new file mode 100644 index 000000000..e56fd1be4 Binary files /dev/null and b/src/frontend/src/assets/whats-new/aspire-13.2/resource-graph-after.png differ diff --git a/src/frontend/src/assets/whats-new/aspire-13.2/resource-graph-before.png b/src/frontend/src/assets/whats-new/aspire-13.2/resource-graph-before.png new file mode 100644 index 000000000..9364a580c Binary files /dev/null and b/src/frontend/src/assets/whats-new/aspire-13.2/resource-graph-before.png differ diff --git a/src/frontend/src/assets/whats-new/aspire-13.2/structured-log-details.png b/src/frontend/src/assets/whats-new/aspire-13.2/structured-log-details.png new file mode 100644 index 000000000..981704bfa Binary files /dev/null and b/src/frontend/src/assets/whats-new/aspire-13.2/structured-log-details.png differ diff --git a/src/frontend/src/assets/whats-new/aspire-13.2/trace-details-json.png b/src/frontend/src/assets/whats-new/aspire-13.2/trace-details-json.png new file mode 100644 index 000000000..b75fc4eb9 Binary files /dev/null and b/src/frontend/src/assets/whats-new/aspire-13.2/trace-details-json.png differ diff --git a/src/frontend/src/content/docs/get-started/add-aspire-existing-app-csharp-apphost.mdx b/src/frontend/src/content/docs/get-started/add-aspire-existing-app-csharp-apphost.mdx index fe850de2c..cfa299532 100644 --- a/src/frontend/src/content/docs/get-started/add-aspire-existing-app-csharp-apphost.mdx +++ b/src/frontend/src/content/docs/get-started/add-aspire-existing-app-csharp-apphost.mdx @@ -600,7 +600,7 @@ ServiceDefaults provide a standardized way to add observability, resilience, and - For more information on ServiceDefaults, see [Service Defaults](/fundamentals/csharp-service-defaults/). + For more information on ServiceDefaults, see [Service Defaults](/get-started/csharp-service-defaults/). @@ -939,7 +939,7 @@ Congratulations! You've successfully added Aspire to your existing application. - **Add more integrations** — Explore [Aspire integrations](/integrations/gallery/) to simplify working with databases, caches, and message queues - **Configure observability** — Enhance your application's telemetry: - - Learn about [Service Defaults](/fundamentals/csharp-service-defaults/) + - Learn about [Service Defaults](/get-started/csharp-service-defaults/) - See [Standalone dashboard for Python](/dashboard/standalone-for-python/) diff --git a/src/frontend/src/content/docs/get-started/first-app-csharp-apphost.mdx b/src/frontend/src/content/docs/get-started/first-app-csharp-apphost.mdx index c09555803..39b266693 100644 --- a/src/frontend/src/content/docs/get-started/first-app-csharp-apphost.mdx +++ b/src/frontend/src/content/docs/get-started/first-app-csharp-apphost.mdx @@ -35,7 +35,7 @@ This starter template uses modern C#: - [Minimal APIs](https://learn.microsoft.com/aspnet/core/fundamentals/minimal-apis) for lightweight HTTP APIs - [Blazor](https://learn.microsoft.com/aspnet/core/blazor) for interactive web UIs using C# -- [Service defaults](/fundamentals/csharp-service-defaults/) for shared configuration of observability and resilience +- [Service defaults](/get-started/csharp-service-defaults/) for shared configuration of observability and resilience The following diagram shows the architecture of the sample app you're creating: diff --git a/src/frontend/src/content/docs/whats-new/aspire-13-2.mdx b/src/frontend/src/content/docs/whats-new/aspire-13-2.mdx index 9f584fca0..250e6279c 100644 --- a/src/frontend/src/content/docs/whats-new/aspire-13-2.mdx +++ b/src/frontend/src/content/docs/whats-new/aspire-13-2.mdx @@ -1,6 +1,6 @@ --- title: What's new in Aspire 13.2 -description: Aspire 13.2 introduces detached mode for long-running apps, Foundry integration and hosted agents, new CLI commands for docs, certs, exports, and secrets, TypeScript AppHost support, dashboard telemetry management, Azure Virtual Network and private endpoint support, and numerous multi-language improvements. +description: Aspire 13.2 is here with new CLI commands, TypeScript AppHost support, and new and improved integrations. sidebar: label: Aspire 13.2 order: 0 @@ -9,7 +9,8 @@ tableOfContents: maxHeadingLevel: 2 --- -import { Aside, Steps } from '@astrojs/starlight/components'; +import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components'; +import { Image } from 'astro:assets'; import LearnMore from '@components/LearnMore.astro'; import OsAwareTabs from '@components/OsAwareTabs.astro'; import ThemeImage from '@components/ThemeImage.astro'; @@ -20,16 +21,17 @@ import consoleLogsDark from '@assets/whats-new/aspire-13.2/console-logs-dark.png import consoleLogsLight from '@assets/whats-new/aspire-13.2/console-logs-light.png'; import structuredLogsDark from '@assets/whats-new/aspire-13.2/structured-logs-dark.png'; import structuredLogsLight from '@assets/whats-new/aspire-13.2/structured-logs-light.png'; +import resourceGraphBefore from '@assets/whats-new/aspire-13.2/resource-graph-before.png'; +import resourceGraphAfter from '@assets/whats-new/aspire-13.2/resource-graph-after.png'; +import dashboardSetParameters from '@assets/whats-new/aspire-13.2/dashboard-set-parameters.png'; +import manageDialog from '@assets/whats-new/aspire-13.2/manage-dialog.png'; +import exportJsonMenu from '@assets/whats-new/aspire-13.2/export-json-menu.png'; +import exportJsonDialog from '@assets/whats-new/aspire-13.2/export-json-dialog.png'; +import exportEnvDialog from '@assets/whats-new/aspire-13.2/export-env-dialog.png'; -Aspire 13.2 brings significant improvements to the developer experience with enhanced CLI capabilities, dashboard improvements, new AI agent integrations, and better multi-language support. This release focuses on making local development more streamlined while maintaining the robust cloud-native foundation that Aspire is known for. +Welcome to Aspire 13.2! Whether you're a long-time Aspire user or just getting started, we're excited for you to try what's new. If you have questions, feedback, or run into issues, come say hi on [Discord](https://aka.ms/aspire-discord) or open an issue on [GitHub](https://github.com/dotnet/aspire/issues). -Aspire 13.2 supports: - -- .NET 8.0 Long Term Support (LTS) -- .NET 9.0 Standard Term Support (STS) -- .NET 10.0 Long Term Support (LTS) - -It's important to note that Aspire releases out-of-band from .NET releases. While major versions of Aspire align with major .NET versions, minor versions are released more frequently. For more information on .NET and Aspire version support, see the [Aspire support policy](https://dotnet.microsoft.com/platform/support/policy/aspire). +Aspire 13.2 brings significant improvements with enhanced CLI capabilities, dashboard improvements, new AI agent integrations, and better multi-language support. This release focuses on making local development more streamlined for both developers and coding agents while maintaining the robust cloud-native foundation that Aspire is known for. 13.2 also includes significant infrastructure improvements to make it easy for the Aspire team to ship more frequent stable releases. A huge thank you to all the community contributors who helped make this release happen — your issues, PRs, and feedback drive Aspire forward. ## 🆙 Upgrade to Aspire 13.2 @@ -38,7 +40,7 @@ It's important to note that Aspire releases out-of-band from .NET releases. Whil @@ -56,16 +58,16 @@ The easiest way to upgrade to Aspire 13.2 is using the `aspire update` command: -1. Update your Aspire project using the [`aspire update` command](/reference/cli/commands/aspire-update/): +1. Update the Aspire CLI: - ```bash title="Aspire CLI — Update all Aspire packages" - aspire update + ```bash title="Aspire CLI — Update the CLI" + aspire update --self ``` -2. Update the Aspire CLI itself: +2. Update your Aspire apphost using the [`aspire update` command](/reference/cli/commands/aspire-update/): - ```bash title="Aspire CLI — Update the CLI" - aspire update --self + ```bash title="Aspire CLI — Update all Aspire packages" + aspire update ``` @@ -74,74 +76,87 @@ Or install the CLI from scratch: - - ```bash title="Aspire CLI — Install Aspire CLI" curl -sSL - https://aspire.dev/install.sh | bash + + ```bash title="Aspire CLI — Install Aspire CLI" + curl -sSL https://aspire.dev/install.sh | bash ``` - ```powershell title="Aspire CLI — Install Aspire CLI" irm - https://aspire.dev/install.ps1 | iex + ```powershell title="Aspire CLI — Install Aspire CLI" + irm https://aspire.dev/install.ps1 | iex ``` -You can also manually update your AppHost project file (for example, _MyApp.AppHost.csproj_) to reference `Aspire.AppHost.Sdk` version `13.2.0`: +You can also manually update your apphost to reference Aspire version `13.2.0`: -```xml title="XML — MyApp.AppHost.csproj" - + + + +```csharp title="C# — AppHost.cs" +#:package Aspire.AppHost.Sdk@13.2.0 ``` -Then check for any NuGet package updates, either using the NuGet Package Manager in Visual Studio or the **Update NuGet Package** command from C# Dev Kit in VS Code. + + -If you're using a JavaScript or TypeScript AppHost, run `aspire restore` after upgrading so the guest AppHost SDK code and language-specific artifacts are regenerated: +If you're using a C# apphost, you can then upgrade both your hosting and client integrations via NuGet. -```bash title="Aspire CLI — Restore guest AppHost" -aspire restore -``` +If you're using a TypeScript apphost, run `aspire restore` after upgrading so the integration SDKs are regenerated. For more details on installing the Aspire CLI, see [Install the CLI](/get-started/install-cli/). -## 🛠️ Aspire CLI enhancements +## 🛠️ CLI enhancements + +Aspire 13.2 introduces a wave of new CLI commands that dramatically expand what you can do from the terminal. The CLI now exposes all of the data that was previously trapped inside the dashboard and apphost, making it accessible from scripts, editors, and automation workflows. ### Language-specific templates and multi-language setup -Aspire 13.2 makes the `aspire new` experience much more language-aware. Instead of treating every starter as a .NET-first layout, the CLI now scaffolds language-specific templates for .NET and non-.NET AppHosts and carries the right metadata forward into configuration and generated SDK assets. +Aspire 13.2 makes the `aspire new` (creates a full starter template) and `aspire init` (creates only an apphost) experiences much more language-aware. The CLI now has options to scaffold language-specific full stack starter apps for C#, TypeScript, Python, and both C# and TypesScript apphosts. Use `aspire new` to create a new project from a template, or `aspire init` to add Aspire to an existing project. -The new `aspire restore` command is part of that story. For .NET AppHosts it restores packages, and for guest AppHosts it regenerates SDK code and required artifacts even when `aspire run` would otherwise skip regeneration because the package hash hasn't changed. +The new `aspire restore` command complements this workflow. For C# apphosts it restores the integration NuGet packages, and for TypeScript apphosts it regenerates the integration SDK code and required artifacts. This automatically happens on `aspire run`, but is also now exposed manually. ```bash title="Aspire CLI — Templates and restore" # Create a new starter with the interactive template picker aspire new -# Restore a guest AppHost and regenerate SDK code -aspire restore --apphost .\AppHost\apphost.ts +# Or, create a new blank apphost in an existing codebase +aspire init + +# Restores integration packages and starts the apphost +aspire run + +# Manually restore integrations +aspire restore ``` ### Detached mode and process management -One of the most requested features lands in 13.2: **detached mode** for running Aspire applications. You can now run your AppHost in the background, freeing up your terminal for other tasks. +One of the most requested features lands in 13.2: **detached mode** for running Aspirified apps. You can now run your apphost in the background, freeing up your terminal for other tasks. ```bash title="Aspire CLI — Detached mode and process management" # Run in detached mode aspire run --detach -# List all running AppHosts +# Shorthand command for run --detach +aspire start + +# List all running apphosts aspire ps -# Stop a running AppHost +# Stop a running apphost in the background aspire stop ``` -The `aspire ps` command displays all currently running Aspire AppHosts, making it easy to manage multiple projects simultaneously. When combined with `aspire stop`, you have full control over your application lifecycle directly from the command line. +The `aspire ps` command displays all currently running Aspire apphosts, making it easy to manage multiple projects simultaneously. When combined with `aspire stop`, you have full control over your application lifecycle directly from the command line. -The new `aspire start` shortcut makes background AppHost startup easier to remember, and `aspire stop` can stop a selected AppHost or all running AppHosts. In JSON mode, `aspire ps` can include resources, which makes it a solid building block for automation and editor integrations. +The new `aspire start` shortcut makes background apphost startup easier to remember, and `aspire stop` can stop a selected apphost or all running apphosts. In JSON mode, `aspire ps` can include resources, which makes it a solid building block for automation and editor integrations. ```bash title="Aspire CLI — Extended operations" aspire start --apphost .\MyApp.AppHost\MyApp.AppHost.csproj @@ -174,20 +189,21 @@ aspire ps --format Json ### Isolated mode for parallel development -The new `--isolated` flag enables running an AppHost with randomized ports and isolated user secrets: +The new `--isolated` flag runs an apphost with randomized ports and isolated user secrets, preventing port conflicts and configuration collisions: ```bash title="Aspire CLI — Isolated mode" aspire run --isolated +aspire start --isolated ``` -Isolated mode assigns random ports and creates separate user secrets for each run, preventing port conflicts and configuration collisions. This is particularly useful when switching between different Aspire projects or running integration tests that need dedicated ports. +This is especially useful for agentic workflows, git worktrees, and integration tests where multiple instances of the same apphost need to run side by side. ### Resource monitoring with `aspire describe` -The `aspire resources` command has been renamed to `aspire describe` (with `resources` kept as a backward-compatible alias) to better align with `kubectl`-style conventions. The `--watch` flag has also been renamed to `--follow`/`-f` for consistency with `aspire logs --follow`. +The new `aspire describe` command gives you and your coding agents CLI access to the same detailed resource information you get in the Aspire dashboard. You can inspect resource state, configuration, environment variables, health status, and more—all from the terminal. ```bash title="Aspire CLI — Describe resources" -# Show all resources in a running AppHost +# Show all resources in a running apphost aspire describe # Continuously stream resource state changes @@ -209,36 +225,30 @@ aspire doctor This command checks: -- .NET SDK installation and version - HTTPS development certificate status (including detection of multiple certificates) - Container runtime (Docker/Podman) availability and version -- WSL2 environment configuration - Container tunnel requirements for Docker Engine +- .NET SDK installation and version +- WSL2 environment configuration - Agent configuration status (detecting deprecated settings) Not all checks appear in every run. Some checks, such as WSL2 configuration and agent configuration status, are conditional and only appear when the relevant environment or issues are detected. The output provides actionable recommendations when issues are detected, making it easier to troubleshoot configuration problems. - - ### Enhanced `aspire add` with fuzzy search -Finding the right integration package is now easier with fuzzy search in the `aspire add` command. Simply start typing and the CLI will suggest matching packages, reducing the friction of discovering and adding new integrations to your project. This release also improves friendly-name generation and better respects central package management. +Finding the right integration package is now easier with fuzzy search in the `aspire add` command. Simply start typing and the CLI will suggest matching packages, reducing the friction of discovering and adding new integrations to your project. This release also improves friendly-name generation and better respects NuGet central package management for C# apps. Command reference: [`aspire add`](/reference/cli/commands/aspire-add/). -### New CLI commands for certificates, exports, secrets, and waits +### New CLI commands for certificates, exports, secrets, and resource lifecycles Aspire 13.2 significantly expands the day-to-day CLI surface area with several new commands. -Certificate and secret management get first-class commands: +Certificate and parameter/secret management get first-class commands: ```bash title="Aspire CLI — Certificate and secret management" aspire certs clean @@ -248,7 +258,7 @@ aspire secret set ApiKey super-secret-value aspire secret list --format json ``` -`aspire certs` helps you clean stale developer certificates and trust the current certificate, while `aspire secret` gives AppHost user secrets their own dedicated CLI workflow for setting, reading, listing, locating, and deleting secret values. +`aspire certs` helps you clean stale developer certificates and trust the current certificate, while `aspire secret` gives apphost [user secrets](/fundamentals/external-parameters/#secret-values) their own dedicated CLI workflow for setting, reading, listing, locating, and deleting secret values. These are the same secret values that back [`AddParameter(..., secret: true)`](/fundamentals/external-parameters/) calls in the app model—`aspire secret set` writes to the user-secrets store so you no longer need have the .NET CLI installed to manage them via `dotnet user-secrets`. Two new operational commands round out the experience: @@ -257,18 +267,23 @@ aspire wait api --status healthy --timeout 120 aspire export --output .\artifacts\aspire-export.zip ``` -Use `aspire wait` to block automation until a resource becomes `healthy`, `up`, or `down`, and use `aspire export` to capture telemetry and resource data from a running AppHost into a zip file. You can also scope export to a single resource with `aspire export `. +Use `aspire wait` to block automation until a resource becomes `healthy`, `up`, or `down`, and use `aspire export` to capture telemetry and resource data from a running apphost into a zip file. You can also scope export to a single resource with `aspire export `. + + + For more details on parameters and secrets, see [External parameters](/fundamentals/external-parameters/). + Command reference: [`aspire secret`](/reference/cli/commands/aspire-secret/). + ### Agent integration (`aspire agent`) -The `aspire mcp` command has been renamed to `aspire agent` to better reflect its purpose of managing AI agent integrations. The new command structure includes: +The `aspire mcp` command has been renamed to `aspire agent` to better reflect its purpose of managing AI agent integrations. It's also been updated to add Aspire specific SKILL.md files into your repo. The new command structure includes: ```bash title="Aspire CLI — Agent integration" -# Start the MCP (Model Context Protocol) server -aspire agent mcp - -# Initialize agent environment configuration +# Initialize agent environment configuration including MCP and skills aspire agent init + +# Manually start the MCP (Model Context Protocol) server - only +aspire agent mcp ``` This enables AI agents to interact with your Aspire applications through a standardized protocol, opening up new possibilities for AI-assisted development workflows. @@ -285,7 +300,7 @@ To learn how to configure AI agents with Aspire, see [Use AI coding agents](/get The new `aspire docs` command brings the official [aspire.dev](https://aspire.dev) documentation directly into your terminal. Built on the same [MCP (Model Context Protocol) documentation tools](https://davidpine.dev/posts/aspire-docs-mcp-tools/) that power the Aspire agent integration, these commands let you browse, search, and read documentation without leaving your development workflow. :::note -These commands are intended for use by AI agents, it's not really expected that developers will use these directly. +These commands are intended for use by AI agents; although developers can use these directly, they aren't ergonomic for manual use and the website is still the best place to access documentation. ::: ```bash title="Aspire CLI — Browse and search documentation" @@ -319,6 +334,9 @@ The `aspire config` command has been enhanced with better organization: # List all configuration with organized sections and colors aspire config list +# List all available feature flags +aspire config list --all + # Get a specific setting aspire config get @@ -328,7 +346,7 @@ aspire config set Configuration is now clearly separated into local and global settings, with feature flags displayed in an organized manner. -Aspire now also prefers a single `aspire.config.json` file that combines AppHost location, language metadata, Aspire SDK version, channel selection, feature flags, launch profiles, and package pins: +Aspire now also prefers a single `aspire.config.json` file that combines apphost location, language metadata, Aspire SDK version, channel selection, feature flags, launch profiles, and package pins: ```json title="JSON — aspire.config.json" { @@ -351,7 +369,13 @@ Aspire now also prefers a single `aspire.config.json` file that combines AppHost } ``` -This unified format replaces the older split across `.aspire/settings.json` and `apphost.run.json` and makes TypeScript AppHosts much easier to move, inspect, and automate. +This unified format replaces the older split across `.aspire/settings.json` and `apphost.run.json` and makes TypeScript apphosts much easier to move, inspect, and automate. + +#### Auto migration from legacy configuration files + +If you have an existing project that uses `.aspire/settings.json` or `apphost.run.json`, the CLI handles migration automatically. The first time you run any `aspire` command (such as `aspire run`) against an existing project, the CLI merges your legacy `.aspire/settings.json` and `apphost.run.json` into a new `aspire.config.json` at the project root. Paths are automatically re-based—for example, an `appHostPath` that was relative to the `.aspire/` directory is adjusted to be relative to the project root. The legacy files are preserved during migration so you can continue using older CLI versions side by side if needed. + +Global settings (`globalsettings.json` in your user-level Aspire directory) are also copied to the new `aspire.config.json` format in the same location. No manual steps are required—just update the CLI and run your project as usual. Command reference: [`aspire config`](/reference/cli/commands/aspire-config/), @@ -360,15 +384,6 @@ This unified format replaces the older split across `.aspire/settings.json` and set`](/reference/cli/commands/aspire-config-set/). -### CLI telemetry - -Aspire CLI now includes optional telemetry to help improve the developer experience. Telemetry data is version-consistent with the dashboard, providing a unified approach to usage analytics. All telemetry follows standard privacy practices and can be controlled through configuration. - - - For more information, see [Microsoft-collected CLI - telemetry](/reference/cli/microsoft-collected-cli-telemetry/). - - ### CLI option standardization Several CLI options were standardized for consistency with common CLI conventions: @@ -381,75 +396,147 @@ Several CLI options were standardized for consistency with common CLI convention There are plenty of smaller but meaningful CLI improvements in 13.2: -- `aspire run` now supports `--no-build` for cases where you know the AppHost artifacts are already up to date. -- Human-readable status output is routed away from structured JSON output more consistently, making scripts and editors more reliable. +- `aspire run` now supports `--no-build` for cases where you know the apphost artifacts are already up to date. +- `--format json` always sends JSON output to stdout, while status messages are sent to stderr. This ensures human-readable output is kept separate from structured JSON output, allowing scripts and editors that consume JSON to receive well-formed content. - Tables, status indicators, help organization, logging, and error messages were refined across interactive and non-interactive scenarios. -- The unified self-extracting Aspire CLI bundle continues to improve Windows and multi-language experiences, especially when .NET isn't already installed globally. +- The unified self-extracting Aspire CLI bundle continues to improve multi-language experiences, especially when .NET isn't already installed globally. +- Status messages that start with an emoji are consistently aligned. This is harder than you might think! If you see messy CLI output, [please let us know](https://github.com/microsoft/aspire). + +## 🧩 VS Code extension + +The Aspire VS Code extension received its biggest update yet in 13.2, with over 20 PRs shipping new features that make VS Code a first-class Aspire development environment alongside Visual Studio. + +### Aspire Activity Bar panel + +A dedicated **Aspire panel** in the Activity Bar gives you a live tree view of running apphosts and their resources. The panel uses `aspire describe --follow` to stream real-time resource state updates for the workspace apphost — no polling, no latency. A workspace/global toggle lets you switch between viewing just the current workspace's apphost or all running apphosts on your machine. + +Resources in the tree show health-aware icons (green for healthy, red for errors, amber for degraded, spinner for starting), rich markdown tooltips with type, state, and clickable endpoint URLs, and right-click context menus for common operations like viewing logs, stopping, or restarting resources. + +### CodeLens and gutter decorations + +When an Aspire apphost is running, the extension now shows **inline CodeLens** above each resource definition in your C# or TypeScript apphost file: + +- Live resource state (Running, Starting, Stopped, Error) with health status +- Action buttons: Start, Stop, Restart, View Logs +- Custom resource commands from the runtime + +Colored **gutter decorations** appear alongside resource definitions — green for running, blue for starting, red for errors, gray for stopped — giving you an at-a-glance view of your entire app's health right in the editor. Both features are backed by language-aware parsers that understand `DistributedApplication.CreateBuilder` in C# and `createBuilder()` in TypeScript. + +### Getting Started walkthrough -## 🌐 Multi-language development +A new **Getting Started walkthrough** guides new users through installing the CLI, creating a project, running their app, exploring the dashboard, and next steps — all from within VS Code. The walkthrough includes clickable terminal links to install the Aspire CLI directly from the editor. -### TypeScript AppHost support +### Debugging improvements -Aspire 13.2 continues to expand multi-language capabilities with improved TypeScript support: +- **Azure Functions debugging** — Azure Functions projects referenced from an apphost can now be debugged directly. +- **TypeScript apphost debugging** — TS apphosts now participate in debugging more naturally, with better tool detection, build/launch coordination, and support for browser debugging scenarios. +- **`publish`, `deploy`, and `do` flows** can now be debugged directly from the extension. +- **Apphost exit messages** now appear in the debug console for easier troubleshooting. -- AspireList support for TypeScript code generation -- TypeScript AppHost testing infrastructure -- Multi-language AppHost refactoring for better extensibility +### `aspire.config.json` and MCP support + +The extension now reads `aspire.config.json` for apphost discovery instead of relying solely on `.csproj` file detection, making TypeScript apphosts work seamlessly. It can also **auto-register the Aspire MCP server** for AI agent workflows. The CLI is automatically detected at default install paths even when it's not on PATH. + +### Additional improvements + +- A new `enableAspireDashboardAutoLaunch` setting lets you disable automatic dashboard launch on run. +- File pickers replace raw string prompts in more places. +- Right-click context menus on resource endpoint URLs. +- Falls back to `code-insiders` when `code` is not found. - For more details, see [Multi-language - architecture](/architecture/multi-language-architecture/). + For more details, see [Use VS Code with Aspire](/get-started/aspire-vscode-extension/) and the [extension on the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-aspire). -### JavaScript and TypeScript AppHost debugging +## 🌐 TypeScript AppHost support (preview) -JavaScript and TypeScript AppHosts now participate in debugging more naturally through the CLI and VS Code extension, with better tool detection, better build and launch coordination, and better support for browser and JavaScript debugging scenarios. +One of the most anticipated features in Aspire 13.2 is support for writing your apphost in TypeScript. The TypeScript AppHost is currently in preview. -Project reference support and broader exported hosting APIs also make TypeScript AppHosts less special-cased than they were in 13.1. If you're building on TypeScript or JavaScript AppHosts, 13.2 is a meaningful step up in day-to-day usability. +### Writing an apphost in TypeScript -### Aspire panel and VS Code extension improvements +TypeScript apphosts use the same app model as C#—resources, references, integrations—expressed in idiomatic TypeScript via `createBuilder()`: -The VS Code extension picked up a substantial set of improvements in this release: +```typescript title="TypeScript — apphost.ts" +import { createBuilder } from './.modules/aspire.js'; -- A dedicated Aspire Activity Bar panel shows running AppHosts and resources in a tree view. -- A status bar item surfaces AppHost state directly in the editor. -- The extension uses a follow-style describe workflow to keep the workspace view current. -- Azure Functions debugging support was added. -- `publish`, `deploy`, and `do` flows can now be debugged directly from the extension. -- The extension can auto-register the Aspire MCP server. -- File pickers are used in more places instead of raw string prompts. -- A new `enableAspireDashboardAutoLaunch` setting lets you disable automatic dashboard launch. +const builder = await createBuilder(); -This all adds up to a much more polished Aspire experience in VS Code, especially for teams working on multi-language solutions or jumping frequently between the terminal, the dashboard, and the editor. +const cache = await builder.addRedis("cache"); +const api = await builder.addProject("api", "../api") + .withReference(cache) + .waitFor(cache); -### Template updates for modern frontend stacks +await builder.build().run(); +``` -The TypeScript and frontend templates were refreshed for 13.2 with updated dependencies, better starter defaults, and fixes for local development naming issues such as DNS-invalid host names generated with underscores. These changes are small individually, but together they make the starter templates feel much closer to modern production and devcontainer workflows. +Under the hood, this runs as a guest process alongside Aspire's .NET orchestration host, communicating via JSON-RPC over local transport. Your TypeScript defines the resource graph; the host handles orchestration, health checks, and the dashboard. ### Code generation -- Go, Java, and Rust code generation test projects added -- Common languages SDKs included for broader support +When you run `aspire add`, the CLI inspects the integration's .NET assembly and generates a TypeScript SDK into `.modules/`. Running `aspire restore` regenerates these SDKs—useful after upgrading or switching branches (this also runs automatically on `aspire run`). + +In 13.2, the code generator gained AspireList support for richer collection handling and now covers Go, Java, and Rust test targets alongside TypeScript. + +### Debugging, tooling, and templates + +TypeScript apphosts now have first-class support in the VS Code extension—CodeLens, gutter decorations, and debugging all work with `createBuilder()` calls. The `aspire.config.json` format means TypeScript apphosts are discovered automatically without needing a `.csproj`. Templates were also refreshed with updated dependencies and better starter defaults. + + + For more details, see [Multi-language + architecture](/architecture/multi-language-architecture/). + ## 📊 Dashboard improvements -### Enhanced data export +### Data export and import + +Aspire 13.2 adds comprehensive data export and import capabilities to the dashboard. You can bulk-manage telemetry through a centralized dialog, export individual resources and telemetry as JSON, and export environment variables as `.env` files. -The dashboard now provides comprehensive export capabilities: +#### Manage logs and telemetry dialog -- **Export All Button**: Quickly export all telemetry data with the new "Export selected" button in the Manage logs and telemetry dialog -- **JSON Export for Resources**: Export resource snapshots as JSON for debugging or automation using the action buttons for each resource -- **.env File Export**: Export environment variables directly to a `.env` file format from resource details -- **View JSON with Copy**: Download or copy JSON directly from the visualizer +The new **Manage logs and telemetry** dialog (accessible via **Settings → Manage**) is a one-stop shop for exporting, importing, and removing data from the dashboard. Select resources and telemetry types, then export, remove, or import as needed. + +Data is exported as JSON in a zip file. Share it with AI, teammates, or import it back into the dashboard later. + +Manage logs and telemetry dialog showing Export selected, Remove selected, and Import logs and telemetry buttons The dashboard can also import telemetry bundles captured with `aspire export`, making it easy to attach diagnostics to bug reports, preserve a point-in-time view of a session, or share a failing scenario with a teammate. -### Improved telemetry visualization +#### Export JSON for resources and telemetry + +Export data for specific resources and telemetry directly from the dashboard. Select **Export JSON** in context menus to get the data — copy it to your clipboard or download it to your machine. + +Export JSON button in the resource context menu + +Export JSON dialog with options to copy to clipboard or download + +#### Export environment variables as `.env` files + +Export a resource's environment variables directly to a `.env` file format from the resource details view. + +Export Env dialog showing environment variables exported in .env format + +#### Telemetry HTTP API + +The dashboard now exposes an HTTP API for querying telemetry data programmatically. These APIs power the `aspire agent mcp` and `aspire otel` Aspire CLI commands. + +The API is served under `/api/telemetry` and returns data in OTLP JSON format. Available endpoints: + +- `GET /api/telemetry/resources` — List resources that have telemetry data +- `GET /api/telemetry/spans` — Query spans with optional filters +- `GET /api/telemetry/logs` — Query logs with optional filters +- `GET /api/telemetry/traces` — List traces with optional filters +- `GET /api/telemetry/traces/{traceId}` — Get all spans for a specific trace + +The spans and logs endpoints also support real-time streaming via `?follow=true`, which returns NDJSON (newline-delimited JSON) as new telemetry arrives. Multiple resource names can be specified by repeating the `resource` query parameter (e.g. `?resource=api&resource=worker`). + +When running with an Aspire apphost, the telemetry API is enabled automatically. For standalone dashboard deployments, set the `DASHBOARD__API__ENABLED` environment variable to `true` and configure authentication with `DASHBOARD__API__AUTHMODE` (`ApiKey` or `Unsecured`) and `DASHBOARD__API__PRIMARYAPIKEY`. + +### Set parameters from the dashboard -- **Download JSON for Traces, Spans, and Logs**: Each telemetry view now includes options to export data -- **OTLP/JSON Support**: The dashboard now supports OTLP over JSON in addition to gRPC -- **Environment Variable Highlighting**: Environment variables are now highlighted for better visibility -- **Masked Query String Values**: Sensitive data in URLs is automatically masked for security +You can now set resource parameters directly in the dashboard. Click the key action on a parameter and enter a new value. To remember it next time, optionally save the value to your user secrets. + +Dashboard dialog for setting a parameter value with an option to save to user secrets ### GenAI visualizer improvements @@ -463,34 +550,26 @@ The GenAI visualizer keeps getting sharper. In 13.2 it handles more schema shape ### Resource graph improvements -The resource graph layout has been significantly improved with adaptive force-directed positioning, providing a clearer visualization of your application topology. - -### Persistent UI state +The resource graph layout has been significantly improved with adaptive force-directed positioning. Resources with many connections now have more space around them, making complex graphs feel less cluttered. -The dashboard now remembers: +**After:** -- Collapsed/expanded state of resources -- Filter preferences across sessions -- View options and settings +Resource graph after improvements, showing a cleaner layout with better spacing around highly-connected resources ### Dashboard UX refinements Additional dashboard refinements in 13.2: +- Persistent collapsed/expanded state of resources - A 12-hour or 24-hour time format setting. - Consistent resource colors across the dashboard and CLI. - Better JSON viewers for traces, spans, logs, and resources. - Improved handling for large gRPC payloads. - More stable graph layout and filtering behavior. +- Base path configuration for reverse proxy scenarios. +- Aggregate replica states—parent resources now show combined state from their replicas. - More polished dialogs, menus, copy flows, and resource details views. -### Security enhancements - -- Dashboard icon and token-based authentication in URLs -- Query string value masking to protect sensitive information -- Copy button visibility improvements even when values are hidden -- Toggle button for secret visibility in input dialogs - For more details, see [Explore the Aspire dashboard](/dashboard/explore/) and [Dashboard configuration](/dashboard/configuration/). @@ -502,6 +581,9 @@ Additional dashboard refinements in 13.2: Aspire 13.2 adds `WithMcpServer`, which lets you declare in the app model that a resource hosts a Model Context Protocol (MCP) server. Aspire tooling can then discover and proxy that endpoint directly. + + + ```csharp title="C# — AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -511,6 +593,23 @@ var api = builder.AddProject("api") builder.Build().Run(); ``` + + + +```typescript title="TypeScript — apphost.ts" +import { createBuilder } from './.modules/aspire.js'; + +const builder = await createBuilder(); + +const api = await builder.addProject("api", "../api", "https") + .withMcpServer({ path: "/mcp" }); + +await builder.build().run(); +``` + + + +