From e06edf9140210e81570d7fd230573b5b21bb7877 Mon Sep 17 00:00:00 2001 From: AJ Matthews Date: Wed, 12 Aug 2026 15:21:55 +0100 Subject: [PATCH 1/6] Ensured the use of polyglot is consistent and linked first uses to a definition in the glossary. --- src/frontend/src/content/docs/app-host/with-terminal.mdx | 2 +- .../src/content/docs/diagnostics/aspireexport010.mdx | 2 +- .../src/content/docs/diagnostics/aspireexport013.mdx | 2 +- .../src/content/docs/diagnostics/aspireexport015.mdx | 2 +- .../extensibility/multi-language-integration-authoring.mdx | 2 +- .../content/docs/get-started/add-aspire-existing-app.mdx | 2 +- .../content/docs/get-started/aspire-vscode-extension.mdx | 2 +- src/frontend/src/content/docs/get-started/faq.mdx | 2 +- src/frontend/src/content/docs/get-started/glossary.mdx | 6 ++++++ .../cloud/azure/azure-ai-foundry/azure-ai-foundry-host.mdx | 2 +- .../docs/integrations/cloud/azure/azure-log-analytics.mdx | 2 +- .../cloud/azure/azure-postgresql/azure-postgresql-host.mdx | 2 +- .../azure/azure-sql-database/azure-sql-database-host.mdx | 2 +- .../docs/integrations/cloud/azure/azure-virtual-network.mdx | 2 +- .../docs/integrations/databases/ravendb/ravendb-host.mdx | 2 +- .../integrations/databases/surrealdb/surrealdb-host.mdx | 2 +- .../src/content/docs/integrations/devtools/dev-tunnels.mdx | 2 +- .../docs/integrations/devtools/flagd/flagd-connect.mdx | 2 +- .../docs/integrations/devtools/flagd/flagd-get-started.mdx | 2 +- .../src/content/docs/integrations/frameworks/go/go-host.mdx | 2 +- .../extensibility/multi-language-integration-authoring.mdx | 2 ++ .../content/docs/reference/cli/commands/aspire-start.mdx | 2 +- .../src/content/docs/reference/cli/configuration.mdx | 2 +- .../docs/reference/cli/includes/config-settings-table.md | 2 +- src/frontend/src/content/docs/whats-new/aspire-13-3.mdx | 2 +- src/frontend/src/content/docs/whats-new/aspire-13-4.mdx | 2 +- 26 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/frontend/src/content/docs/app-host/with-terminal.mdx b/src/frontend/src/content/docs/app-host/with-terminal.mdx index 42b2860b7..9da27b0e4 100644 --- a/src/frontend/src/content/docs/app-host/with-terminal.mdx +++ b/src/frontend/src/content/docs/app-host/with-terminal.mdx @@ -118,7 +118,7 @@ await builder.build().run(); ``` diff --git a/src/frontend/src/content/docs/diagnostics/aspireexport010.mdx b/src/frontend/src/content/docs/diagnostics/aspireexport010.mdx index 1df6f51b7..28a8bddcd 100644 --- a/src/frontend/src/content/docs/diagnostics/aspireexport010.mdx +++ b/src/frontend/src/content/docs/diagnostics/aspireexport010.mdx @@ -13,7 +13,7 @@ import { Badge } from '@astrojs/starlight/components'; class:list={'mb-1'} /> -> Exported builder method '{0}' directly invokes synchronous delegate parameter '{1}'. Defer the callback, expose an async delegate, or set RunSyncOnBackgroundThread = true to avoid polyglot deadlocks. +> Exported builder method '{0}' directly invokes synchronous delegate parameter '{1}'. Defer the callback, expose an async delegate, or set RunSyncOnBackgroundThread = true to avoid [polyglot](/get-started/glossary/#polyglot) deadlocks. This diagnostic warning is reported when an `[AspireExport]` method directly invokes a synchronous delegate parameter inline, inside the method body. In a multi-language (polyglot) app host, callbacks crossing the language boundary are dispatched through an async messaging channel. If a synchronous callback is invoked inline, it can block the calling thread while the message dispatcher is also waiting on the same thread, causing a deadlock. To avoid this, the callback should be deferred, exposed as an async delegate, or run on a background thread. diff --git a/src/frontend/src/content/docs/diagnostics/aspireexport013.mdx b/src/frontend/src/content/docs/diagnostics/aspireexport013.mdx index ffcf1f8ca..4b9ca7c65 100644 --- a/src/frontend/src/content/docs/diagnostics/aspireexport013.mdx +++ b/src/frontend/src/content/docs/diagnostics/aspireexport013.mdx @@ -13,7 +13,7 @@ import { Badge } from '@astrojs/starlight/components'; class:list={'mb-1'} /> -> Polyglot capability ID '{0}' is defined by multiple exports in this assembly: {1}. Use unique AspireExport IDs for overloaded or colliding members. +> [Polyglot](/get-started/glossary/#polyglot) capability ID '{0}' is defined by multiple exports in this assembly: {1}. Use unique AspireExport IDs for overloaded or colliding members. This diagnostic warning is reported when two or more Aspire Type System (ATS) exports in the same assembly generate the same runtime capability ID. The capability ID is used to dispatch calls from TypeScript, Python, Java, and other AppHost runtimes back to the hosting integration. Unlike C# method signatures, a capability ID doesn't include the receiver type, parameter list, or overload signature, so exports that are distinct in C# can still collide at runtime. diff --git a/src/frontend/src/content/docs/diagnostics/aspireexport015.mdx b/src/frontend/src/content/docs/diagnostics/aspireexport015.mdx index cbaa12d27..468ff2445 100644 --- a/src/frontend/src/content/docs/diagnostics/aspireexport015.mdx +++ b/src/frontend/src/content/docs/diagnostics/aspireexport015.mdx @@ -13,7 +13,7 @@ import { Badge } from '@astrojs/starlight/components'; class:list={'mb-1'} /> -> AspireExport Description is compatibility metadata. Use XML documentation with ATS tags such as `` for generated polyglot SDK documentation. +> AspireExport Description is compatibility metadata. Use XML documentation with ATS tags such as `` for generated [polyglot](/get-started/glossary/#polyglot) SDK documentation. This diagnostic error is reported when a new `[AspireExport]` attribute sets the `Description` property. Starting in Aspire 13.4, the ATS scanner uses XML doc comments as the primary source for generated polyglot SDK documentation. The `Description` property is supported only as a compatibility fallback and should not be used on new exports. diff --git a/src/frontend/src/content/docs/extensibility/multi-language-integration-authoring.mdx b/src/frontend/src/content/docs/extensibility/multi-language-integration-authoring.mdx index 8d5b8cdda..d31d56ab8 100644 --- a/src/frontend/src/content/docs/extensibility/multi-language-integration-authoring.mdx +++ b/src/frontend/src/content/docs/extensibility/multi-language-integration-authoring.mdx @@ -119,7 +119,7 @@ XML doc comments are the primary source for generated SDK API documentation. The Use `ats-*` override tags when the standard C# XML documentation doesn't translate well to generated SDK docs — for example, when a `` references C#-specific types or language constructs that have no direct equivalent in TypeScript. The supported overrides are: -- `` — overrides `` in polyglot docs +- `` — overrides `` in [polyglot](/get-started/glossary/#polyglot) docs - `` — overrides `` for a specific parameter - `` — overrides `` - `` — overrides `` diff --git a/src/frontend/src/content/docs/get-started/add-aspire-existing-app.mdx b/src/frontend/src/content/docs/get-started/add-aspire-existing-app.mdx index 8886bbfc8..b19173d68 100644 --- a/src/frontend/src/content/docs/get-started/add-aspire-existing-app.mdx +++ b/src/frontend/src/content/docs/get-started/add-aspire-existing-app.mdx @@ -96,7 +96,7 @@ The AppHost is the orchestration layer. Your choice here changes how you express Aspire offers two C# AppHost styles: -**File-based AppHost** — a single `apphost.cs` file that uses `#:sdk` and `#:package` directives. No `.csproj`, no solution integration required. Best for polyglot repos or quick setups. +**File-based AppHost** — a single `apphost.cs` file that uses `#:sdk` and `#:package` directives. No `.csproj`, no solution integration required. Best for repos with [polyglot](/get-started/glossary/#polyglot) code or quick setups. **Project-based AppHost** — a traditional `AppHost.csproj` that lives inside a `.sln` alongside your other C# projects. Uses `ProjectReference` items and the generated `Projects` namespace for strongly-typed `AddProject()` calls. Best when your repo is already a .NET solution and you want IDE-integrated orchestration. diff --git a/src/frontend/src/content/docs/get-started/aspire-vscode-extension.mdx b/src/frontend/src/content/docs/get-started/aspire-vscode-extension.mdx index 35496a61b..08f114e75 100644 --- a/src/frontend/src/content/docs/get-started/aspire-vscode-extension.mdx +++ b/src/frontend/src/content/docs/get-started/aspire-vscode-extension.mdx @@ -14,7 +14,7 @@ import debugSessions from '@assets/get-started/code-extension-debug.png'; import debugSessionsLight from '@assets/get-started/code-extension-debug-light.png'; import { Kbd } from 'starlight-kbd/components'; -The official Aspire extension for [Visual Studio Code](https://code.visualstudio.com/) turns VS Code into a first-class environment for building, debugging, and shipping polyglot Aspire apps. +The official Aspire extension for [Visual Studio Code](https://code.visualstudio.com/) turns VS Code into a first-class environment for building, debugging, and shipping C# and [polyglot](/get-started/glossary/#polyglot) Aspire apps. Press to build your AppHost, start your resources, and debug supported resource types — C#, TypeScript, Python, browser apps, and Azure Functions — alongside the Aspire dashboard. :::note[Prerequisites] diff --git a/src/frontend/src/content/docs/get-started/faq.mdx b/src/frontend/src/content/docs/get-started/faq.mdx index ecb50e2fa..7b72b775c 100644 --- a/src/frontend/src/content/docs/get-started/faq.mdx +++ b/src/frontend/src/content/docs/get-started/faq.mdx @@ -10,7 +10,7 @@ This page answers common questions about what Aspire is, how it fits into your w Aspire is an agent-ready, code-first tool to compose, debug, and deploy any distributed app. It makes it easier to build, run, debug, and deploy services across any language, stack, or cloud. It's free and open source at [github.com/microsoft/aspire](https://github.com/microsoft/aspire). -Its central idea is the **AppHost**: the place where you declare your services, resources, dependencies, endpoints, parameters, and relationships in code instead of scattering that information across many config files. AppHosts can be written in **C# or TypeScript**, which makes Aspire a strong fit for polyglot teams. +Its central idea is the **AppHost**: the place where you declare your services, resources, dependencies, endpoints, parameters, and relationships in code instead of scattering that information across many config files. AppHosts can be written in **C# or TypeScript**, which makes Aspire a strong fit for teams that use [polyglot](/get-started/glossary/#polyglot) code. Learn more: [Build your first Aspire app](/get-started/first-app/) diff --git a/src/frontend/src/content/docs/get-started/glossary.mdx b/src/frontend/src/content/docs/get-started/glossary.mdx index 332b575ec..8cbe7f47b 100644 --- a/src/frontend/src/content/docs/get-started/glossary.mdx +++ b/src/frontend/src/content/docs/get-started/glossary.mdx @@ -72,6 +72,12 @@ Aspire helps you orchestrate all these pieces together. When you add `builder.AddServiceDefaults()` to a project, you get production-ready observability and resilience out of the box. +### Polyglot + +In this repository, **polyglot** means relating to code written in any language other than C#. + +Examples include TypeScript, Python, Go, Java, and Rust code as used in AppHosts, generated SDKs, or related tooling. + --- ## APIs and patterns diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-foundry/azure-ai-foundry-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-foundry/azure-ai-foundry-host.mdx index db94a7994..f414a1bb6 100644 --- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-foundry/azure-ai-foundry-host.mdx +++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-foundry/azure-ai-foundry-host.mdx @@ -861,7 +861,7 @@ builder.AddFoundry("foundry") TypeScript AppHosts can use curated provisioning helper APIs when an integration exposes them. This example directly customizes Azure.Provisioning objects through `ConfigureInfrastructure`, which is currently C#-only unless - the integration wraps the scenario in a polyglot-friendly helper. + the integration wraps the scenario in a [polyglot](/get-started/glossary/#polyglot)-friendly helper. The preceding code: diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-log-analytics.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-log-analytics.mdx index 40d437b04..95da2c645 100644 --- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-log-analytics.mdx +++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-log-analytics.mdx @@ -232,7 +232,7 @@ var appInsights = builder.AddAzureApplicationInsights("app-insights", logAnalyti TypeScript AppHosts can use curated provisioning helper APIs when an integration exposes them. This example directly customizes Azure.Provisioning objects through `ConfigureInfrastructure`, which is currently C#-only unless - the integration wraps the scenario in a polyglot-friendly helper. + the integration wraps the scenario in a [polyglot](/get-started/glossary/#polyglot)-friendly helper. The preceding code: diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-postgresql/azure-postgresql-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-postgresql/azure-postgresql-host.mdx index b17ad7c81..e891bea61 100644 --- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-postgresql/azure-postgresql-host.mdx +++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-postgresql/azure-postgresql-host.mdx @@ -483,7 +483,7 @@ builder.Build().Run(); TypeScript AppHosts can use curated provisioning helper APIs when an integration exposes them. This example directly customizes Azure.Provisioning objects through `ConfigureInfrastructure`, which is currently C#-only unless - the integration wraps the scenario in a polyglot-friendly helper. + the integration wraps the scenario in a [polyglot](/get-started/glossary/#polyglot)-friendly helper. The preceding code: diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-sql-database/azure-sql-database-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-sql-database/azure-sql-database-host.mdx index e36f2d7f0..c6ee296cd 100644 --- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-sql-database/azure-sql-database-host.mdx +++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-sql-database/azure-sql-database-host.mdx @@ -340,7 +340,7 @@ builder.Build().Run(); TypeScript AppHosts can use curated provisioning helper APIs when an integration exposes them. This example directly customizes Azure.Provisioning objects through `ConfigureInfrastructure`, which is currently C#-only unless - the integration wraps the scenario in a polyglot-friendly helper. + the integration wraps the scenario in a [polyglot](/get-started/glossary/#polyglot)-friendly helper. The preceding code: diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-virtual-network.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-virtual-network.mdx index 85922c879..c09d94ecd 100644 --- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-virtual-network.mdx +++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-virtual-network.mdx @@ -490,7 +490,7 @@ storage.ConfigureInfrastructure(infra => TypeScript AppHosts can use curated provisioning helper APIs when an integration exposes them. This example directly customizes Azure.Provisioning objects through `ConfigureInfrastructure`, which is currently C#-only unless - the integration wraps the scenario in a polyglot-friendly helper. + the integration wraps the scenario in a [polyglot](/get-started/glossary/#polyglot)-friendly helper. #### Service-specific requirements diff --git a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx index ce246363d..1f5e287ce 100644 --- a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx @@ -353,7 +353,7 @@ builder.Build().Run(); ## Connection properties diff --git a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx index 83c43a98b..874e94e7b 100644 --- a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx @@ -323,7 +323,7 @@ await builder.build().run(); -The `WithLogLevel` method enables verbose logging in the SurrealDB container, which is useful during development and debugging. The polyglot TypeScript AppHost accepts the log level as a string (for example, `"Trace"`, `"Debug"`, `"Information"`, `"Warning"`, `"Error"`, `"Critical"`, or `"None"`). +The `WithLogLevel` method enables verbose logging in the SurrealDB container, which is useful during development and debugging. The [polyglot](/get-started/glossary/#polyglot) TypeScript AppHost accepts the log level as a string (for example, `"Trace"`, `"Debug"`, `"Information"`, `"Warning"`, `"Error"`, `"Critical"`, or `"None"`). ## Health checks diff --git a/src/frontend/src/content/docs/integrations/devtools/dev-tunnels.mdx b/src/frontend/src/content/docs/integrations/devtools/dev-tunnels.mdx index 28ab0d978..b88f3db3c 100644 --- a/src/frontend/src/content/docs/integrations/devtools/dev-tunnels.mdx +++ b/src/frontend/src/content/docs/integrations/devtools/dev-tunnels.mdx @@ -244,7 +244,7 @@ The `DevTunnelOptions` class provides several configuration options: | `Region` | The `DevTunnelRegion` to create the tunnel in; automatic when unset | diff --git a/src/frontend/src/content/docs/integrations/devtools/flagd/flagd-connect.mdx b/src/frontend/src/content/docs/integrations/devtools/flagd/flagd-connect.mdx index bbb448aef..05529a58f 100644 --- a/src/frontend/src/content/docs/integrations/devtools/flagd/flagd-connect.mdx +++ b/src/frontend/src/content/docs/integrations/devtools/flagd/flagd-connect.mdx @@ -239,7 +239,7 @@ For more information, see the [OpenFeature JavaScript SDK](https://openfeature.d ## Use OFREP provider -As an alternative to the native provider, you can connect to flagd using the [OFREP (OpenFeature Remote Evaluation Protocol)](https://openfeature.dev/specification/appendix-c/). OFREP is a standardized HTTP/REST-based protocol for remote feature flag evaluation, making it language-agnostic and well-suited for polyglot environments. +As an alternative to the native provider, you can connect to flagd using the [OFREP (OpenFeature Remote Evaluation Protocol)](https://openfeature.dev/specification/appendix-c/). OFREP is a standardized HTTP/REST-based protocol for remote feature flag evaluation, making it language-agnostic and well-suited for [polyglot](/get-started/glossary/#polyglot) environments. ### Install the OFREP provider diff --git a/src/frontend/src/content/docs/integrations/devtools/flagd/flagd-get-started.mdx b/src/frontend/src/content/docs/integrations/devtools/flagd/flagd-get-started.mdx index 12ffe55c0..d609c70a7 100644 --- a/src/frontend/src/content/docs/integrations/devtools/flagd/flagd-get-started.mdx +++ b/src/frontend/src/content/docs/integrations/devtools/flagd/flagd-get-started.mdx @@ -89,7 +89,7 @@ Getting there is a two-step process: model the flagd resource in your AppHost, t diff --git a/src/frontend/src/content/docs/integrations/frameworks/go/go-host.mdx b/src/frontend/src/content/docs/integrations/frameworks/go/go-host.mdx index 2c5ffc326..fc548c912 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/go/go-host.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/go/go-host.mdx @@ -511,7 +511,7 @@ await builder.build().run(); ## Experimental Go AppHost templates -The `Aspire.Hosting.Go` integration can be used from C# and TypeScript AppHosts. Aspire also includes experimental Go AppHost and Go starter template support in the Aspire CLI. The Go AppHost templates use experimental Go AppHost APIs instead of the `Aspire.Hosting.Go` package. To enable Go AppHost language support for CLI templates, enable the Go polyglot feature flag: +The `Aspire.Hosting.Go` integration can be used from C# and TypeScript AppHosts. Aspire also includes experimental Go AppHost and Go starter template support in the Aspire CLI. The Go AppHost templates use experimental Go AppHost APIs instead of the `Aspire.Hosting.Go` package. To enable Go AppHost language support for CLI templates, enable the Go [polyglot](/get-started/glossary/#polyglot) feature flag: ```bash title="Aspire CLI" aspire config set features:experimentalPolyglot:go true --global diff --git a/src/frontend/src/content/docs/ja/extensibility/multi-language-integration-authoring.mdx b/src/frontend/src/content/docs/ja/extensibility/multi-language-integration-authoring.mdx index ad493fe90..9b4d19f51 100644 --- a/src/frontend/src/content/docs/ja/extensibility/multi-language-integration-authoring.mdx +++ b/src/frontend/src/content/docs/ja/extensibility/multi-language-integration-authoring.mdx @@ -223,6 +223,8 @@ TypeScript 側で値を一度読み取る async 操作として扱いたい場 2. TypeScript 呼び出し元に必要なプロパティだけを個別の `[AspireExport]` 属性で注釈します。 3. 可変状態(環境変数、コマンド ライン引数、URL リスト)には、生のコレクションではなく小さな *editor* クラスを公開します。 +このドキュメントで使う [polyglot](/get-started/glossary/#polyglot) は、C# 以外の言語で書かれたコードを指します。 + ### editor クラスを定義する editor は可変コレクションをラップし、生のコレクションを TypeScript に渡す代わりに、通常は `add`、`set`、`remove` などの特定操作を公開します: diff --git a/src/frontend/src/content/docs/reference/cli/commands/aspire-start.mdx b/src/frontend/src/content/docs/reference/cli/commands/aspire-start.mdx index cebe7a17d..146104d20 100644 --- a/src/frontend/src/content/docs/reference/cli/commands/aspire-start.mdx +++ b/src/frontend/src/content/docs/reference/cli/commands/aspire-start.mdx @@ -27,7 +27,7 @@ You can output detached startup details as a table or JSON, and you can pass add ### Startup readiness and failure diagnostics -`aspire start` waits for the AppHost to report that it has reached a stable running state before detaching. This means that early startup failures — such as TypeScript syntax errors in a polyglot AppHost or C# compile errors in a .NET AppHost — are surfaced in the parent terminal instead of being silently lost in the background. +`aspire start` waits for the AppHost to report that it has reached a stable running state before detaching. This means that early startup failures — such as TypeScript syntax errors in a [polyglot](/get-started/glossary/#polyglot) AppHost or C# compile errors in a .NET AppHost — are surfaced in the parent terminal instead of being silently lost in the background. When the AppHost fails to start, `aspire start` displays a curated excerpt of the startup output that filters out noise such as package install logs and highlights the relevant error messages: diff --git a/src/frontend/src/content/docs/reference/cli/configuration.mdx b/src/frontend/src/content/docs/reference/cli/configuration.mdx index 9dbc489cc..a871c9421 100644 --- a/src/frontend/src/content/docs/reference/cli/configuration.mdx +++ b/src/frontend/src/content/docs/reference/cli/configuration.mdx @@ -163,7 +163,7 @@ CLI supports. aspire config set features. true --global ``` - For example, consider the following that enables global support for Go: + For example, consider the following that enables global [polyglot](/get-started/glossary/#polyglot) support for Go: ```bash title="Enable global polyglot Go support" aspire config set features:experimentalPolyglot:go true diff --git a/src/frontend/src/content/docs/reference/cli/includes/config-settings-table.md b/src/frontend/src/content/docs/reference/cli/includes/config-settings-table.md index 4a5e3d22c..2c16f227d 100644 --- a/src/frontend/src/content/docs/reference/cli/includes/config-settings-table.md +++ b/src/frontend/src/content/docs/reference/cli/includes/config-settings-table.md @@ -7,7 +7,7 @@ title: Config Settings Table | `appHost.path` | `appHost.path` | Project-scoped path to the default AppHost entry point. This setting must be configured in the local `aspire.config.json` file. | | `channel` | `channel` | Default Aspire channel used by channel-aware commands such as `aspire new`, `aspire init`, and `aspire update`. | | `features.defaultWatchEnabled` | `features.defaultWatchEnabled` | Enable or disable watch mode by default when running Aspire applications for automatic restarts on file changes. | -| `features.experimentalPolyglot:go` | `features.experimentalPolyglot:go` | Enable or disable experimental Go language support for polyglot Aspire applications. | +| `features.experimentalPolyglot:go` | `features.experimentalPolyglot:go` | Enable or disable experimental Go language support for [polyglot](/get-started/glossary/#polyglot) Aspire applications. | | `features.experimentalPolyglot:java` | `features.experimentalPolyglot:java` | Enable or disable experimental Java language support for polyglot Aspire applications. | | `features.experimentalPolyglot:python` | `features.experimentalPolyglot:python` | Enable or disable experimental Python language support for polyglot Aspire applications. | | `features.experimentalPolyglot:rust` | `features.experimentalPolyglot:rust` | Enable or disable experimental Rust language support for polyglot Aspire applications. | diff --git a/src/frontend/src/content/docs/whats-new/aspire-13-3.mdx b/src/frontend/src/content/docs/whats-new/aspire-13-3.mdx index 81d84da79..188ba6d1d 100644 --- a/src/frontend/src/content/docs/whats-new/aspire-13-3.mdx +++ b/src/frontend/src/content/docs/whats-new/aspire-13-3.mdx @@ -696,7 +696,7 @@ Aspire 13.3 closes most of the remaining functional gap between C# AppHosts and ### Unified `withEnvironment` API -Aspire 13.3 introduces a unified `withEnvironment(name, value)` API for polyglot AppHosts (TypeScript, Java, Python, Go, Rust). The public TypeScript API accepts plain strings, reference expressions, endpoint references, parameter resources, supported resources that expose connection strings, expression values, and awaitable forms of supported values: +Aspire 13.3 introduces a unified `withEnvironment(name, value)` API for [polyglot](/get-started/glossary/#polyglot) AppHosts (TypeScript, Java, Python, Go, Rust). The public TypeScript API accepts plain strings, reference expressions, endpoint references, parameter resources, supported resources that expose connection strings, expression values, and awaitable forms of supported values: ```typescript title="apphost.mts" const primaryEndpoint = await cache.primaryEndpoint(); diff --git a/src/frontend/src/content/docs/whats-new/aspire-13-4.mdx b/src/frontend/src/content/docs/whats-new/aspire-13-4.mdx index 383983191..e80ffaabb 100644 --- a/src/frontend/src/content/docs/whats-new/aspire-13-4.mdx +++ b/src/frontend/src/content/docs/whats-new/aspire-13-4.mdx @@ -140,7 +140,7 @@ Aspire 13.4 validates TypeScript AppHosts before startup, so type-checking and c Docs now include TypeScript examples alongside C# where the API is available, and the release adds TypeScript samples you can start from. -The [Aspire Type System (ATS)](/extensibility/multi-language-integration-authoring/) APIs that power polyglot AppHost authoring are now generally available, so projects can remove `ASPIREATS001` suppressions. The generated TypeScript SDK also adds C# XML-doc JSDoc, fluent async method chaining, `ExternalServiceResource` support in `withEnvironment`, and fixes for generated names and exports. +The [Aspire Type System (ATS)](/extensibility/multi-language-integration-authoring/) APIs that power [polyglot](/get-started/glossary/#polyglot) AppHost authoring are now generally available, so projects can remove `ASPIREATS001` suppressions. The generated TypeScript SDK also adds C# XML-doc JSDoc, fluent async method chaining, `ExternalServiceResource` support in `withEnvironment`, and fixes for generated names and exports. Existing TypeScript AppHosts scaffolded by earlier CLI versions continue to work on 13.4 without changes. If your project uses `apphost.ts` and `./.modules/aspire.js`, see [Legacy `apphost.ts` projects (pre-13.4)](#legacy-apphostts-projects-pre-134) for compatibility details and an opt-in migration to the new `apphost.mts` layout. From 93090c94e00494e8e80a0e082267be24835a024c Mon Sep 17 00:00:00 2001 From: AJ Matthews Date: Wed, 12 Aug 2026 16:18:52 +0100 Subject: [PATCH 2/6] Addressed feedback from @Copilot. --- src/frontend/src/content/docs/diagnostics/aspireexport010.mdx | 2 +- src/frontend/src/content/docs/diagnostics/aspireexport013.mdx | 2 +- src/frontend/src/content/docs/diagnostics/aspireexport015.mdx | 2 +- src/frontend/src/content/docs/reference/cli/configuration.mdx | 2 +- .../docs/reference/cli/includes/config-settings-table.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/frontend/src/content/docs/diagnostics/aspireexport010.mdx b/src/frontend/src/content/docs/diagnostics/aspireexport010.mdx index 28a8bddcd..1df6f51b7 100644 --- a/src/frontend/src/content/docs/diagnostics/aspireexport010.mdx +++ b/src/frontend/src/content/docs/diagnostics/aspireexport010.mdx @@ -13,7 +13,7 @@ import { Badge } from '@astrojs/starlight/components'; class:list={'mb-1'} /> -> Exported builder method '{0}' directly invokes synchronous delegate parameter '{1}'. Defer the callback, expose an async delegate, or set RunSyncOnBackgroundThread = true to avoid [polyglot](/get-started/glossary/#polyglot) deadlocks. +> Exported builder method '{0}' directly invokes synchronous delegate parameter '{1}'. Defer the callback, expose an async delegate, or set RunSyncOnBackgroundThread = true to avoid polyglot deadlocks. This diagnostic warning is reported when an `[AspireExport]` method directly invokes a synchronous delegate parameter inline, inside the method body. In a multi-language (polyglot) app host, callbacks crossing the language boundary are dispatched through an async messaging channel. If a synchronous callback is invoked inline, it can block the calling thread while the message dispatcher is also waiting on the same thread, causing a deadlock. To avoid this, the callback should be deferred, exposed as an async delegate, or run on a background thread. diff --git a/src/frontend/src/content/docs/diagnostics/aspireexport013.mdx b/src/frontend/src/content/docs/diagnostics/aspireexport013.mdx index 4b9ca7c65..ffcf1f8ca 100644 --- a/src/frontend/src/content/docs/diagnostics/aspireexport013.mdx +++ b/src/frontend/src/content/docs/diagnostics/aspireexport013.mdx @@ -13,7 +13,7 @@ import { Badge } from '@astrojs/starlight/components'; class:list={'mb-1'} /> -> [Polyglot](/get-started/glossary/#polyglot) capability ID '{0}' is defined by multiple exports in this assembly: {1}. Use unique AspireExport IDs for overloaded or colliding members. +> Polyglot capability ID '{0}' is defined by multiple exports in this assembly: {1}. Use unique AspireExport IDs for overloaded or colliding members. This diagnostic warning is reported when two or more Aspire Type System (ATS) exports in the same assembly generate the same runtime capability ID. The capability ID is used to dispatch calls from TypeScript, Python, Java, and other AppHost runtimes back to the hosting integration. Unlike C# method signatures, a capability ID doesn't include the receiver type, parameter list, or overload signature, so exports that are distinct in C# can still collide at runtime. diff --git a/src/frontend/src/content/docs/diagnostics/aspireexport015.mdx b/src/frontend/src/content/docs/diagnostics/aspireexport015.mdx index 468ff2445..cbaa12d27 100644 --- a/src/frontend/src/content/docs/diagnostics/aspireexport015.mdx +++ b/src/frontend/src/content/docs/diagnostics/aspireexport015.mdx @@ -13,7 +13,7 @@ import { Badge } from '@astrojs/starlight/components'; class:list={'mb-1'} /> -> AspireExport Description is compatibility metadata. Use XML documentation with ATS tags such as `` for generated [polyglot](/get-started/glossary/#polyglot) SDK documentation. +> AspireExport Description is compatibility metadata. Use XML documentation with ATS tags such as `` for generated polyglot SDK documentation. This diagnostic error is reported when a new `[AspireExport]` attribute sets the `Description` property. Starting in Aspire 13.4, the ATS scanner uses XML doc comments as the primary source for generated polyglot SDK documentation. The `Description` property is supported only as a compatibility fallback and should not be used on new exports. diff --git a/src/frontend/src/content/docs/reference/cli/configuration.mdx b/src/frontend/src/content/docs/reference/cli/configuration.mdx index a871c9421..ba16aaa0e 100644 --- a/src/frontend/src/content/docs/reference/cli/configuration.mdx +++ b/src/frontend/src/content/docs/reference/cli/configuration.mdx @@ -163,7 +163,7 @@ CLI supports. aspire config set features. true --global ``` - For example, consider the following that enables global [polyglot](/get-started/glossary/#polyglot) support for Go: + For example, consider the following that enables global [polyglot](/get-started/glossary/#polyglot) support for Go: ```bash title="Enable global polyglot Go support" aspire config set features:experimentalPolyglot:go true diff --git a/src/frontend/src/content/docs/reference/cli/includes/config-settings-table.md b/src/frontend/src/content/docs/reference/cli/includes/config-settings-table.md index 2c16f227d..d52ec779c 100644 --- a/src/frontend/src/content/docs/reference/cli/includes/config-settings-table.md +++ b/src/frontend/src/content/docs/reference/cli/includes/config-settings-table.md @@ -7,7 +7,7 @@ title: Config Settings Table | `appHost.path` | `appHost.path` | Project-scoped path to the default AppHost entry point. This setting must be configured in the local `aspire.config.json` file. | | `channel` | `channel` | Default Aspire channel used by channel-aware commands such as `aspire new`, `aspire init`, and `aspire update`. | | `features.defaultWatchEnabled` | `features.defaultWatchEnabled` | Enable or disable watch mode by default when running Aspire applications for automatic restarts on file changes. | -| `features.experimentalPolyglot:go` | `features.experimentalPolyglot:go` | Enable or disable experimental Go language support for [polyglot](/get-started/glossary/#polyglot) Aspire applications. | +| `features.experimentalPolyglot:go` | `features.experimentalPolyglot:go` | Enable or disable experimental Go language support for [polyglot](/get-started/glossary/#polyglot) Aspire applications. | | `features.experimentalPolyglot:java` | `features.experimentalPolyglot:java` | Enable or disable experimental Java language support for polyglot Aspire applications. | | `features.experimentalPolyglot:python` | `features.experimentalPolyglot:python` | Enable or disable experimental Python language support for polyglot Aspire applications. | | `features.experimentalPolyglot:rust` | `features.experimentalPolyglot:rust` | Enable or disable experimental Rust language support for polyglot Aspire applications. | From 9d0082027488a9009680872dde4916c64e7b603f Mon Sep 17 00:00:00 2001 From: AJ Matthews Date: Thu, 13 Aug 2026 12:01:53 +0100 Subject: [PATCH 3/6] Added TypeScript examples to all C# examples in the Glossary. --- .../src/content/docs/get-started/glossary.mdx | 97 +++++++++++++++++-- 1 file changed, 88 insertions(+), 9 deletions(-) diff --git a/src/frontend/src/content/docs/get-started/glossary.mdx b/src/frontend/src/content/docs/get-started/glossary.mdx index 8cbe7f47b..e37a383de 100644 --- a/src/frontend/src/content/docs/get-started/glossary.mdx +++ b/src/frontend/src/content/docs/get-started/glossary.mdx @@ -4,6 +4,8 @@ description: Key terms and concepts used throughout Aspire documentation — App --- import { Aside } from '@astrojs/starlight/components'; +import PivotSelector from '@components/PivotSelector.astro'; +import Pivot from '@components/Pivot.astro'; This glossary defines the key terms and concepts you'll encounter when working with Aspire. Bookmark this page as a quick reference. @@ -13,16 +15,27 @@ These are the foundational concepts you need to understand when working with Asp ### AppHost -The **AppHost** is the orchestration project where you define your entire application's architecture in C# code. It's a special Aspire project that: +The **AppHost** is the orchestration project where you define your entire application's architecture. It's a special Aspire project that: -- Declares what services, databases, and containers make up your application -- Defines how resources depend on each other -- Configures how resources communicate -- Orchestrates startup order during local development -- Generates deployment artifacts for production +- Declares what services, databases, and containers make up your application. +- Defines how resources depend on each other. +- Configures how resources communicate. +- Orchestrates startup order during local development. +- Generates deployment artifacts for production. Think of it as the "control tower" for your distributed application. + + + ```csharp title="AppHost.cs" // This IS the AppHost - Program.cs in your AppHost project var builder = DistributedApplication.CreateBuilder(args); @@ -33,6 +46,21 @@ var api = builder.AddProject("api") builder.Build().Run(); ``` + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +// This IS the AppHost in a TypeScript project +const builder = await createBuilder(); + +const db = await builder.addPostgres("db"); +await builder.addProject("api", "../Api/Api.csproj") + .withReference(db); + +await builder.build().run(); +``` + ### Resource @@ -92,11 +120,20 @@ These are the key APIs and patterns you'll use when building Aspire applications 2. Sets up service discovery so your code can find the other resource 3. Creates a dependency relationship for startup ordering + ```csharp title="AppHost.cs" var db = builder.AddPostgres("db"); var api = builder.AddProject("api") .WithReference(db); // API now has DATABASE connection info injected ``` + + +```typescript title="apphost.mts" +const db = await builder.addPostgres("db"); +await builder.addProject("api", "../Api/Api.csproj") + .withReference(db); // API now has DATABASE connection info injected +``` + The API project will receive environment variables like: - `ConnectionStrings__db` - The database connection string @@ -104,38 +141,66 @@ The API project will receive environment variables like: ### WaitFor -`WaitFor()` tells Aspire to delay starting a resource until its dependency is ready: +`WaitFor()`/`waitFor()` tells Aspire to delay starting a resource until its dependency is ready: + ```csharp title="AppHost.cs" var db = builder.AddPostgres("db"); var api = builder.AddProject("api") .WithReference(db) .WaitFor(db); // Don't start API until database is healthy ``` + + +```typescript title="apphost.mts" +const db = await builder.addPostgres("db"); +await builder.addProject("api", "../Api/Api.csproj") + .withReference(db) + .waitFor(db); // Don't start API until database is healthy +``` + ### WaitForCompletion `WaitForCompletion()` waits for a resource to finish and exit (not just start). Useful for setup scripts: + ```csharp title="AppHost.cs" var migrate = builder.AddProject("migrate"); var api = builder.AddProject("api") .WaitForCompletion(migrate); // Wait for migrations to complete ``` + + +```typescript title="apphost.mts" +const migrate = await builder.addProject("migrate", "../DbMigration/DbMigration.csproj"); +await builder.addProject("api", "../Api/Api.csproj") + .waitForCompletion(migrate); // Wait for migrations to complete +``` + ### WaitForStart `WaitForStart()` waits only for a resource to reach the running state, without waiting for health checks to pass: + ```csharp title="AppHost.cs" var db = builder.AddPostgres("db"); var api = builder.AddProject("api") .WaitForStart(db); // Start as soon as db is running, don't wait for healthy ``` + + +```typescript title="apphost.mts" +const db = await builder.addPostgres("db"); +await builder.addProject("api", "../Api/Api.csproj") + .waitForStart(db); // Start as soon as db is running, don't wait for healthy +``` + ## Connection properties diff --git a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx index 874e94e7b..5811d0e58 100644 --- a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx @@ -323,7 +323,7 @@ await builder.build().run(); -The `WithLogLevel` method enables verbose logging in the SurrealDB container, which is useful during development and debugging. The [polyglot](/get-started/glossary/#polyglot) TypeScript AppHost accepts the log level as a string (for example, `"Trace"`, `"Debug"`, `"Information"`, `"Warning"`, `"Error"`, `"Critical"`, or `"None"`). +The `WithLogLevel` method enables verbose logging in the SurrealDB container, which is useful during development and debugging. The non-C# TypeScript AppHost accepts the log level as a string (for example, `"Trace"`, `"Debug"`, `"Information"`, `"Warning"`, `"Error"`, `"Critical"`, or `"None"`). ## Health checks diff --git a/src/frontend/src/content/docs/integrations/devtools/dev-tunnels.mdx b/src/frontend/src/content/docs/integrations/devtools/dev-tunnels.mdx index b88f3db3c..64e2804f5 100644 --- a/src/frontend/src/content/docs/integrations/devtools/dev-tunnels.mdx +++ b/src/frontend/src/content/docs/integrations/devtools/dev-tunnels.mdx @@ -244,7 +244,7 @@ The `DevTunnelOptions` class provides several configuration options: | `Region` | The `DevTunnelRegion` to create the tunnel in; automatic when unset | diff --git a/src/frontend/src/content/docs/reference/cli/commands/aspire-start.mdx b/src/frontend/src/content/docs/reference/cli/commands/aspire-start.mdx index 146104d20..eef13509b 100644 --- a/src/frontend/src/content/docs/reference/cli/commands/aspire-start.mdx +++ b/src/frontend/src/content/docs/reference/cli/commands/aspire-start.mdx @@ -27,7 +27,7 @@ You can output detached startup details as a table or JSON, and you can pass add ### Startup readiness and failure diagnostics -`aspire start` waits for the AppHost to report that it has reached a stable running state before detaching. This means that early startup failures — such as TypeScript syntax errors in a [polyglot](/get-started/glossary/#polyglot) AppHost or C# compile errors in a .NET AppHost — are surfaced in the parent terminal instead of being silently lost in the background. +`aspire start` waits for the AppHost to report that it has reached a stable running state before detaching. This means that early startup failures — such as TypeScript syntax errors in a non-C# AppHost or C# compile errors in a .NET AppHost — are surfaced in the parent terminal instead of being silently lost in the background. When the AppHost fails to start, `aspire start` displays a curated excerpt of the startup output that filters out noise such as package install logs and highlights the relevant error messages: diff --git a/src/frontend/src/content/docs/reference/cli/configuration.mdx b/src/frontend/src/content/docs/reference/cli/configuration.mdx index ba16aaa0e..bce8d59be 100644 --- a/src/frontend/src/content/docs/reference/cli/configuration.mdx +++ b/src/frontend/src/content/docs/reference/cli/configuration.mdx @@ -163,9 +163,9 @@ CLI supports. aspire config set features. true --global ``` - For example, consider the following that enables global [polyglot](/get-started/glossary/#polyglot) support for Go: + For example, consider the following that enables global support for Go: - ```bash title="Enable global polyglot Go support" + ```bash title="Enable global Go support" aspire config set features:experimentalPolyglot:go true ``` diff --git a/src/frontend/src/content/docs/reference/cli/includes/config-settings-table.md b/src/frontend/src/content/docs/reference/cli/includes/config-settings-table.md index 0ec3c763c..2f5179b46 100644 --- a/src/frontend/src/content/docs/reference/cli/includes/config-settings-table.md +++ b/src/frontend/src/content/docs/reference/cli/includes/config-settings-table.md @@ -7,10 +7,10 @@ title: Config Settings Table | `appHost.path` | `appHost.path` | Project-scoped path to the default AppHost entry point. This setting must be configured in the local `aspire.config.json` file. | | `channel` | `channel` | Default Aspire channel used by channel-aware commands such as `aspire new`, `aspire init`, and `aspire update`. | | `features.defaultWatchEnabled` | `features.defaultWatchEnabled` | Enable or disable watch mode by default when running Aspire applications for automatic restarts on file changes. | -| `features.experimentalPolyglot:go` | `features.experimentalPolyglot:go` | Enable or disable experimental Go language support for [polyglot](/get-started/glossary/#polyglot) Aspire applications. | -| `features.experimentalPolyglot:java` | `features.experimentalPolyglot:java` | Enable or disable experimental Java language support for polyglot Aspire applications. | -| `features.experimentalPolyglot:python` | `features.experimentalPolyglot:python` | Enable or disable experimental Python language support for polyglot Aspire applications. | -| `features.experimentalPolyglot:rust` | `features.experimentalPolyglot:rust` | Enable or disable experimental Rust language support for polyglot Aspire applications. | +| `features.experimentalPolyglot:go` | `features.experimentalPolyglot:go` | Enable or disable experimental Go language support for non-C# Aspire applications. | +| `features.experimentalPolyglot:java` | `features.experimentalPolyglot:java` | Enable or disable experimental Java language support for non-C# Aspire applications. | +| `features.experimentalPolyglot:python` | `features.experimentalPolyglot:python` | Enable or disable experimental Python language support for non-C# Aspire applications. | +| `features.experimentalPolyglot:rust` | `features.experimentalPolyglot:rust` | Enable or disable experimental Rust language support for non-C# Aspire applications. | | `features.polyglotIntegrationFilterEnabled` | `features.polyglotIntegrationFilterEnabled` | Enable or disable filtering `aspire add`, `aspire integration list`, and `aspire integration search` results to only integrations compatible with a non-C# AppHost. Disabled by default because remote NuGet feeds don't reliably answer the `tags:polyglot` query used to build the compatibility allow-list. | | `features.showAllTemplates` | `features.showAllTemplates` | Show all available templates, including experimental ones, in `aspire new` and `aspire init`. | | `features.showDeprecatedPackages` | `features.showDeprecatedPackages` | Show or hide deprecated packages in `aspire add` search results. | diff --git a/src/frontend/src/content/docs/whats-new/aspire-13-4.mdx b/src/frontend/src/content/docs/whats-new/aspire-13-4.mdx index e80ffaabb..b49d04dc9 100644 --- a/src/frontend/src/content/docs/whats-new/aspire-13-4.mdx +++ b/src/frontend/src/content/docs/whats-new/aspire-13-4.mdx @@ -140,12 +140,12 @@ Aspire 13.4 validates TypeScript AppHosts before startup, so type-checking and c Docs now include TypeScript examples alongside C# where the API is available, and the release adds TypeScript samples you can start from. -The [Aspire Type System (ATS)](/extensibility/multi-language-integration-authoring/) APIs that power [polyglot](/get-started/glossary/#polyglot) AppHost authoring are now generally available, so projects can remove `ASPIREATS001` suppressions. The generated TypeScript SDK also adds C# XML-doc JSDoc, fluent async method chaining, `ExternalServiceResource` support in `withEnvironment`, and fixes for generated names and exports. +The [Aspire Type System (ATS)](/extensibility/multi-language-integration-authoring/) APIs that power non-C# AppHost authoring are now generally available, so projects can remove `ASPIREATS001` suppressions. The generated TypeScript SDK also adds C# XML-doc JSDoc, fluent async method chaining, `ExternalServiceResource` support in `withEnvironment`, and fixes for generated names and exports. Existing TypeScript AppHosts scaffolded by earlier CLI versions continue to work on 13.4 without changes. If your project uses `apphost.ts` and `./.modules/aspire.js`, see [Legacy `apphost.ts` projects (pre-13.4)](#legacy-apphostts-projects-pre-134) for compatibility details and an opt-in migration to the new `apphost.mts` layout. - For preview polyglot AppHosts behind feature flags, see [`aspire config set`](/reference/cli/commands/aspire-config-set/). + For preview non-C# AppHosts behind feature flags, see [`aspire config set`](/reference/cli/commands/aspire-config-set/). For setup details, see [TypeScript AppHosts](/app-host/typescript-apphost/). To explore working examples, browse the [Aspire samples](/reference/samples/). @@ -770,7 +770,7 @@ After migrating, `aspire run` behaves exactly the same as before — the CLI now -Aspire 13.4 includes several breaking changes. Most are small renames or configuration moves, but a few affect deployment and the polyglot AppHost SDK layout. Review the subsections that apply to your app before upgrading. +Aspire 13.4 includes several breaking changes. Most are small renames or configuration moves, but a few affect deployment and the non-C# AppHost SDK layout. Review the subsections that apply to your app before upgrading. #### `aspire exec` command removed @@ -780,7 +780,7 @@ Remove scripts or workflows that call `aspire exec`. For resource-specific actio #### Generated TypeScript modules consolidated under `.aspire/modules/` -Generated polyglot SDK modules now live under a single `.aspire/modules/` directory instead of being split across `.modules/` and `.aspire/`. Generated language references — TypeScript imports, Go replace directives, Python editable paths, Java source lists, and Rust module paths — are updated automatically to point at the new location. +Generated non-C# SDK modules now live under a single `.aspire/modules/` directory instead of being split across `.modules/` and `.aspire/`. Generated language references — TypeScript imports, Go replace directives, Python editable paths, Java source lists, and Rust module paths — are updated automatically to point at the new location. Re-run `aspire run` (or your code-generation step) to regenerate references, and update any custom tooling or `.gitignore` entries that referenced the old `.modules/` path. @@ -874,7 +874,7 @@ For full guidance and the container path mapping, see [PostgreSQL 18 data direct 1. **Update the CLI** — run `aspire update --self`. This step is **required** for TypeScript AppHosts; running `aspire update` against a 13.3.x TypeScript project before updating the CLI fails with `No code generator found for language: TypeScript` and leaves the project in a partially-upgraded, unrunnable state (see [microsoft/aspire#17077](https://github.com/microsoft/aspire/issues/17077)). -2. **Update your projects** — run `aspire update` from the root of your repository. For polyglot AppHosts, this regenerates SDK modules under `.aspire/modules/`. +2. **Update your projects** — run `aspire update` from the root of your repository. For non-C# AppHosts, this regenerates SDK modules under `.aspire/modules/`. 3. **Run `aspire doctor`** to check your environment setup and spot conflicting CLI installs. 4. **Audit scripts and CI** for removed/changed commands — `aspire exec` and non-interactive `aspire update` calls. 5. **Update Kubernetes deployment code** — move Helm chart properties into `WithHelm(...)`, rename `ingress.WithRoute(...)` to `ingress.WithPath(...)`, and mark routed endpoints external with `WithExternalHttpEndpoints()`.