Skip to content

[release/13.4] Freeze Aspire.TypeSystem AssemblyVersion at 13.4.5.0 to fix cross-ALC codegen binding#18160

Merged
davidfowl merged 1 commit into
release/13.4from
sebastienros/typesystem-alc-pinning-regression
Jun 17, 2026
Merged

[release/13.4] Freeze Aspire.TypeSystem AssemblyVersion at 13.4.5.0 to fix cross-ALC codegen binding#18160
davidfowl merged 1 commit into
release/13.4from
sebastienros/typesystem-alc-pinning-regression

Conversation

@sebastienros

@sebastienros sebastienros commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Problem

Polyglot AppHost code generation (TypeScript/Python/Java/Go/Rust) silently fails with No code generator found for language: <lang> when the installed Aspire CLI and the AppHost's configured SDK skew in version (e.g. an older CLI running a newer SDK, or a current CLI running an older stable SDK).

Root cause

The CLI's bundled apphost server (Aspire.Hosting.RemoteHost, shipped as the single-file aspire-managed executable) loads Aspire.TypeSystem into its default AssemblyLoadContext and IntegrationLoadContext deliberately force-shares it from there, so the cross-ALC contracts (ICodeGenerator, ILanguageSupport, AtsContext) keep a single type identity across the ALC boundary.

The SDK-side codegen assemblies (Aspire.Hosting.CodeGeneration.*) are strong-named (StrongNameKeyId=Open) and carry a strong-named reference to Aspire.TypeSystem. The CLR satisfies a strong-named reference only when the loaded copy's AssemblyVersion is >= the requested version. Because AssemblyVersion floated with the build (MAJOR.MINOR.PATCH), the bundled copy and the codegen reference diverged whenever the CLI and SDK were built at different times → the bind failed → Assembly.GetTypes() threw ReflectionTypeLoadException → every generator was silently dropped (#18110, #17910).

This affects all polyglot languages and the ATS capability-scan path, not just TypeScript. The Aspire.TypeSystem source surface itself is unchanged between release/13.4 and main — it is purely the strong-name version bump that breaks the bind.

Fix

Freeze the strong-name AssemblyVersion of Aspire.TypeSystem at the fixed constant 13.4.4.0, decoupled from the build:

  • 13.4.4.0 is the version of the 13.4.4 servicing release that introduces the freeze, and is >= 13.4.3.0 (the latest shipped stable), so a current CLI binds against any already-shipped stable app's codegen reference — the common, must-work backward-compat direction.
  • Merged forward to main so every later stable and servicing release (13.4.4, 13.5, ...) bundles the same value; post-freeze CLI/SDK pairs then match exactly and no skew matters. On release/13.4 the product version is already 13.4.4, so this is a no-op for that build and only constrains future minors.
  • Only AssemblyVersion is frozen; FileVersion, InformationalVersion, and the NuGet package version stay build-derived, so diagnostics keep real build identities. Aspire.TypeSystem is consumed only via ProjectReference (no PackageReference consumers), so the frozen assembly version is not a package contract anyone binds to by exact version, and CP0003 package-baseline validation still passes (13.4.4.0 >= baseline).

Residual cases (routed to diagnostics, not silent)

Two narrow skews can't be fixed by any freeze value and are surfaced as an actionable "run aspire update" message by the #18125 diagnostics:

  1. An already-shipped old CLI (real, lower bundled version) running post-freeze codegen that references 13.4.4.0.
  2. A pre-freeze 13.5.0 preview app whose codegen still references a real 13.5.0.0 (> 13.4.4.0); preview-channel skew is outside the supported stable matrix and is superseded by post-freeze builds.

Back-compat guard

Because binding now succeeds on version alone, that safety only holds if the shared contract stays strictly additive. AtsSharedContractSurfaceTests snapshots the shared-contract surface (embedded baseline) and fails on any removal/signature change, forcing a deliberate decision: additive (no bump) vs breaking (bump AssemblyVersion).

Validation

  • Aspire.Hosting.RemoteHost.Tests: 451/451 passed on the release/13.4 base (includes the new contract-surface guard).
  • dotnet pack src/Aspire.TypeSystem: succeeds with no CP0003 override.
  • Faithful strong-named A/B bind repro confirms BEFORE → ReflectionTypeLoadException (generators dropped), AFTER → generator discovered.

Targets release/13.4 for the 13.4.4 servicing release. Relates to #18110, #17910; complementary to the #18125 diagnostics.

Copilot AI review requested due to automatic review settings June 12, 2026 15:27
@github-actions

github-actions Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 18160

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 18160"

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes a critical issue where polyglot (TypeScript/Python/Java/Go/Rust) AppHost code generation silently fails when the installed Aspire CLI is older than the AppHost's configured SDK within the same major version (e.g., 13.4.3 CLI + 13.5.0 SDK). The root cause was that the strong-named AssemblyVersion floated with MAJOR.MINOR.PATCH, preventing the older bundled Aspire.TypeSystem from satisfying newer codegen assemblies' strong-named references.

Changes:

  • Pins Aspire.TypeSystem's AssemblyVersion to $(MajorVersion).0.0.0 so that any CLI/SDK combination within the same major binds successfully, while preserving real build identities in FileVersion and InformationalVersion.
  • Adds explanatory comments in IntegrationLoadContext and AssemblyLoader documenting why the version pin makes the shared-assembly short-circuit and mismatch check safe.
  • Introduces AtsSharedContractSurfaceTests with an embedded baseline snapshot to guard against future breaking changes to the public surface that could reintroduce the binding failure.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.

Show a summary per file
File Description
src/Aspire.TypeSystem/Aspire.TypeSystem.csproj Core fix: pins AssemblyVersion to MAJOR.0.0.0 with thorough rationale comment
src/Aspire.Hosting.RemoteHost/IntegrationLoadContext.cs Documents why the SharedAssemblyName short-circuit is safe under the pinned version
src/Aspire.Hosting.RemoteHost/AssemblyLoader.cs Restructures WarnIfSharedAssemblyMismatch docs to explain post-pin semantics (cross-major only warning, same-version/differing-MVID is benign)
tests/Aspire.Hosting.RemoteHost.Tests/AtsSharedContractSurfaceTests.cs New back-compat guard test comparing assembly public surface against embedded baseline
tests/Aspire.Hosting.RemoteHost.Tests/Aspire.Hosting.RemoteHost.Tests.csproj Adds embedded resource and Aspire.TypeSystem project reference for the new test
tests/Aspire.Hosting.RemoteHost.Tests/Snapshots/AtsSharedContractSurface.txt Frozen public API surface baseline for Aspire.TypeSystem

@sebastienros sebastienros marked this pull request as draft June 12, 2026 15:33
Copilot AI review requested due to automatic review settings June 12, 2026 15:54
@sebastienros sebastienros changed the title Pin Aspire.TypeSystem AssemblyVersion to stabilize cross-ALC contract binding Freeze Aspire.TypeSystem AssemblyVersion to stabilize cross-ALC contract binding Jun 12, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Comment thread src/Aspire.Hosting.RemoteHost/AssemblyLoader.cs Outdated
Copilot AI review requested due to automatic review settings June 12, 2026 16:15

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Comment thread src/Aspire.Hosting.RemoteHost/AssemblyLoader.cs Outdated
Copilot AI review requested due to automatic review settings June 12, 2026 16:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated no new comments.

Copilot AI review requested due to automatic review settings June 12, 2026 17:04

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated 1 comment.

Comment thread tests/Aspire.Hosting.RemoteHost.Tests/AtsSharedContractSurfaceTests.cs Outdated
Copilot AI review requested due to automatic review settings June 12, 2026 17:24
@sebastienros

sebastienros commented Jun 12, 2026

Copy link
Copy Markdown
Contributor Author

PR Testing Report

PR Information

Artifact Version Verification

  • Expected Commit (PR head): 37ba357
  • Installed CLI version: 13.4.4-pr.18160.g37ba3575
  • Status: ✅ Verified (short SHA g37ba3575 matches PR head)

Changes Analyzed

Files Changed

  • src/Aspire.TypeSystem/Aspire.TypeSystem.csproj — froze <AssemblyVersion>13.4.4.0</AssemblyVersion> (the only production change). No DisablePackageBaselineValidation13.4.4.0 >= 13.4.0 baseline, so CP0003 passes naturally.
  • src/Aspire.Hosting.RemoteHost/IntegrationLoadContext.cs — comment-only (brief pointer to the csproj rationale on the shared-from-bundle short-circuit).
  • src/Aspire.Hosting.RemoteHost/AssemblyLoader.cs — comment-only (WarnIfSharedAssemblyMismatch; warns only when bundled < probed).
  • tests/Aspire.Hosting.RemoteHost.Tests/SharedContractSurface.cs / SharedContractSurfaceTests.cs / AtsSharedContractSurfaceTests.cs / Snapshots/AtsSharedContractSurface.txt — contract-freeze guard. The guard now also renders declared interfaces + base type + static modifiers so an : ICodeGenerator removal or an instance→static flip also trips it.

Change Categories

  • CLI changes detected (no behavioral CLI code; only ATS assembly-version metadata + RemoteHost comments)
  • Hosting changes (Aspire.TypeSystem build metadata; RemoteHost comment-only)
  • Dashboard changes
  • CI infrastructure changes
  • VS Code extension changes
  • Test changes (contract-freeze guard)

Frozen-version proof (the heart of the fix)

Extracted from the dogfood hive (Aspire.TypeSystem.13.4.4-pr.18160.g37ba3575.nupkg and Aspire.Hosting.CodeGeneration.TypeScript.*.nupkg) and read via AssemblyName / PEReader metadata:

Aspire.TypeSystem.dll AssemblyVersion = 13.4.4.0
CodeGeneration.TypeScript references Aspire.TypeSystem, Version=13.4.4.0

The package version still floats (13.4.4-pr.18160.g37ba3575); only the AssemblyVersion is frozen at 13.4.4.0. Because 13.4.4.0 >= 13.4.3.0 (latest shipped stable), a CLI bundling this ATS satisfies the strong-named reference carried by codegen assemblies from current and older stable SDKs — which is the bind that the regression broke.

Test Scenarios Executed

Scenario 1: Install + version match

Objective: Install the PR CLI and confirm it reports the PR head commit.
Coverage Type: Happy path
Status: ✅ Passed

Steps:

  1. get-aspire-cli-pr.sh 18160 --install-path <tmp> --skip-path --skip-extension
  2. <cli> --version

Evidence: version 13.4.4-pr.18160.g37ba3575; both built-nugets and cli-native-archives-osx-arm64 artifacts downloaded.


Scenario 2: TypeScript AppHost codegen (regression check)

Objective: Verify TypeScript polyglot code generation works (the exact path that failed in the regression).
Coverage Type: Happy path (regression guard)
Status: ✅ Passed

Steps:

  1. <cli> init --language typescript --non-interactive (fresh temp dir; npm deps installed by init).
  2. <cli> add Aspire.Hosting.Redis --non-interactiveAspire.Hosting.Redis::13.4.4-pr.18160.g37ba3575 added.
  3. Removed .aspire/modules, then <cli> restore --apphost <tmp>/apphost.mts --non-interactive.

Evidence (ts-restore.log):

  • ✅ SDK code restored successfully for apphost.mts. (exit 0)
  • Generated .aspire/modules/: aspire.mts (2.6 MB), base.mts, transport.mts, .codegen-hash
  • Generated aspire.mts contains the Redis surface (1366 addRedis/RedisResource references).
  • No No code generator found for language: TypeScript; no ReflectionTypeLoadException / FileLoadException.

Scenario 3: Python AppHost codegen (regression check)

Objective: Verify a second polyglot language (Python) codegen path works.
Coverage Type: Happy path (regression guard)
Status: ✅ Passed

Steps:

  1. Staged tests/PolyglotAppHosts/Aspire.Hosting.Redis/Python into <tmp>/py with an aspire.config.json (language: python, experimentalPolyglot:python feature, SDK 13.4.4-pr.18160.g37ba3575) and a NuGet.config pointing at the PR hive. (aspire init exposes only csharp/typescript; Python polyglot is experimental and config-driven.)
  2. <cli> restore --apphost <tmp>/py/apphost.py --non-interactive.

Evidence (py-restore.log):

  • ✅ SDK code restored successfully for apphost.py. (exit 0)
  • Generated .aspire/modules/: aspire_app.py (530 KB), pyproject.toml, .codegen-hash
  • Generated aspire_app.py contains the Redis surface (43 add_redis/redis references).
  • No No code generator found; no loader/bind exception. (An unrelated pylock.apphost.toml not-found notice is the Python dep-lock step, not codegen — codegen reported success after it.)

Scenario 4: Package build (CP0003) ships without any override

Objective: Confirm the 13.4.4.0 freeze does not trip package baseline validation.
Coverage Type: Boundary / build validation
Status: ✅ Passed

Key delta vs the earlier 1.0.0.0 sentinel: the old value was < 13.4.0 baseline and required DisablePackageBaselineValidation=true. With 13.4.4.0 >= 13.4.0, CP0003 passes naturally and the override has been removed.

Evidence (CI run 27453745514, head 37ba3575):

  • Tests / Build packages / Build packages → conclusion success (no DisablePackageBaselineValidation).
  • Package version still floats (pr.18160.g37ba3575); only AssemblyVersion is frozen.

CI corroboration: all five polyglot languages green on head 37ba3575 (run 27453745514)

Beyond the two local runs above, the full polyglot codegen matrix is green on the PR head:

  • Polyglot SDK Validation: TypeScript (Node 24.x), Python, Java, Go, Rust → all success
  • Hosting.CodeGeneration.{TypeScript, Python, Go, Java, Rust} (ubuntu + windows) → all success
  • Cli.EndToEnd-TypeScriptCodegenValidationTests + Cli.EndToEnd-JavaCodegenValidationTestssuccess

This confirms the fix holds across every codegen language that references Aspire.TypeSystem, not just the two exercised locally.

Scope note: what these scenarios do and do NOT cover

A dogfood install is a single matched CLI/SDK version, so it cannot reproduce the genuine old-CLI + newer-SDK strong-name skew that is the regression. Scenarios 2–3 are a happy-path regression check: they prove the 13.4.4.0 AssemblyVersion freeze does not break ATS loading / cross-ALC type identity when versions match (a wrong freeze value would break codegen even in the matched case), and the frozen-version proof above shows the codegen assemblies now carry a 13.4.4.0 reference that an equal-or-older-stable bundled copy satisfies. The actual skew bind (BEFORE = ReflectionTypeLoadException → 0 generators; AFTER = generator discovered) was proven earlier with real strong-named binaries in the A/B repro matrix, and is locked in by the AtsSharedContractSurface contract-freeze guard.

Complementarity with #18125

The two PRs fully complement each other:

Summary

Scenario Status Notes
1. Install + version match ✅ Passed 13.4.4-pr.18160.g37ba3575 matches head
2. TypeScript codegen ✅ Passed aspire.mts 2.6 MB, 1366 Redis refs, no cryptic error
3. Python codegen ✅ Passed aspire_app.py 530 KB, 43 Redis refs, no cryptic error
4. Package build (CP0003) ✅ Passed No DisablePackageBaselineValidation needed (13.4.4.0 >= 13.4.0)
CI polyglot matrix (TS/Py/Java/Go/Rust) ✅ Passed run 27453745514, all codegen suites green

Overall Result

✅ PR VERIFIED

Notes

  • Frozen AssemblyVersion = 13.4.4.0 is a no-op on release/13.4 (product is already 13.4.4) and only constrains 13.5+; merged forward to main it keeps every future stable/servicing bundle on the sentinel.
  • Skew (old/pre-freeze CLI + newer SDK) is intentionally not dogfood-reproducible; that path relies on the prior binary A/B repro + the contract-freeze guard + Surface actionable diagnostic when TypeScript codegen generator is dropped by load failure #18125 diagnostics.
  • PR is a draft — this is test-and-report only; no approve/merge performed.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 31 out of 31 changed files in this pull request and generated no new comments.

Comment thread src/Aspire.TypeSystem/Aspire.TypeSystem.csproj Outdated
Comment thread src/Aspire.TypeSystem/Aspire.TypeSystem.csproj Outdated
@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

Copilot AI review requested due to automatic review settings June 13, 2026 01:40
@sebastienros sebastienros force-pushed the sebastienros/typesystem-alc-pinning-regression branch from a68ad08 to 39c789d Compare June 13, 2026 01:40
@sebastienros sebastienros changed the base branch from main to release/13.4 June 13, 2026 01:40
@sebastienros sebastienros changed the title Freeze Aspire.TypeSystem AssemblyVersion to stabilize cross-ALC contract binding Freeze Aspire.TypeSystem AssemblyVersion at 13.4.4.0 to fix cross-ALC codegen binding Jun 13, 2026
This was referenced Jun 22, 2026
rombolshak pushed a commit to rombolshak/ahlcg that referenced this pull request Jun 23, 2026
Updated [Aspire.Hosting.JavaScript](https://github.com/microsoft/aspire)
from 13.2.2 to 13.4.6.

<details>
<summary>Release notes</summary>

_Sourced from [Aspire.Hosting.JavaScript's
releases](https://github.com/microsoft/aspire/releases)._

## 13.4.6

## What's New in Aspire 13.4.6

Patch release for Aspire 13.4 fixing polyglot AppHost code generation
binding when CLI and SDK versions diverge, resource service port
collision in `--isolated` mode, and a MongoDB.Driver dependency update.

### 🐛 Fixes

- 🔗 **Polyglot AppHost code generation silently failed when CLI and SDK
versions diverged** — `Aspire.TypeSystem` used a floating strong-name
`AssemblyVersion` that changed with every build. When the installed
Aspire CLI was built at a different version than the AppHost's SDK, the
CLR couldn't satisfy the strong-name bind and every code generator
(TypeScript, Python, Java, Go, Rust) was silently dropped, surfacing as
`No code generator found for language: <lang>`. The `AssemblyVersion` is
now frozen at a stable constant so any compatible CLI/SDK pair on 13.4
binds successfully. Relates to #​18110 and #​17910.
([#​18160](https://github.com/microsoft/aspire/pull/18160),
`@​sebastienros`)

- 🔌 **Multiple AppHosts started with `--isolated` collided on the
resource service port** — Both instances tried to bind to the same fixed
port from `ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL`, causing an "address
already in use" error on the second instance. `DashboardServiceHost` now
binds to port 0 on loopback when `RandomizePorts` is true (set by
`--isolated`), letting the OS assign a unique port per instance.
([#​18341](https://github.com/microsoft/aspire/pull/18341), `@​JamesNK`)

- 🍃 **MongoDB.Driver updated to 3.9.0** — Removes a wrongly pinned
`SharpCompress` transitive dependency and uses the corrected `Snappier`
transitive. Fixes #​17981.
([#​18279](https://github.com/microsoft/aspire/pull/18279),
`@​Falco20019`)

### 🏷️ Housekeeping

- 🚀 Bumped branding to 13.4.6
([#​18343](https://github.com/microsoft/aspire/pull/18343))

---

_Full Changelog:
[v13.4.5...v13.4.6](https://github.com/microsoft/aspire/compare/v13.4.5...v13.4.6)_

_Full commit:
[87fe259e4fc244c599019a7b1304c85a1488f248](https://github.com/microsoft/aspire/commit/87fe259e4fc244c599019a7b1304c85a1488f248)_

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27855270514) ·
131 AIC · ⌖ 13.5 AIC · ⊞ 37.4K

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.60, model:
claude-sonnet-4.6, id: 27855270514, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27855270514 -->

## 13.4.5

## What's New in Aspire 13.4.5

Patch release for Aspire 13.4 clearing a transitive MessagePack security
advisory, tightening CLI validation for Playwright configuration, and
adding coding-agent detection to CLI telemetry.

### 🐛 Fixes

- 🛡️ **Bumped StreamJsonRpc to 2.25.29 to clear the MessagePack
GHSA-hv8m-jj95-wg3x (CVE-2026-48109) NU1903 advisory** — The transitive
MessagePack 2.5.192 dependency pulled in via StreamJsonRpc 2.22.23 fell
within the advisory's vulnerable LZ4 decompression range. Aspire does
not use `MessagePackFormatter` or LZ4 — all StreamJsonRpc calls use
`SystemTextJsonFormatter` over local Unix sockets — so the vulnerability
was not reachable in practice. The bump clears the NU1903 warning for
consumers of the `Aspire.Hosting` package.
([#​18204](https://github.com/microsoft/aspire/pull/18204),
`@​mitchdenny`)
- 🎭 **`playwrightCliVersion` values that are not valid SemVer 2.0 now
fail fast with a clear diagnostic** — Previously an invalid override
(range expression, dist-tag like `latest`, or a `v`-prefixed string)
would surface as a generic npm resolution failure. The value is now
validated with strict SemVer parsing at startup; an error naming the
configuration key and the offending value is emitted immediately.
([#​18205](https://github.com/microsoft/aspire/pull/18205),
`@​mitchdenny`)
- 🤖 **CLI telemetry now detects and reports the calling coding agent** —
When the Aspire CLI is invoked from inside a known coding agent
environment (GitHub Copilot CLI, VS Code Copilot agent, etc.) the agent
name is included in the main CLI telemetry event. GitHub Copilot CLI is
specifically identified as `copilot-cli`.
([#​18240](https://github.com/microsoft/aspire/pull/18240),
`@​damianedwards`)

### 🏷️ Housekeeping

- 📄 Refreshed the `@​microsoft/aspire-cli` npm package README to be
TypeScript-only — updated examples to the current `ts-starter` template
(`apphost.mts` / `aspire.mjs`), added a backing-services snippet showing
`aspire add` for PostgreSQL and Redis, and documented `aspire dashboard
run` as a standalone dashboard option.
([#​18221](https://github.com/microsoft/aspire/pull/18221), `@​adamint`)

---

_Full Changelog:
[v13.4.4...v13.4.5](https://github.com/microsoft/aspire/compare/v13.4.4...v13.4.5)_

_Full commit:
[73114e86c64aeb9f3f3c7da8e37df1ae4281b27e](https://github.com/microsoft/aspire/commit/73114e86c64aeb9f3f3c7da8e37df1ae4281b27e)_

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27667814104/agentic_workflow)
· ● 4.4M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 27667814104, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27667814104 -->

## 13.4.4

## What's New in Aspire 13.4.4

Patch release for Aspire 13.4 with improved DCP connection reliability
during request execution and consistent `ExcludeFromMcp()` filtering
across all CLI MCP tools.

### 🐛 Fixes

* 🔌 **DCP requests could fail permanently when the connection dropped
mid-request** — If the underlying DCP channel closed while a request was
in flight, the error was surfaced directly instead of being retried.
Reconnection is now attempted as part of the DCP request retry path so
transient disconnections recover automatically without surfacing errors.
([#​18096](https://github.com/microsoft/aspire/pull/18096),
`@​karolz-ms`)
* 🔍 **Resources marked with `ExcludeFromMcp()` were not consistently
filtered from CLI MCP tools** — Resources with the
`resource.excludeFromMcp` property were not excluded uniformly from all
CLI MCP tool results. `list_resources`, `list_console_logs`,
`execute_resource_command`, `list_structured_logs`, `list_traces`, and
`list_trace_structured_logs` all now honor the exclusion, preventing
excluded resources and their telemetry from appearing in agent context.
([#​18150](https://github.com/microsoft/aspire/pull/18150), `@​JamesNK`)

### 🏷️ Housekeeping

* 📦 Improved npm CLI package metadata and hardened npm publish
validation in the release pipeline.
([#​18093](https://github.com/microsoft/aspire/pull/18093),
`@​adamratzman`)

* * *

_Full Changelog:
[v13.4.3...v13.4.4](https://github.com/microsoft/aspire/compare/v13.4.3...v13.4.4)_

_Full commit:
[ccc566c5ab3285c9beb8f38ede34734bb477c029](https://github.com/microsoft/aspire/commit/ccc566c5ab3285c9beb8f38ede34734bb477c029)_


## 13.4.3

## What's New in Aspire 13.4.3

Patch release for Aspire 13.4 with a fix for persistent container
endpoint allocation regressions introduced in 13.4.

### 🐛 Fixes

- 🔌 **Persistent container endpoints had incorrect default behavior** —
Persistent containers were defaulting to proxyless endpoint behavior
instead of the proxied behavior used by normal containers. This caused
integrations that depend on endpoint allocation before resource startup
(such as the KeyVault emulator) to fail. Persistent containers now
default to proxied endpoints matching normal container behavior; opt out
with `isProxied: false` or `WithEndpointProxySupport(false)`. Proxyless
container endpoints with only a `targetPort` specified now also resolve
immediately to that port instead of waiting for delayed allocation.
(#​17960, `@​danegsta`)

### 🏷️ Housekeeping

- 🛠️ Unblocked WinGet manifest publishing on locked-down 1ES agents and
updated manifest tags (#​17958)

---
*Full Changelog:
https://github.com/microsoft/aspire/compare/v13.4.2...v13.4.3*

*Full commit:
[4f218933552e18ff2874d1b6d5dc3fe671e3b6d9](https://github.com/microsoft/aspire/commit/4f218933552e18ff2874d1b6d5dc3fe671e3b6d9)*

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27173824611/agentic_workflow)
· ● 4.7M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 27173824611, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27173824611 -->

## 13.4.2

## What's New in Aspire 13.4.2

Patch release for Aspire 13.4 with a fix for Redis persistent container
deadlock on startup when using TLS.

### 🐛 Fixes

- 🔴 **Redis with `WithLifetime(ContainerLifetime.Persistent)` could
deadlock on startup** — Redis TLS startup arguments used the
public/allocated host ports instead of the internal target ports. When
the public port differed from the target port (or was not yet allocated)
the container would listen on an unexpected port and become unreachable.
The TLS and non-TLS startup arguments now bind to target ports, matching
what Redis expects internally. Fixes #​17822. (#​17827, backported via
#​17850, `@​danegsta`)

### 🏷️ Housekeeping

- 🚀 Bumped branding to 13.4.2 (#​17876)

---
*Full Changelog:
https://github.com/microsoft/aspire/compare/v13.4.1...v13.4.2*

*Full commit:
[d7d0b6759ce4b936c76bc4775814d27db560dd6d](https://github.com/microsoft/aspire/commit/d7d0b6759ce4b936c76bc4775814d27db560dd6d)*

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26920328099/agentic_workflow)
· ● 5M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26920328099, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26920328099 -->

## 13.4.1

## What's New in Aspire 13.4.1

Patch release for Aspire 13.4 with fixes for explicit-start resource
lifecycle callbacks, Redis persistent container startup, proxyless
endpoint allocation, and a duplicated `profiles` block in the empty C#
AppHost template.

### 🐛 Fixes

- ⏱️ **Explicit-start resources triggered lifecycle callbacks too
early** — Session-scoped resources marked with `WithExplicitStart()`
were having their execution configuration callbacks (environment
variables, arguments, certificates) evaluated at AppHost startup instead
of at manual start. This meant user-interaction callbacks such as
`WithEnvironment(ctx => PromptForValueAsync(...))` were called before
the user triggered the resource. DCP registration is now deferred until
the user manually starts the resource; persistent explicit-start
resources still register immediately but patch the existing DCP record
to `Start = true` rather than deleting and recreating it. Fixes #​17813.
(#​17825, backported via #​17826, `@​danegsta`)
- 🔴 **Redis with `WithLifetime(ContainerLifetime.Persistent)` could
deadlock on startup** — Redis TLS startup arguments used the
public/allocated host ports instead of the internal target ports. When
the public port differed from the target port (or was not yet allocated)
the container would listen on an unexpected port and become unreachable.
The TLS and non-TLS startup arguments now bind to target ports, matching
what Redis expects internally. Fixes #​17822. (#​17827, backported via
#​17850, `@​danegsta`)
- 🔌 **Proxyless container endpoint could hang when resolved before
container creation** — Referencing a proxyless container endpoint in an
environment variable callback (before the container port spec was
finalized) could deadlock. An on-demand allocation path now commits the
target port as the fallback host port in that case; once
`BuildContainerPorts` runs, normal DCP dynamic port assignment takes
over for any later resolution. (#​17851, backported via #​17859,
`@​danegsta`)
- 📄 **Empty C# AppHost template emitted duplicate `profiles` block** —
`aspire new aspire-empty` on 13.4 produced an `aspire.config.json` with
a `profiles` block that duplicated the content already present in
`apphost.run.json`, causing redundant launch configuration. The embedded
template now contains only the required `appHost.path` binding; profile
configuration lives exclusively in `apphost.run.json`. Fixes #​17660.
(#​17781, backported via #​17820, `@​mitchdenny`)

### 🏷️ Housekeeping

- 📦 Added Aspire CLI npm package to the release pipeline so the npm
distribution is published as part of stable releases. (#​17297,
backported via #​17766, `@​adamint`)
- 🚀 Bumped branding to 13.4.1 (#​17819)

---
*Full Changelog:
https://github.com/microsoft/aspire/compare/v13.4.0...v13.4.1*

*Full commit:
[cf985fa817dd5863e7f62eb74fa1725ab5069ed2](https://github.com/microsoft/aspire/commit/cf985fa817dd5863e7f62eb74fa1725ab5069ed2)*

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26909313891/agentic_workflow)
· ● 1.0.40

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26909313891/agentic_workflow)
· ● 3.9M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26909313891, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26909313891 -->

## 13.4.0

# Aspire 13.4.0

Aspire 13.4 brings major improvements to Foundry hosted agents, the
Aspire skills system, CLI reliability, and TypeScript AppHost stability
— with cross-compute-environment deployment now working end-to-end and
**TypeScript AppHost support — Aspire's polyglot story — reaching
general availability (GA)**.

## Highlights

- 🎉 **TypeScript AppHost is now GA** — First introduced as a preview in
an earlier version of Aspire, the TypeScript AppHost — Aspire's polyglot
story — has reached the quality bar for general availability and is now
officially supported for production use alongside C#. As part of GA, the
experimental markers on the Azure TypeScript AppHost (ATS) APIs have
been removed and the ATS surface area is stable for 13.4.
- 🤖 **Foundry hosted agents** — Protocol selection (`responses` /
`invocations`) is now configurable from both C# and TypeScript AppHosts.
Cross-compute-environment deployments (e.g., a Foundry hosted agent + an
AKS consumer) now wire up correctly: endpoint resolution and the
required **Azure AI User** RBAC role assignment on the Foundry account
are generated automatically — no manual `az role assignment create`
steps needed.
- 🛠️ **Aspire skills catalog from bundle** — `aspire agent init` now
drives its installable skill catalog from the bundle manifest, surfacing
all six bundled skills (previously only three were visible). An embedded
snapshot means the full catalog is available even in airgapped /
disconnected environments.
- 🔧 **CLI reliability** — Multiple CLI fixes: implicit-channel discovery
restored, `aspire stop` no longer falsely reports failure on Unix,
`aspire ps` no longer includes raw resource data (use `aspire describe`
for detailed state), `aspire new` prefers the current CLI template
version, friendly error for `aspire do --list-steps` without a step
argument, and improved `--search` option description with documentation
link.
- ⌨️ **TypeScript AppHost** — Fixed a deadlock that occurred when lazy
options callbacks invoked async methods; dev-localhost resource service
URLs are now accepted for local development without extra configuration.
- 📊 **Dashboard** — Summary log formatting improved for readability,
`dotnet watch` dashboard auto-launch signal restored, and dynamic-port
handling fixed for `DistributedApplicationTestingBuilder`.
- ☸️ **Kubernetes** — The Helm CLI minimum version (≥ 4.2.0) is now
validated before a Kubernetes deploy, giving a clear error instead of a
cryptic failure.
- ⚠️ **`Aspire.Hosting.Blazor` ships as preview in 13.4** — A packaging
issue with the Blazor gateway scripts means the package is intentionally
marked preview for this release. Full stable support is targeted for
13.5.

## ⚠️ Notable changes

- `aspire ps` no longer includes raw resource data in its output. Use
`aspire describe <resource>` to inspect detailed resource state.
- Foundry hosted agent builder API shape updated — see
[#​17545](https://github.com/microsoft/aspire/pull/17545) and
[#​17669](https://github.com/microsoft/aspire/pull/17669) for the
updated C# and TypeScript signatures.
- `Aspire.Hosting.Blazor` is preview-versioned in 13.4
(`SuppressFinalPackageVersion=true`). A fix for the `addBlazorGateway`
gateway script resolution error in TypeScript AppHosts is tracked in
[#​17685](https://github.com/microsoft/aspire/issues/17685).

## 📖 Learn more

For the full details on everything in this release, check out the
[What's new in Aspire 13.4](https://aspire.dev/whats-new/aspire-13-4/)
documentation.

Thank you to all the community contributors who helped make Aspire 13.4
possible! 💜

---
*Full Changelog:
https://github.com/microsoft/aspire/compare/v13.3.5...v13.4.0*

*Full commit:
[becb48e2d61099e35ae336d527d3875e928d6594](https://github.com/microsoft/aspire/commit/becb48e2d61099e35ae336d527d3875e928d6594)*

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26779980139/agentic_workflow)
· ● 6.5M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26779980139, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26779980139 -->


## 13.3.5

## What's New in Aspire 13.3.5

Patch release for Aspire 13.3 with fixes for the Azure provisioning
location prompt and an Aspire CLI named-pipe timeout on Linux with .NET
SDK 10.0.300.

### 🐛 Fixes

- 📍 **Azure provisioning location prompt not populated** — Selecting an
existing resource group during `aspire publish` now correctly populates
dependent server-controlled fields (such as Location). Previously,
server-provided values for disabled inputs were discarded, leaving those
fields blank. (#​17278, backported via #​17291)
- 🔧 **Aspire CLI named-pipe timeout on Linux with .NET SDK 10.0.300** —
The Aspire CLI was forcing `DOTNET_CLI_USE_MSBUILD_SERVER=1` for all
`dotnet run`/`dotnet build` invocations. On Linux with SDK 10.0.300 this
caused a named-pipe timeout that prevented `aspire run` from building
the AppHost. The forced override has been removed so the SDK chooses
MSBuild server behavior. Fixes #​16849. (#​17313, backported via
#​17314)

### 🏷️ Housekeeping

- ⬆️ Skipped log publish for WinGet/Homebrew installer pipeline jobs to
fix Prepare Installers stage failures (#​17134)
- 🚀 Bumped branding to 13.3.5 (#​17315)

---
*Full Changelog:
https://github.com/microsoft/aspire/compare/v13.3.4...v13.3.5*

*Full commit:
[70b33bcb5f64c75e3ab6f57616545f35bd43dc81](https://github.com/microsoft/aspire/commit/70b33bcb5f64c75e3ab6f57616545f35bd43dc81)*

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26241645258/agentic_workflow)
· ● 4.3M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26241645258, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26241645258 -->

## 13.3.4

## What's New in Aspire 13.3.4

Patch release for Aspire 13.3 with a fix for the Aspire skill
description exceeding agent host limits.

### 🐛 Fixes

- 📝 **Aspire skill description too long for agent hosts** — The
`SKILL.md` generated by `aspire agent init` included a frontmatter
description that exceeded the 1024-character limit enforced by agent
hosts such as Codex and Copilot CLI, causing the Aspire skill to fail to
load. The bundled skill description has been shortened to stay within
the limit. (#​17183, backported via #​17188)

### 🏷️ Housekeeping

- 🚀 Bumped branding to 13.3.4 (#​17215)

---
*Full commit:
[75080796af797483231a9da2d1642b5130617565](https://github.com/microsoft/aspire/commit/75080796af797483231a9da2d1642b5130617565)*

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26123829267/agentic_workflow)
· ● 3.6M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26123829267, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26123829267 -->

## 13.3.3

## What's New in Aspire 13.3.3

Patch release for Aspire 13.3 with fixes for debug log level leaking
into user resources, Keycloak HTTPS endpoint token invalidation, and
endpoint materialization in `HostResourceWithEndpoints`.

### 🐛 Fixes

- 🔇 **Debug log level leaking into user resources** —
`Logging__LogLevel__Default=Debug` set by the app host was being
inherited by all user resources, silently changing their logging
verbosity. The app host now uses `ASPIRE_APPHOST_LOGLEVEL` instead,
which is scoped to Aspire processes only. (#​17071, backported via
#​17078)
- 🔑 **Keycloak HTTPS primary endpoint** — Fixed a regression where
Keycloak tokens became invalid after an app host restart because the
HTTPS endpoint port was dynamic. When developer certificates are
enabled, Keycloak's primary endpoint is now upgraded to HTTPS directly,
and the endpoint name is set to `http` to enable standard
`http+https://` service discovery URLs. (#​17058, backported via
#​17063)
- 🔌 **Endpoint materialization in `HostResourceWithEndpoints`** —
Endpoints configured via `HostResourceWithEndpoints` are now correctly
materialized, ensuring endpoint resolution and service discovery work as
expected. (#​17091, backported via #​17092)

### 🏷️ Housekeeping

- ⬆️ Bumped DCP (Microsoft.DeveloperControlPlane) from 0.23.5 → 0.23.6 —
includes fixes for Kubernetes OpenAPI generator types that caused
`[SHOULD NOT HAPPEN] failed to update managedFields` errors. (#​17070)
- 🚀 Bumped branding to 13.3.3 (#​17088)

---
*Full commit:
[a4615e7c6def6cba4703cdbd84009cd3da9a261b](https://github.com/microsoft/aspire/commit/a4615e7c6def6cba4703cdbd84009cd3da9a261b)*


## 13.3.2

## What's New in Aspire 13.3.2

Patch release for Aspire 13.3 with a fix for container tunnel startup
when tunnel-dependent containers use `WaitFor()`.

### 🐛 Fixes

- 🚇 Fix `WaitFor()` for tunnel-dependent containers — The container
tunnel implementation that shipped in Aspire 13.3 deadlocked at startup
when tunnel-using containers waited on other resources, because resource
waits blocked `ResourceStarting` before the tunnel initialization could
complete. Container and tunnel startup have been refactored to cooperate
correctly, and additional tunnel-dependent containers can now be started
at any point during the application lifecycle. Also improves error
reporting for container tunnel failures. (#​16988, backported via
#​16993)

### 🏷️ Housekeeping

- 🚀 Bumped branding to 13.3.2 (#​17053)


## 13.3.1

# Aspire 13.3.1

## What's New in Aspire 13.3.1

Patch release for Aspire 13.3 with a regression fix for `aspire run` and
a DCP bump.

### 🐛 Fixes

- 🏃 **`aspire run` compute environment validation** — Skip compute
environment validation in run mode so customers no longer hit `Resource
'<name>' is configured to publish as an Azure Container App, but there
are no 'AzureContainerAppEnvironmentResource' resources. Ensure you have
added one by calling 'AddAzureContainerAppEnvironment'.` errors during
local runs. The check is now only performed in publish mode, matching
pre-13.3 behavior. (#​16945, backported via #​16952)

### 🏷️ Housekeeping

- ⬆️ Bumped DCP (Microsoft.DeveloperControlPlane) from 0.23.4 → 0.23.5
(#​16944)
- 🌐 Updated localization resources (#​16602)
- 🚀 Bumped branding to 13.3.1 (#​16951)

## 13.3.0

 # Aspire 13.3.0
 
Aspire 13.3 is here! 🚀 This release is packed with new ways to deploy,
debug, and build distributed apps — including `aspire destroy`, browser
telemetry in the dashboard, Kubernetes deployment, first-class
JavaScript publishing, and major TypeScript AppHost parity
 improvements.
 
 ## Highlights
 
- 🧹 **Clean teardown** — New **`aspire destroy`** tears down Azure,
Kubernetes, and Docker Compose deployments, and pipeline summaries make
deploy/publish/destroy runs easier to follow.
- 🔍 **Frontend telemetry** — **Aspire.Hosting.Browsers** captures
browser console logs, network requests, and screenshots right in the
Aspire dashboard.
- ☸️ **Kubernetes deploy preview** — **`aspire deploy`** can now
generate Helm-based Kubernetes deployments, with first-class Ingress and
Gateway API routing.
- 🟨 **JavaScript publishing** — New **`PublishAs*`** methods support
static sites, Node servers, npm-script apps, Next.js, Vite, Bun, Yarn,
and pnpm.
- 🌐 **TypeScript AppHost parity** — Unified `withEnvironment`, Docker
Compose hooks, endpoint expressions, Azure Container Apps domains, and
more close the gap with C# AppHosts.
- 🛠️ **CLI upgrades** — Run the standalone dashboard with **`aspire
dashboard run`**, install the CLI as a NativeAOT `dotnet tool`, and
search API docs from the terminal.
- ☁️ **Azure goodness** — New Azure Front Door, Network Security
Perimeter, AKS, private endpoint, and Foundry Prompt Agent support.
- 🐳 **Better containers** — The Aspire container tunnel is now enabled
by default for consistent host connectivity across Docker Desktop,
Docker Engine, and Podman.
 
 ## ⚠️ Breaking changes
 
Notable breaking changes include `--log-level` becoming
`--pipeline-log-level`, the dashboard MCP server being replaced by
`aspire agent init`, `dotnet new aspire-py-starter` moving to `aspire
new aspire-py-starter`, and several API shape updates across AKS,
Foundry, JavaScript diagnostics, and TypeScript AppHost helpers.
 
See the full list in the [Aspire 13.3 breaking
changes](https://aspire.dev/whats-new/aspire-13-3/#%EF%B8%8F-breaking-changes).
 
 ## 📖 Learn more
 
For the full details, examples, migration guidance, and everything new
in this release, check out [What's new in Aspire
13.3](https://aspire.dev/whats-new/aspire-13-3/).
 
Thank you to all the community contributors who helped make Aspire 13.3
possible! 💜

## 13.2.4

# Aspire 13.2.4

## What's New in Aspire 13.2.4

Patch release addressing a security advisory in OpenTelemetry
dependencies.


### 🐛 Fixes

- 🔒 Bumped OpenTelemetry dependencies to address CVE-2026-40894
(#​16420)

### 🏷️ Housekeeping

 - 🚀 Bumped branding to
  13.2.4 (#​16436)

## 13.2.3

# What's New in Aspire 13.2.3

Patch release focused on CLI packaging, signing, and reliability fixes.

## 🐛 Fixes

- 🛑 aspire stop now properly cleans up application containers on Windows
(#​16123)
- 🔐 Fixed macOS signing, permissions, and certificate trust with
improved CI verification (#​16053)
 - ✍️ Fixed signing for the aspire-managed bundle payload (#​16211)
- 🎭 Fixed Playwright CLI provenance verification for the new tag format
(#​16134)
 - 🧭 Updated service discovery environment variables (#​16223)

## 🔧 Improvements

- 📊 Removed telemetry API data limits and refactored URL builders
(#​16023)
- ⏱️ Increased native build + sign timeout to 60 minutes for reliability
(#​16212)

## 🏷️ Housekeeping

 - 🔖 Bumped branding to 13.2.3 (#​16181)
- 🧪 Temporarily disabled Verify CLI archive step on Windows while
investigating (#​16276, #​16285)


Commits viewable in [compare
view](https://github.com/microsoft/aspire/compare/v13.2.2...v13.4.6).
</details>

Updated [Aspire.Hosting.PostgreSQL](https://github.com/microsoft/aspire)
from 13.2.2 to 13.4.6.

<details>
<summary>Release notes</summary>

_Sourced from [Aspire.Hosting.PostgreSQL's
releases](https://github.com/microsoft/aspire/releases)._

## 13.4.6

## What's New in Aspire 13.4.6

Patch release for Aspire 13.4 fixing polyglot AppHost code generation
binding when CLI and SDK versions diverge, resource service port
collision in `--isolated` mode, and a MongoDB.Driver dependency update.

### 🐛 Fixes

- 🔗 **Polyglot AppHost code generation silently failed when CLI and SDK
versions diverged** — `Aspire.TypeSystem` used a floating strong-name
`AssemblyVersion` that changed with every build. When the installed
Aspire CLI was built at a different version than the AppHost's SDK, the
CLR couldn't satisfy the strong-name bind and every code generator
(TypeScript, Python, Java, Go, Rust) was silently dropped, surfacing as
`No code generator found for language: <lang>`. The `AssemblyVersion` is
now frozen at a stable constant so any compatible CLI/SDK pair on 13.4
binds successfully. Relates to #​18110 and #​17910.
([#​18160](https://github.com/microsoft/aspire/pull/18160),
`@​sebastienros`)

- 🔌 **Multiple AppHosts started with `--isolated` collided on the
resource service port** — Both instances tried to bind to the same fixed
port from `ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL`, causing an "address
already in use" error on the second instance. `DashboardServiceHost` now
binds to port 0 on loopback when `RandomizePorts` is true (set by
`--isolated`), letting the OS assign a unique port per instance.
([#​18341](https://github.com/microsoft/aspire/pull/18341), `@​JamesNK`)

- 🍃 **MongoDB.Driver updated to 3.9.0** — Removes a wrongly pinned
`SharpCompress` transitive dependency and uses the corrected `Snappier`
transitive. Fixes #​17981.
([#​18279](https://github.com/microsoft/aspire/pull/18279),
`@​Falco20019`)

### 🏷️ Housekeeping

- 🚀 Bumped branding to 13.4.6
([#​18343](https://github.com/microsoft/aspire/pull/18343))

---

_Full Changelog:
[v13.4.5...v13.4.6](https://github.com/microsoft/aspire/compare/v13.4.5...v13.4.6)_

_Full commit:
[87fe259e4fc244c599019a7b1304c85a1488f248](https://github.com/microsoft/aspire/commit/87fe259e4fc244c599019a7b1304c85a1488f248)_

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27855270514) ·
131 AIC · ⌖ 13.5 AIC · ⊞ 37.4K

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.60, model:
claude-sonnet-4.6, id: 27855270514, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27855270514 -->

## 13.4.5

## What's New in Aspire 13.4.5

Patch release for Aspire 13.4 clearing a transitive MessagePack security
advisory, tightening CLI validation for Playwright configuration, and
adding coding-agent detection to CLI telemetry.

### 🐛 Fixes

- 🛡️ **Bumped StreamJsonRpc to 2.25.29 to clear the MessagePack
GHSA-hv8m-jj95-wg3x (CVE-2026-48109) NU1903 advisory** — The transitive
MessagePack 2.5.192 dependency pulled in via StreamJsonRpc 2.22.23 fell
within the advisory's vulnerable LZ4 decompression range. Aspire does
not use `MessagePackFormatter` or LZ4 — all StreamJsonRpc calls use
`SystemTextJsonFormatter` over local Unix sockets — so the vulnerability
was not reachable in practice. The bump clears the NU1903 warning for
consumers of the `Aspire.Hosting` package.
([#​18204](https://github.com/microsoft/aspire/pull/18204),
`@​mitchdenny`)
- 🎭 **`playwrightCliVersion` values that are not valid SemVer 2.0 now
fail fast with a clear diagnostic** — Previously an invalid override
(range expression, dist-tag like `latest`, or a `v`-prefixed string)
would surface as a generic npm resolution failure. The value is now
validated with strict SemVer parsing at startup; an error naming the
configuration key and the offending value is emitted immediately.
([#​18205](https://github.com/microsoft/aspire/pull/18205),
`@​mitchdenny`)
- 🤖 **CLI telemetry now detects and reports the calling coding agent** —
When the Aspire CLI is invoked from inside a known coding agent
environment (GitHub Copilot CLI, VS Code Copilot agent, etc.) the agent
name is included in the main CLI telemetry event. GitHub Copilot CLI is
specifically identified as `copilot-cli`.
([#​18240](https://github.com/microsoft/aspire/pull/18240),
`@​damianedwards`)

### 🏷️ Housekeeping

- 📄 Refreshed the `@​microsoft/aspire-cli` npm package README to be
TypeScript-only — updated examples to the current `ts-starter` template
(`apphost.mts` / `aspire.mjs`), added a backing-services snippet showing
`aspire add` for PostgreSQL and Redis, and documented `aspire dashboard
run` as a standalone dashboard option.
([#​18221](https://github.com/microsoft/aspire/pull/18221), `@​adamint`)

---

_Full Changelog:
[v13.4.4...v13.4.5](https://github.com/microsoft/aspire/compare/v13.4.4...v13.4.5)_

_Full commit:
[73114e86c64aeb9f3f3c7da8e37df1ae4281b27e](https://github.com/microsoft/aspire/commit/73114e86c64aeb9f3f3c7da8e37df1ae4281b27e)_

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27667814104/agentic_workflow)
· ● 4.4M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 27667814104, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27667814104 -->

## 13.4.4

## What's New in Aspire 13.4.4

Patch release for Aspire 13.4 with improved DCP connection reliability
during request execution and consistent `ExcludeFromMcp()` filtering
across all CLI MCP tools.

### 🐛 Fixes

* 🔌 **DCP requests could fail permanently when the connection dropped
mid-request** — If the underlying DCP channel closed while a request was
in flight, the error was surfaced directly instead of being retried.
Reconnection is now attempted as part of the DCP request retry path so
transient disconnections recover automatically without surfacing errors.
([#​18096](https://github.com/microsoft/aspire/pull/18096),
`@​karolz-ms`)
* 🔍 **Resources marked with `ExcludeFromMcp()` were not consistently
filtered from CLI MCP tools** — Resources with the
`resource.excludeFromMcp` property were not excluded uniformly from all
CLI MCP tool results. `list_resources`, `list_console_logs`,
`execute_resource_command`, `list_structured_logs`, `list_traces`, and
`list_trace_structured_logs` all now honor the exclusion, preventing
excluded resources and their telemetry from appearing in agent context.
([#​18150](https://github.com/microsoft/aspire/pull/18150), `@​JamesNK`)

### 🏷️ Housekeeping

* 📦 Improved npm CLI package metadata and hardened npm publish
validation in the release pipeline.
([#​18093](https://github.com/microsoft/aspire/pull/18093),
`@​adamratzman`)

* * *

_Full Changelog:
[v13.4.3...v13.4.4](https://github.com/microsoft/aspire/compare/v13.4.3...v13.4.4)_

_Full commit:
[ccc566c5ab3285c9beb8f38ede34734bb477c029](https://github.com/microsoft/aspire/commit/ccc566c5ab3285c9beb8f38ede34734bb477c029)_


## 13.4.3

## What's New in Aspire 13.4.3

Patch release for Aspire 13.4 with a fix for persistent container
endpoint allocation regressions introduced in 13.4.

### 🐛 Fixes

- 🔌 **Persistent container endpoints had incorrect default behavior** —
Persistent containers were defaulting to proxyless endpoint behavior
instead of the proxied behavior used by normal containers. This caused
integrations that depend on endpoint allocation before resource startup
(such as the KeyVault emulator) to fail. Persistent containers now
default to proxied endpoints matching normal container behavior; opt out
with `isProxied: false` or `WithEndpointProxySupport(false)`. Proxyless
container endpoints with only a `targetPort` specified now also resolve
immediately to that port instead of waiting for delayed allocation.
(#​17960, `@​danegsta`)

### 🏷️ Housekeeping

- 🛠️ Unblocked WinGet manifest publishing on locked-down 1ES agents and
updated manifest tags (#​17958)

---
*Full Changelog:
https://github.com/microsoft/aspire/compare/v13.4.2...v13.4.3*

*Full commit:
[4f218933552e18ff2874d1b6d5dc3fe671e3b6d9](https://github.com/microsoft/aspire/commit/4f218933552e18ff2874d1b6d5dc3fe671e3b6d9)*

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27173824611/agentic_workflow)
· ● 4.7M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 27173824611, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27173824611 -->

## 13.4.2

## What's New in Aspire 13.4.2

Patch release for Aspire 13.4 with a fix for Redis persistent container
deadlock on startup when using TLS.

### 🐛 Fixes

- 🔴 **Redis with `WithLifetime(ContainerLifetime.Persistent)` could
deadlock on startup** — Redis TLS startup arguments used the
public/allocated host ports instead of the internal target ports. When
the public port differed from the target port (or was not yet allocated)
the container would listen on an unexpected port and become unreachable.
The TLS and non-TLS startup arguments now bind to target ports, matching
what Redis expects internally. Fixes #​17822. (#​17827, backported via
#​17850, `@​danegsta`)

### 🏷️ Housekeeping

- 🚀 Bumped branding to 13.4.2 (#​17876)

---
*Full Changelog:
https://github.com/microsoft/aspire/compare/v13.4.1...v13.4.2*

*Full commit:
[d7d0b6759ce4b936c76bc4775814d27db560dd6d](https://github.com/microsoft/aspire/commit/d7d0b6759ce4b936c76bc4775814d27db560dd6d)*

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26920328099/agentic_workflow)
· ● 5M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26920328099, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26920328099 -->

## 13.4.1

## What's New in Aspire 13.4.1

Patch release for Aspire 13.4 with fixes for explicit-start resource
lifecycle callbacks, Redis persistent container startup, proxyless
endpoint allocation, and a duplicated `profiles` block in the empty C#
AppHost template.

### 🐛 Fixes

- ⏱️ **Explicit-start resources triggered lifecycle callbacks too
early** — Session-scoped resources marked with `WithExplicitStart()`
were having their execution configuration callbacks (environment
variables, arguments, certificates) evaluated at AppHost startup instead
of at manual start. This meant user-interaction callbacks such as
`WithEnvironment(ctx => PromptForValueAsync(...))` were called before
the user triggered the resource. DCP registration is now deferred until
the user manually starts the resource; persistent explicit-start
resources still register immediately but patch the existing DCP record
to `Start = true` rather than deleting and recreating it. Fixes #​17813.
(#​17825, backported via #​17826, `@​danegsta`)
- 🔴 **Redis with `WithLifetime(ContainerLifetime.Persistent)` could
deadlock on startup** — Redis TLS startup arguments used the
public/allocated host ports instead of the internal target ports. When
the public port differed from the target port (or was not yet allocated)
the container would listen on an unexpected port and become unreachable.
The TLS and non-TLS startup arguments now bind to target ports, matching
what Redis expects internally. Fixes #​17822. (#​17827, backported via
#​17850, `@​danegsta`)
- 🔌 **Proxyless container endpoint could hang when resolved before
container creation** — Referencing a proxyless container endpoint in an
environment variable callback (before the container port spec was
finalized) could deadlock. An on-demand allocation path now commits the
target port as the fallback host port in that case; once
`BuildContainerPorts` runs, normal DCP dynamic port assignment takes
over for any later resolution. (#​17851, backported via #​17859,
`@​danegsta`)
- 📄 **Empty C# AppHost template emitted duplicate `profiles` block** —
`aspire new aspire-empty` on 13.4 produced an `aspire.config.json` with
a `profiles` block that duplicated the content already present in
`apphost.run.json`, causing redundant launch configuration. The embedded
template now contains only the required `appHost.path` binding; profile
configuration lives exclusively in `apphost.run.json`. Fixes #​17660.
(#​17781, backported via #​17820, `@​mitchdenny`)

### 🏷️ Housekeeping

- 📦 Added Aspire CLI npm package to the release pipeline so the npm
distribution is published as part of stable releases. (#​17297,
backported via #​17766, `@​adamint`)
- 🚀 Bumped branding to 13.4.1 (#​17819)

---
*Full Changelog:
https://github.com/microsoft/aspire/compare/v13.4.0...v13.4.1*

*Full commit:
[cf985fa817dd5863e7f62eb74fa1725ab5069ed2](https://github.com/microsoft/aspire/commit/cf985fa817dd5863e7f62eb74fa1725ab5069ed2)*

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26909313891/agentic_workflow)
· ● 1.0.40

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26909313891/agentic_workflow)
· ● 3.9M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26909313891, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26909313891 -->

## 13.4.0

# Aspire 13.4.0

Aspire 13.4 brings major improvements to Foundry hosted agents, the
Aspire skills system, CLI reliability, and TypeScript AppHost stability
— with cross-compute-environment deployment now working end-to-end and
**TypeScript AppHost support — Aspire's polyglot story — reaching
general availability (GA)**.

## Highlights

- 🎉 **TypeScript AppHost is now GA** — First introduced as a preview in
an earlier version of Aspire, the TypeScript AppHost — Aspire's polyglot
story — has reached the quality bar for general availability and is now
officially supported for production use alongside C#. As part of GA, the
experimental markers on the Azure TypeScript AppHost (ATS) APIs have
been removed and the ATS surface area is stable for 13.4.
- 🤖 **Foundry hosted agents** — Protocol selection (`responses` /
`invocations`) is now configurable from both C# and TypeScript AppHosts.
Cross-compute-environment deployments (e.g., a Foundry hosted agent + an
AKS consumer) now wire up correctly: endpoint resolution and the
required **Azure AI User** RBAC role assignment on the Foundry account
are generated automatically — no manual `az role assignment create`
steps needed.
- 🛠️ **Aspire skills catalog from bundle** — `aspire agent init` now
drives its installable skill catalog from the bundle manifest, surfacing
all six bundled skills (previously only three were visible). An embedded
snapshot means the full catalog is available even in airgapped /
disconnected environments.
- 🔧 **CLI reliability** — Multiple CLI fixes: implicit-channel discovery
restored, `aspire stop` no longer falsely reports failure on Unix,
`aspire ps` no longer includes raw resource data (use `aspire describe`
for detailed state), `aspire new` prefers the current CLI template
version, friendly error for `aspire do --list-steps` without a step
argument, and improved `--search` option description with documentation
link.
- ⌨️ **TypeScript AppHost** — Fixed a deadlock that occurred when lazy
options callbacks invoked async methods; dev-localhost resource service
URLs are now accepted for local development without extra configuration.
- 📊 **Dashboard** — Summary log formatting improved for readability,
`dotnet watch` dashboard auto-launch signal restored, and dynamic-port
handling fixed for `DistributedApplicationTestingBuilder`.
- ☸️ **Kubernetes** — The Helm CLI minimum version (≥ 4.2.0) is now
validated before a Kubernetes deploy, giving a clear error instead of a
cryptic failure.
- ⚠️ **`Aspire.Hosting.Blazor` ships as preview in 13.4** — A packaging
issue with the Blazor gateway scripts means the package is intentionally
marked preview for this release. Full stable support is targeted for
13.5.

## ⚠️ Notable changes

- `aspire ps` no longer includes raw resource data in its output. Use
`aspire describe <resource>` to inspect detailed resource state.
- Foundry hosted agent builder API shape updated — see
[#​17545](https://github.com/microsoft/aspire/pull/17545) and
[#​17669](https://github.com/microsoft/aspire/pull/17669) for the
updated C# and TypeScript signatures.
- `Aspire.Hosting.Blazor` is preview-versioned in 13.4
(`SuppressFinalPackageVersion=true`). A fix for the `addBlazorGateway`
gateway script resolution error in TypeScript AppHosts is tracked in
[#​17685](https://github.com/microsoft/aspire/issues/17685).

## 📖 Learn more

For the full details on everything in this release, check out the
[What's new in Aspire 13.4](https://aspire.dev/whats-new/aspire-13-4/)
documentation.

Thank you to all the community contributors who helped make Aspire 13.4
possible! 💜

---
*Full Changelog:
https://github.com/microsoft/aspire/compare/v13.3.5...v13.4.0*

*Full commit:
[becb48e2d61099e35ae336d527d3875e928d6594](https://github.com/microsoft/aspire/commit/becb48e2d61099e35ae336d527d3875e928d6594)*

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26779980139/agentic_workflow)
· ● 6.5M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26779980139, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26779980139 -->


## 13.3.5

## What's New in Aspire 13.3.5

Patch release for Aspire 13.3 with fixes for the Azure provisioning
location prompt and an Aspire CLI named-pipe timeout on Linux with .NET
SDK 10.0.300.

### 🐛 Fixes

- 📍 **Azure provisioning location prompt not populated** — Selecting an
existing resource group during `aspire publish` now correctly populates
dependent server-controlled fields (such as Location). Previously,
server-provided values for disabled inputs were discarded, leaving those
fields blank. (#​17278, backported via #​17291)
- 🔧 **Aspire CLI named-pipe timeout on Linux with .NET SDK 10.0.300** —
The Aspire CLI was forcing `DOTNET_CLI_USE_MSBUILD_SERVER=1` for all
`dotnet run`/`dotnet build` invocations. On Linux with SDK 10.0.300 this
caused a named-pipe timeout that prevented `aspire run` from building
the AppHost. The forced override has been removed so the SDK chooses
MSBuild server behavior. Fixes #​16849. (#​17313, backported via
#​17314)

### 🏷️ Housekeeping

- ⬆️ Skipped log publish for WinGet/Homebrew installer pipeline jobs to
fix Prepare Installers stage failures (#​17134)
- 🚀 Bumped branding to 13.3.5 (#​17315)

---
*Full Changelog:
https://github.com/microsoft/aspire/compare/v13.3.4...v13.3.5*

*Full commit:
[70b33bcb5f64c75e3ab6f57616545f35bd43dc81](https://github.com/microsoft/aspire/commit/70b33bcb5f64c75e3ab6f57616545f35bd43dc81)*

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26241645258/agentic_workflow)
· ● 4.3M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26241645258, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26241645258 -->

## 13.3.4

## What's New in Aspire 13.3.4

Patch release for Aspire 13.3 with a fix for the Aspire skill
description exceeding agent host limits.

### 🐛 Fixes

- 📝 **Aspire skill description too long for agent hosts** — The
`SKILL.md` generated by `aspire agent init` included a frontmatter
description that exceeded the 1024-character limit enforced by agent
hosts such as Codex and Copilot CLI, causing the Aspire skill to fail to
load. The bundled skill description has been shortened to stay within
the limit. (#​17183, backported via #​17188)

### 🏷️ Housekeeping

- 🚀 Bumped branding to 13.3.4 (#​17215)

---
*Full commit:
[75080796af797483231a9da2d1642b5130617565](https://github.com/microsoft/aspire/commit/75080796af797483231a9da2d1642b5130617565)*

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/26123829267/agentic_workflow)
· ● 3.6M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 26123829267, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/26123829267 -->

## 13.3.3

## What's New in Aspire 13.3.3

Patch release for Aspire 13.3 with fixes for debug log level leaking
into user resources, Keycloak HTTPS endpoint token invalidation, and
endpoint materialization in `HostResourceWithEndpoints`.

### 🐛 Fixes

- 🔇 **Debug log level leaking into user resources** —
`Logging__LogLevel__Default=Debug` set by the app host was being
inherited by all user resources, silently changing their logging
verbosity. The app host now uses `ASPIRE_APPHOST_LOGLEVEL` instead,
which is scoped to Aspire processes only. (#​17071, backported via
#​17078)
- 🔑 **Keycloak HTTPS primary endpoint** — Fixed a regression where
Keycloak tokens became invalid after an app host restart because the
HTTPS endpoint port was dynamic. When developer certificates are
enabled, Keycloak's primary endpoint is now upgraded to HTTPS directly,
and the endpoint name is set to `http` to enable standard
`http+https://` service discovery URLs. (#​17058, backported via
#​17063)
- 🔌 **Endpoint materialization in `HostResourceWithEndpoints`** —
Endpoints configured via `HostResourceWithEndpoints` are now correctly
materialized, ensuring endpoint resolution and service discovery work as
expected. (#​17091, backported via #​17092)

### 🏷️ Housekeeping

- ⬆️ Bumped DCP (Microsoft.DeveloperControlPlane) from 0.23.5 → 0.23.6 —
includes fixes for Kubernetes OpenAPI generator types that caused
`[SHOULD NOT HAPPEN] failed to update managedFields` errors. (#​17070)
- 🚀 Bumped branding to 13.3.3 (#​17088)

---
*Full commit:
[a4615e7c6def6cba4703cdbd84009cd3da9a261b](https://github.com/microsoft/aspire/commit/a4615e7c6def6cba4703cdbd84009cd3da9a261b)*


## 13.3.2

## What's New in Aspire 13.3.2

Patch release for Aspire 13.3 with a fix for container tunnel startup
when tunnel-dependent containers use `WaitFor()`.

### 🐛 Fixes

- 🚇 Fix `WaitFor()` for tunnel-dependent containers — The container
tunnel implementation that shipped in Aspire 13.3 deadlocked at startup
when tunnel-using containers waited on other resources, because resource
waits blocked `ResourceStarting` before the tunnel initialization could
complete. Container and tunnel startup have been refactored to cooperate
correctly, and additional tunnel-dependent containers can now be started
at any point during the application lifecycle. Also improves error
reporting for container tunnel failures. (#​16988, backported via
#​16993)

### 🏷️ Housekeeping

- 🚀 Bumped branding to 13.3.2 (#​17053)


## 13.3.1

# Aspire 13.3.1

## What's New in Aspire 13.3.1

Patch release for Aspire 13.3 with a regression fix for `aspire run` and
a DCP bump.

### 🐛 Fixes

- 🏃 **`aspire run` compute environment validation** — Skip compute
environment validation in run mode so customers no longer hit `Resource
'<name>' is configured to publish as an Azure Container App, but there
are no 'AzureContainerAppEnvironmentResource' resources. Ensure you have
added one by calling 'AddAzureContainerAppEnvironment'.` errors during
local runs. The check is now only performed in publish mode, matching
pre-13.3 behavior. (#​16945, backported via #​16952)

### 🏷️ Housekeeping

- ⬆️ Bumped DCP (Microsoft.DeveloperControlPlane) from 0.23.4 → 0.23.5
(#​16944)
- 🌐 Updated localization resources (#​16602)
- 🚀 Bumped branding to 13.3.1 (#​16951)

## 13.3.0

 # Aspire 13.3.0
 
Aspire 13.3 is here! 🚀 This release is packed with new ways to deploy,
debug, and build distributed apps — including `aspire destroy`, browser
telemetry in the dashboard, Kubernetes deployment, first-class
JavaScript publishing, and major TypeScript AppHost parity
 improvements.
 
 ## Highlights
 
- 🧹 **Clean teardown** — New **`aspire destroy`** tears down Azure,
Kubernetes, and Docker Compose deployments, and pipeline summaries make
deploy/publish/destroy runs easier to follow.
- 🔍 **Frontend telemetry** — **Aspire.Hosting.Browsers** captures
browser console logs, network requests, and screenshots right in the
Aspire dashboard.
- ☸️ **Kubernetes deploy preview** — **`aspire deploy`** can now
generate Helm-based Kubernetes deployments, with first-class Ingress and
Gateway API routing.
- 🟨 **JavaScript publishing** — New **`PublishAs*`** methods support
static sites, Node servers, npm-script apps, Next.js, Vite, Bun, Yarn,
and pnpm.
- 🌐 **TypeScript AppHost parity** — Unified `withEnvironment`, Docker
Compose hooks, endpoint expressions, Azure Container Apps domains, and
more close the gap with C# AppHosts.
- 🛠️ **CLI upgrades** — Run the standalone dashboard with **`aspire
dashboard run`**, install the CLI as a NativeAOT `dotnet tool`, and
search API docs from the terminal.
- ☁️ **Azure goodness** — New Azure Front Door, Network Security
Perimeter, AKS, private endpoint, and Foundry Prompt Agent support.
- 🐳 **Better containers** — The Aspire container tunnel is now enabled
by default for consistent host connectivity across Docker Desktop,
Docker Engine, and Podman.
 
 ## ⚠️ Breaking changes
 
Notable breaking changes include `--log-level` becoming
`--pipeline-log-level`, the dashboard MCP server being replaced by
`aspire agent init`, `dotnet new aspire-py-starter` moving to `aspire
new aspire-py-starter`, and several API shape updates across AKS,
Foundry, JavaScript diagnostics, and TypeScript AppHost helpers.
 
See the full list in the [Aspire 13.3 breaking
changes](https://aspire.dev/whats-new/aspire-13-3/#%EF%B8%8F-breaking-changes).
 
 ## 📖 Learn more
 
For the full details, examples, migration guidance, and everything new
in this release, check out [What's new in Aspire
13.3](https://aspire.dev/whats-new/aspire-13-3/).
 
Thank you to all the community contributors who helped make Aspire 13.3
possible! 💜

## 13.2.4

# Aspire 13.2.4

## What's New in Aspire 13.2.4

Patch release addressing a security advisory in OpenTelemetry
dependencies.


### 🐛 Fixes

- 🔒 Bumped OpenTelemetry dependencies to address CVE-2026-40894
(#​16420)

### 🏷️ Housekeeping

 - 🚀 Bumped branding to
  13.2.4 (#​16436)

## 13.2.3

# What's New in Aspire 13.2.3

Patch release focused on CLI packaging, signing, and reliability fixes.

## 🐛 Fixes

- 🛑 aspire stop now properly cleans up application containers on Windows
(#​16123)
- 🔐 Fixed macOS signing, permissions, and certificate trust with
improved CI verification (#​16053)
 - ✍️ Fixed signing for the aspire-managed bundle payload (#​16211)
- 🎭 Fixed Playwright CLI provenance verification for the new tag format
(#​16134)
 - 🧭 Updated service discovery environment variables (#​16223)

## 🔧 Improvements

- 📊 Removed telemetry API data limits and refactored URL builders
(#​16023)
- ⏱️ Increased native build + sign timeout to 60 minutes for reliability
(#​16212)

## 🏷️ Housekeeping

 - 🔖 Bumped branding to 13.2.3 (#​16181)
- 🧪 Temporarily disabled Verify CLI archive step on Windows while
investigating (#​16276, #​16285)


Commits viewable in [compare
view](https://github.com/microsoft/aspire/compare/v13.2.2...v13.4.6).
</details>

Updated
[Aspire.Npgsql.EntityFrameworkCore.PostgreSQL](https://github.com/microsoft/aspire)
from 13.2.2 to 13.4.6.

<details>
<summary>Release notes</summary>

_Sourced from [Aspire.Npgsql.EntityFrameworkCore.PostgreSQL's
releases](https://github.com/microsoft/aspire/releases)._

## 13.4.6

## What's New in Aspire 13.4.6

Patch release for Aspire 13.4 fixing polyglot AppHost code generation
binding when CLI and SDK versions diverge, resource service port
collision in `--isolated` mode, and a MongoDB.Driver dependency update.

### 🐛 Fixes

- 🔗 **Polyglot AppHost code generation silently failed when CLI and SDK
versions diverged** — `Aspire.TypeSystem` used a floating strong-name
`AssemblyVersion` that changed with every build. When the installed
Aspire CLI was built at a different version than the AppHost's SDK, the
CLR couldn't satisfy the strong-name bind and every code generator
(TypeScript, Python, Java, Go, Rust) was silently dropped, surfacing as
`No code generator found for language: <lang>`. The `AssemblyVersion` is
now frozen at a stable constant so any compatible CLI/SDK pair on 13.4
binds successfully. Relates to #​18110 and #​17910.
([#​18160](https://github.com/microsoft/aspire/pull/18160),
`@​sebastienros`)

- 🔌 **Multiple AppHosts started with `--isolated` collided on the
resource service port** — Both instances tried to bind to the same fixed
port from `ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL`, causing an "address
already in use" error on the second instance. `DashboardServiceHost` now
binds to port 0 on loopback when `RandomizePorts` is true (set by
`--isolated`), letting the OS assign a unique port per instance.
([#​18341](https://github.com/microsoft/aspire/pull/18341), `@​JamesNK`)

- 🍃 **MongoDB.Driver updated to 3.9.0** — Removes a wrongly pinned
`SharpCompress` transitive dependency and uses the corrected `Snappier`
transitive. Fixes #​17981.
([#​18279](https://github.com/microsoft/aspire/pull/18279),
`@​Falco20019`)

### 🏷️ Housekeeping

- 🚀 Bumped branding to 13.4.6
([#​18343](https://github.com/microsoft/aspire/pull/18343))

---

_Full Changelog:
[v13.4.5...v13.4.6](https://github.com/microsoft/aspire/compare/v13.4.5...v13.4.6)_

_Full commit:
[87fe259e4fc244c599019a7b1304c85a1488f248](https://github.com/microsoft/aspire/commit/87fe259e4fc244c599019a7b1304c85a1488f248)_

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27855270514) ·
131 AIC · ⌖ 13.5 AIC · ⊞ 37.4K

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.60, model:
claude-sonnet-4.6, id: 27855270514, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27855270514 -->

## 13.4.5

## What's New in Aspire 13.4.5

Patch release for Aspire 13.4 clearing a transitive MessagePack security
advisory, tightening CLI validation for Playwright configuration, and
adding coding-agent detection to CLI telemetry.

### 🐛 Fixes

- 🛡️ **Bumped StreamJsonRpc to 2.25.29 to clear the MessagePack
GHSA-hv8m-jj95-wg3x (CVE-2026-48109) NU1903 advisory** — The transitive
MessagePack 2.5.192 dependency pulled in via StreamJsonRpc 2.22.23 fell
within the advisory's vulnerable LZ4 decompression range. Aspire does
not use `MessagePackFormatter` or LZ4 — all StreamJsonRpc calls use
`SystemTextJsonFormatter` over local Unix sockets — so the vulnerability
was not reachable in practice. The bump clears the NU1903 warning for
consumers of the `Aspire.Hosting` package.
([#​18204](https://github.com/microsoft/aspire/pull/18204),
`@​mitchdenny`)
- 🎭 **`playwrightCliVersion` values that are not valid SemVer 2.0 now
fail fast with a clear diagnostic** — Previously an invalid override
(range expression, dist-tag like `latest`, or a `v`-prefixed string)
would surface as a generic npm resolution failure. The value is now
validated with strict SemVer parsing at startup; an error naming the
configuration key and the offending value is emitted immediately.
([#​18205](https://github.com/microsoft/aspire/pull/18205),
`@​mitchdenny`)
- 🤖 **CLI telemetry now detects and reports the calling coding agent** —
When the Aspire CLI is invoked from inside a known coding agent
environment (GitHub Copilot CLI, VS Code Copilot agent, etc.) the agent
name is included in the main CLI telemetry event. GitHub Copilot CLI is
specifically identified as `copilot-cli`.
([#​18240](https://github.com/microsoft/aspire/pull/18240),
`@​damianedwards`)

### 🏷️ Housekeeping

- 📄 Refreshed the `@​microsoft/aspire-cli` npm package README to be
TypeScript-only — updated examples to the current `ts-starter` template
(`apphost.mts` / `aspire.mjs`), added a backing-services snippet showing
`aspire add` for PostgreSQL and Redis, and documented `aspire dashboard
run` as a standalone dashboard option.
([#​18221](https://github.com/microsoft/aspire/pull/18221), `@​adamint`)

---

_Full Changelog:
[v13.4.4...v13.4.5](https://github.com/microsoft/aspire/compare/v13.4.4...v13.4.5)_

_Full commit:
[73114e86c64aeb9f3f3c7da8e37df1ae4281b27e](https://github.com/microsoft/aspire/commit/73114e86c64aeb9f3f3c7da8e37df1ae4281b27e)_

> Generated by [Generate release notes for a new stable Aspire
release](https://github.com/microsoft/aspire/actions/runs/27667814104/agentic_workflow)
· ● 4.4M

<!-- gh-aw-agentic-workflow: Generate release notes for a new stable
Aspire release, engine: copilot, version: 1.0.40, model:
claude-sonnet-4.6, id: 27667814104, workflow_id: release-notes-generate,
run: https://github.com/microsoft/aspire/actions/runs/27667814104 -->

## 13.4.4

## What's New in Aspire 13.4.4

Patch release for Aspire 13.4 with improved DCP connection reliability
during request execution and consistent `ExcludeFromMcp()` filtering
across all CLI MCP tools.

### 🐛 Fixes

* 🔌 **DCP requests could fail permanently when the connection dropped
mid-request** — If the underlying DCP channel closed while a request was
in flight, the error was surfaced directly instead of being retried.
Reconnection is now attempted as part of the DCP request retry path so
transient disconnections recover automatically without surfacing errors.
([#​18096](https://github.com/microsoft/aspire/pull/18096),
`@​karolz-ms`)
* 🔍 **Resources marked with `ExcludeFromMcp()` were not consistently
filtered from CLI MCP tools** — Resources with the
`resource.excludeFromMcp` property were not excluded uniformly from all
CLI MCP tool results. `list_resources`, `list_console_logs`,
`execute_resource_command`, `list_structured_logs`, `list_traces`, and
`list_trace_structured_logs` all now honor the exclusion, preventing
excluded resources and their telemetry from appearing in agent context.
([#​18150](https://github.com/microsoft/aspire/pull/18150), `@​JamesNK`)

### 🏷️ Housekeeping

* 📦 Improved npm CLI package metadata and hardened npm publish
validation in the release pipeline.
([#​18093](https://github.com/microsoft/aspire/pull/18093),
`@​adamratzman`)

* * *

_Full Changelog:
[v13.4.3...v13.4.4](https://github.com/microsoft/aspire/compare/v13.4.3...v13.4.4)_

_Full commit:
[ccc566c5ab3285c9beb8f38ede34734bb477c029](https://github.com/microsoft/aspire/commit/ccc566c5ab3285c9beb8f38ede34734bb477c029)_


## 13.4.3

## What's New in Aspire 13.4.3

Patch release for Aspire 13.4 with a fix for persistent container
endpoint allocation regressions introduced in 13.4.

### 🐛 Fixes

- 🔌 **Persistent container endpoints had incorrect default behavior** —
Persistent containers were defaulting to proxyless endpoint behavior
instead of the proxied behavior used by normal containers. This caused
integrations that depend on endpoint allocation before resource startup
(such as the KeyVault emulator) to fail. Persistent containers now
default to proxied endpoints matching normal container behavior; opt out
with `isProxied: false` or `WithEndpointProxySupport(false)`. Proxyless
container endpoints with only …
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

4 participants