Skip to content
DocsTry Aspire
DocsTry

What's new in Aspire 13.5

Aspire 13.5 is here with focus on developer experience, polyglot feature parity, and runtime stability. This release brings interactive terminal sessions via WithTerminal(), IInteractionService available across all polyglot AppHosts (TypeScript, Python, Go, Java, and Rust), user-defined arguments in resource commands for interactive workflows, TypeScript AppHost startup optimizations and stability fixes, custom health checks for TypeScript AppHosts, container file copying in polyglot AppHosts, promoted IInteractionService to stable, a major Foundry integration update to use the CLI-based lifecycle, distributed trace improvements including timestamp filtering, dashboard telemetry enhancements, new VS Code extension commands including opening the Dashboard in a side panel, Bun debugging support, resource command visibility in the extension tree, Aspire CLI available via npm, and many more improvements and bug fixes across AppHost, CLI, Dashboard, and Extensions.

We’d love to hear what you think. Drop by Discord to chat with the team and the community, or file feedback and issues on GitHub.

This release introduces:

  • Interactive terminal sessions with WithTerminal() on AppHost resources enable live REPL and shell interaction through the Dashboard and CLI.
  • Polyglot IInteractionService parity brings prompts, message boxes, notifications, and dynamic inputs to TypeScript, Python, Go, Java, and Rust AppHosts alongside C#.
  • User-defined resource command arguments let Dashboard and CLI prompt for input before invoking commands like custom deploy or setup workflows.
  • TypeScript AppHost stability improvements fix deadlocks, optimize startup by racing connection attempts against process exit, and validate compilation before execution.
  • Custom health checks in TypeScript AppHosts enable resource-specific health monitoring in polyglot environments.
  • Container file copying in TypeScript AppHosts brings parity with C# for copying host files into containers with ownership and permission controls.
  • IInteractionService promoted to stable removes the ASPIREINTERACTION001 diagnostic requirement from production code.
  • CLI available via npm (@microsoft/aspire-cli) provides an alternative installation path alongside the default distribution.
  • Embedded Aspire skills bundle fallback ensures the CLI can bootstrap even when GitHub release asset acquisition is unavailable.
  • Faster TypeScript AppHost startup skips fixed delays and races the connection retry loop, reducing time-to-ready.
  • Friendly error messages for health check failures replace raw exception stacks with actionable diagnostics in the Dashboard.
  • Distributed trace timestamp filtering enables precise telemetry searches by date and time.
  • VS Code Dashboard in side panel lets you monitor your app without leaving VS Code.
  • Bun debugging support in VS Code extension via WebKit Inspector Protocol.
  • Resource commands in VS Code tree view display all available actions (Start, Stop, custom commands) under each resource.
  • Improved parameter display in VS Code shows secret masks, missing value warnings, and consistent formatting across panels.
  • VS Code extension renamed to “Aspire” and rebranded for clarity on the Marketplace.
  • AppHost discovery efficiency in VS Code respects exclusion settings and debounces file changes to reduce background scanning.
  • Foundry Local integration CLI update now uses the foundry CLI for lifecycle management, requiring foundry 1.1.0+.
  • Proxyless endpoint port allocation assigns dynamic public host ports before resources are created, so endpoint property references resolve consistently.
  • …and much more.

For general purpose upgrade guidance, see Upgrade Aspire.

The easiest way to upgrade to Aspire 13.5 is using the aspire update command:

  1. Update the Aspire CLI itself:

    Aspire CLI — Update the CLI
    aspire update --self
  2. Update your projects (run from the root of your repository):

    Aspire CLI — Update all Aspire packages
    aspire update

Or install the CLI from scratch:

Aspire CLI — Install Aspire CLI
curl -sSL https://aspire.dev/install.sh | bash

For more details on installing the Aspire CLI, see Install the CLI.

🖥️ Interactive terminal sessions with WithTerminal()

Section titled “🖥️ Interactive terminal sessions with WithTerminal()”

AppHost authors can now call WithTerminal() on a resource to enable interactive terminal sessions. The Dashboard and CLI can attach to and detach from the session at will, enabling live use of REPLs, shells, and other terminal programs running as Aspire resources. This is particularly powerful for resource orchestration workflows where you need to interact with services in real-time.

🌐 IInteractionService available across polyglot AppHosts

Section titled “🌐 IInteractionService available across polyglot AppHosts”

IInteractionService and all related interaction types (prompts, message boxes, notifications, dynamic inputs) are now available in polyglot AppHosts written in TypeScript, Python, Go, Java, and Rust—providing feature parity with C# AppHosts. This enables rich user interaction patterns across all supported languages.

For TypeScript examples, see IInteractionService.

🆙 IInteractionService promoted to stable

Section titled “🆙 IInteractionService promoted to stable”

The IInteractionService API is no longer marked experimental. The ASPIREINTERACTION001 diagnostic has been removed, so you can use interaction features without compiler suppressions in production code.

⚙️ Resource commands with user-defined arguments

Section titled “⚙️ Resource commands with user-defined arguments”

HTTP resource commands now support named arguments, allowing the Dashboard and CLI to prompt for user input before invoking them. TypeScript AppHosts achieve full parity through Aspire Type System (ATS) exports. This enables interactive workflows such as custom deployment or setup procedures.

💚 Custom health checks for TypeScript AppHosts

Section titled “💚 Custom health checks for TypeScript AppHosts”

TypeScript AppHosts can now register custom health check callbacks using builder.addHealthCheck() and attach them to resources. Project resources also gain withEndpointsInEnvironment() to control which endpoints are injected into environment variables.

🐳 TypeScript AppHosts support container file copying

Section titled “🐳 TypeScript AppHosts support container file copying”

TypeScript AppHosts can now export withContainerFiles to copy host files into container resources, with full support for owner, group, and umask options—achieving parity with C# AppHosts.

TypeScript AppHost startup no longer waits a fixed delay before the CLI attempts to connect. The CLI now races the RPC connection retry loop against process exit, reducing the time from aspire run to an active AppHost.

  • Fixed a deadlock in TypeScript AppHosts where async callbacks stored in IOptions.Configure were invoked during BeforeStartEvent.
  • Fixed a startup reliability issue with WithBrowserLogs() where tracked browser sessions could fail even when the browser eventually became responsive. The CDP startup command timeout has been increased.
  • Fixed failures when proxyless container endpoint references were accessed before container creation.
  • Fixed aspire run failing for polyglot AppHosts using *.dev.localhost resource service URLs.

The Aspire CLI is now available as an npm package (@microsoft/aspire-cli), providing an alternative installation method alongside the standard distribution. The update command and update notifier now detect and handle npm-installed versions.

  • OS information in aspire doctor: The aspire doctor command now reports operating system details in its Environment section. Human-readable output shows the OS type and version; on Linux it includes distro details from /etc/os-release. JSON output adds a structured operating-system check with osType, displayName, version, and description metadata fields for tooling.
  • Embedded Aspire skills bundle fallback: When GitHub release asset acquisition is unavailable, the CLI uses the embedded bundle and shows a non-fatal warning instead of failing the entire command.
  • Faster stale backchannel socket cleanup: Stale AppHost backchannel socket files no longer block CLI commands like aspire add. The CLI automatically prunes orphaned sockets before probing.
  • Better TypeScript AppHost error messages: When AppHost code generation fails due to version mismatches, the CLI provides enriched diagnostic output to help identify the cause.
  • Improved aspire agent init output: The command now collects updated skill/location pairs and prints one compact summary instead of repeating success for every skill.
  • Improved aspire ls discovery: Fixed multiple bugs in the settings discovery pipeline including settings.json compatibility and aspire.config.json handling.
  • TypeScript AppHosts honor —no-build: TypeScript AppHosts now correctly skip the TypeScript compilation check when the —no-build flag is passed.
  • CLI shutdown responsiveness: Multiple improvements to Ctrl+C/SIGTERM handling, including faster signal responsiveness during AppHost startup.
  • Timestamp filter for telemetry: Filter logs and traces by timestamp using a dedicated search qualifier in the Dashboard filter dialog.
  • Numeric equality operators: The telemetry filter dialog now includes == and != operators for exact numeric value matching.
  • Rich text visualizer improvements: The TextVisualizerDialog now disables markdown formatting for JSON and XML content.
  • Dashboard startup log formatting: Improved output with indented URLs, separated container access warnings, and restored legacy login URL for dotnet watch integration.
  • Friendly health check error messages: Health check failures now display concise, actionable messages instead of raw exception stacks.
  • Fixed telemetry streaming with resource filters: Streams now wait for resources to appear before returning empty results.
  • Fixed duplicate replica display names: Dashboard now uses the last 8 characters of the service.instance.id GUID to prevent collisions.
  • Open Aspire Dashboard in side panel: A new command lets you open the Dashboard in a side-by-side panel instead of an external browser.
  • Bun debugging support: VS Code extension now supports debugging Bun applications via the WebKit Inspector Protocol.
  • Resource commands in tree view: Resource commands (Start, Stop, custom commands) are displayed as child items under each resource.
  • VS Code extension telemetry: The extension now collects activation, debug session, and dashboard interaction signals for product improvement.
  • Support launchUrl in launchSettings.json: The extension respects the launchUrl property as the serverReadyAction URI format.
  • Show discovered AppHosts in Aspire pane: Idle AppHosts discovered via aspire ls now display in the VS Code Aspire pane with context menu actions.
  • Security hardening: Terminal commands now use structured shell arguments to prevent command injection via malicious paths or resource names.
  • Parameter display improvements: Consistent display across panels with secret masks, missing value warnings, and 80-character truncation for non-secrets.
  • VS Code extension branding: Rebranded to “Aspire” with an updated icon and display name.
  • AppHost discovery efficiency: Respects workspace exclusion settings, debounces file changes, and avoids overlapping discovery runs.
  • Foundry Local CLI update: The Foundry Local integration now uses the installed foundry CLI for lifecycle management instead of internal SDK APIs, requiring foundry CLI 1.1.0+.
  • DevTunnel region configuration: Added a Region property to DevTunnelOptions for specifying the tunnel creation region.
  • Blazor gateway Docker Compose support: Added Docker Compose publish support for Blazor gateway resources.
  • Redis TLS deadlock fix: Fixed a deadlock during Redis container startup when TLS was enabled with persistent lifetime.

The following breaking changes are included in Aspire 13.5:

  1. ServiceProvider renamed to Services: The ServiceProvider property on context types is now obsolete and replaced with Services. The old property still works but generates a compiler warning. Update your code to use the new property name.

  2. PublishAsConnectionString marked obsolete: The PublishAsConnectionString extension methods are now obsolete. Callers should switch to AddConnectionString in publish-mode app model code.

  3. aspire ps —resources flag removed: The --resources and --include-hidden flags have been removed from aspire ps, which now focuses on AppHost-level summaries. Use aspire describe for detailed resource data.

  4. GitHub Models integration deprecated: The GitHub Models service is no longer available to new customers, so the Aspire.Hosting.GitHub.Models integration is sunset as of Aspire 13.5. All public APIs are marked [Obsolete], and the package no longer appears in aspire add output. One final obsolete release will ship on NuGet, and the package will be removed entirely in a future version. Migrate to the Azure AI Foundry integration instead. See microsoft/aspire#18402 for details.

  5. Proxyless endpoint port allocation timing changed: Proxyless endpoints without an explicit public port now receive one during service preparation, before workload resources are created. Executable proxyless endpoints that previously failed without a public port, and container proxyless endpoints that expected the public port to be assigned later during container startup, should expect Aspire to assign the port earlier. The default allocation range is 10000-32767 and can be overridden with ASPIRE_PROXYLESS_ENDPOINT_PORT_RANGE=start-end. Persistent resources reuse allocated ports from user secrets when available.

  6. Go polyglot SDK: single optional options DTO is now passed directly: When a C# exported API has exactly one optional parameter that is a DTO named options (with no coexisting cancellation token or callback), the Go polyglot code generator now passes the DTO type directly as a variadic parameter instead of wrapping it in a generated method-options struct. Go AppHosts that used the wrapper-struct form must update their call sites after regenerating the SDK.

No Aspire 13.5 known issues are documented yet. If you discover an issue, please report it on GitHub.