diff --git a/src/frontend/src/content/docs/app-host/executable-resources.mdx b/src/frontend/src/content/docs/app-host/executable-resources.mdx index 596d6163d..d02b1ead8 100644 --- a/src/frontend/src/content/docs/app-host/executable-resources.mdx +++ b/src/frontend/src/content/docs/app-host/executable-resources.mdx @@ -276,7 +276,7 @@ const app = await builder.addExecutable("api", "uvicorn", ".", ["main:app", "--r ### `withEnvironment` API unification in Aspire 13.3 -Aspire 13.3 unified polyglot AppHost environment assignment behind a single `withEnvironment(name, value)` pattern. 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 unified non-C# AppHost environment assignment behind a single `withEnvironment(name, value)` pattern. 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. When upgrading to Aspire 13.3, replace every earlier per-kind environment helper call with `withEnvironment(name, value)`. The 13.3 TypeScript SDK doesn't generate compatibility aliases for those helpers. 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..205a88e9d 100644 --- a/src/frontend/src/content/docs/app-host/with-terminal.mdx +++ b/src/frontend/src/content/docs/app-host/with-terminal.mdx @@ -74,16 +74,9 @@ The terminal session is described by a set of options with sensible defaults: | ------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Columns` | `120` | The initial number of columns for the terminal grid. | | `Rows` | `30` | The initial number of rows for the terminal grid. | +| `Shell` | `null` | The shell to launch for the session. When `null`, the default is used: for containers this is typically `/bin/sh`; for executables the process itself is the terminal program. | | `ShowTerminalHost` | `false` | Whether the hidden per-replica terminal host resources appear in the dashboard and CLI resource lists. Set to `true` to diagnose terminal-host startup or connectivity issues. | - - - - @@ -118,7 +111,7 @@ await builder.build().run(); ``` 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 4c2fd2d72..22dfe92c4 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 [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..d649a9d8b 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 @@ -72,6 +100,10 @@ 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 and applications written in multiple languages, including TypeScript, C#, Python, Go, Java, and Rust. Aspire supports polyglot code in AppHosts, generated SDKs, others projects, and related tooling. + --- ## APIs and patterns @@ -86,11 +118,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 @@ -98,38 +139,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 +``` + 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 cdc14d34d..b9379cde4 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 @@ -446,7 +446,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..3fffd12de 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..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 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 28ab0d978..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/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..8f18f1780 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) は、TypeScript、C#、Python、Go、Java、Rust など、複数の言語で書かれたコードやアプリケーションを指します。 + ### 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 1693f1127..c61625f03 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 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 9dbc489cc..b6f9e6856 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 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 4b34b069a..a194839c6 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 @@ -6,12 +6,13 @@ 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.aspireSkillsRemoteFetchEnabled` | `features.aspireSkillsRemoteFetchEnabled` | Enable or disable preview remote fetching of Aspire skills bundles from GitHub. | | `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: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.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# (polyglot) AppHost. Disabled by default because remote NuGet feeds don't reliably answer the `tags:polyglot` query used to build the compatibility allow-list. | +| `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. | | `features.updateNotificationsEnabled` | `features.updateNotificationsEnabled` | Enable or disable Aspire CLI update notifications. | 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 a7bd94ae6..4fe5cf8f4 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 @@ -695,7 +695,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 non-C# AppHosts (TypeScript, Java, Python, Go, Rust). Previously, environment variable injection required separate methods for each value kind (`withEnvironmentEndpoint`, `withEnvironmentParameter`, `withEnvironmentConnectionString`, and so on). Now, a single call handles all value types: ```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 359e4ea97..360c7324d 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 @@ -138,12 +138,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 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()`. diff --git a/src/frontend/src/content/docs/whats-new/aspire-13-5.mdx b/src/frontend/src/content/docs/whats-new/aspire-13-5.mdx index d75185c7e..a7fcfb85f 100644 --- a/src/frontend/src/content/docs/whats-new/aspire-13-5.mdx +++ b/src/frontend/src/content/docs/whats-new/aspire-13-5.mdx @@ -1,6 +1,6 @@ --- title: "What's new in Aspire 13.5" -description: "Explore Aspire 13.5, a developer-experience release: interactive terminal sessions, the Interaction Service across C# and TypeScript AppHosts with file uploads and progress dialogs, user-defined resource command arguments, generally available TypeScript AppHosts with health checks and container files, HTTPS certificates for projects, Kubernetes and AKS persistent volumes, a refreshed dashboard, and a rebranded VS Code extension." +description: "Explore Aspire 13.5: Interactive terminal sessions, polyglot IInteractionService, TypeScript AppHost stability, terminal commands with user inputs, custom health checks, distributed tracing improvements, and dashboard enhancements." sidebar: label: Aspire 13.5 order: 0 @@ -12,33 +12,40 @@ tableOfContents: import { Steps, Aside, + FileTree, Icon, Tabs, TabItem, } from '@astrojs/starlight/components'; import LearnMore from '@components/LearnMore.astro'; import OsAwareTabs from '@components/OsAwareTabs.astro'; -import { Image } from 'astro:assets'; -import dashboardResources from '@assets/dashboard/explore/projects.png'; -import dashboardStructuredLogsFiltered from '@assets/dashboard/explore/structured-logs-filtered.png'; -import dashboardTracesFiltering from '@assets/dashboard/explore/traces-filtering.png'; - -Aspire 13.5 is here, and it's a **developer-experience** release through and through — sharper tooling, **closer C# and TypeScript parity**, and a batch of runtime-stability fixes. The headline is a richer, more interactive AppHost: resources can host **interactive terminal sessions** with `WithTerminal()`, the **Interaction Service** now works across both **C#** and **TypeScript** AppHosts — with **file uploads** and **progress dialogs** — and resource commands can **prompt for user-defined arguments** before they run. **TypeScript AppHosts are now generally available**, gaining **custom health checks** and **container file copying** to close the gap with C#. Projects can request **HTTPS developer certificates**, and deployment picks up **persistent volumes for Kubernetes and AKS**. The dashboard gets an officially branded visual refresh and sharper telemetry filtering, and the Visual Studio Code extension is rebranded to **Aspire** with dashboard, debugging, and discovery improvements. +Aspire 13.5 is here with focus on **developer experience**, **[polyglot](/get-started/glossary/#polyglot) feature parity**, and **runtime stability**. This release brings **interactive terminal sessions** via `WithTerminal()`, **IInteractionService available across all polyglot AppHosts** (TypeScript, Python, Go, Java, and Rust), **user-defined arguments in resource commands** for interactive workflows, **TypeScript AppHost startup optimizations** and **stability fixes**, **custom health checks for TypeScript AppHosts**, **container file copying** in polyglot AppHosts, **promoted IInteractionService to stable**, a major **Foundry integration update** to use the CLI-based lifecycle, **distributed trace improvements** including timestamp filtering, **dashboard telemetry enhancements**, new **VS Code extension commands** including opening the Dashboard in a side panel, **Bun debugging support**, **resource command visibility** in the extension tree, **Aspire CLI available via npm**, and many more improvements and bug fixes across AppHost, CLI, Dashboard, and Extensions. We'd love to hear what you think. Drop by [ Discord](https://aka.ms/aspire-discord) to chat with the team and the community, or file feedback and issues on [ GitHub](https://github.com/microsoft/aspire/issues). This release introduces: -- **Interactive terminal sessions** with the experimental `WithTerminal()` API, so you can attach to REPLs, shells, and other terminal programs running as Aspire resources from the dashboard — with an opt-in `aspire terminal` CLI command. -- **The Interaction Service across C# and TypeScript AppHosts** — prompts, message boxes, notifications, and dynamic inputs, now with **file uploads** and **progress dialogs**. The core `PromptInput`/`PromptInputs` surface is stable and no longer requires suppressing `ASPIREINTERACTION001`. -- **User-defined resource command arguments**, so the dashboard can prompt for input before invoking a command — the CLI exposes them as `--` options — with full C# and TypeScript parity. -- **HTTPS certificates for project resources** through a new experimental configuration API. -- **Generally available TypeScript AppHosts**, adding **custom health checks** and **container file copying** at parity with C#, plus faster startup and a batch of reliability fixes. -- **The Aspire CLI on npm and Nix**, with the CLI bundle enabled by default in new C# projects — acquired on the fly via `dnx`. -- **A refreshed, officially branded dashboard** with timestamp filtering, numeric operators, and console-log text search. -- **A rebranded Visual Studio Code extension** with a dashboard side panel, Bun and MAUI debugging, and resource commands in the tree view. -- **Cross-scope Azure resource references** with the `AsExisting*` family, and **persistent volumes for Kubernetes and AKS**. +- **Interactive terminal sessions** with `WithTerminal()` on AppHost resources enable live REPL and shell interaction through the Dashboard and CLI. +- **Polyglot IInteractionService parity** brings prompts, message boxes, notifications, and dynamic inputs to TypeScript, Python, Go, Java, and Rust AppHosts alongside C#. +- **User-defined resource command arguments** let Dashboard and CLI prompt for input before invoking commands like custom deploy or setup workflows. +- **TypeScript AppHost stability improvements** fix deadlocks, optimize startup by racing connection attempts against process exit, and validate compilation before execution. +- **Custom health checks in TypeScript AppHosts** enable resource-specific health monitoring in polyglot environments. +- **Container file copying in TypeScript AppHosts** brings parity with C# for copying host files into containers with ownership and permission controls. +- **IInteractionService promoted to stable** removes the ASPIREINTERACTION001 diagnostic requirement from production code. +- **CLI available via npm** (@microsoft/aspire-cli) provides an alternative installation path alongside the default distribution. +- **Embedded Aspire skills bundle fallback** ensures the CLI can bootstrap even when GitHub release asset acquisition is unavailable. +- **Faster TypeScript AppHost startup** skips fixed delays and races the connection retry loop, reducing time-to-ready. +- **Friendly error messages for health check failures** replace raw exception stacks with actionable diagnostics in the Dashboard. +- **Distributed trace timestamp filtering** enables precise telemetry searches by date and time. +- **VS Code Dashboard in side panel** lets you monitor your app without leaving VS Code. +- **Bun debugging support** in VS Code extension via WebKit Inspector Protocol. +- **Resource commands in VS Code tree view** display all available actions (Start, Stop, custom commands) under each resource. +- **Improved parameter display** in VS Code shows secret masks, missing value warnings, and consistent formatting across panels. +- **VS Code extension renamed to "Aspire"** and rebranded for clarity on the Marketplace. +- **AppHost discovery efficiency** in VS Code respects exclusion settings and debounces file changes to reduce background scanning. +- **Foundry Local integration CLI update** now uses the foundry CLI for lifecycle management, requiring foundry 1.1.0+. +- **Proxyless endpoint port allocation** assigns dynamic public host ports before resources are created, so endpoint property references resolve consistently. - …and much more. ## 🆙 Upgrade to Aspire 13.5 @@ -46,10 +53,6 @@ This release introduces:
- -