From fcfd361f841cb8de8b50315d81907344e60c6030 Mon Sep 17 00:00:00 2001
From: "aspire-repo-bot[bot]"
<268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Date: Sat, 10 Oct 2026 12:55:08 +0000
Subject: [PATCH 01/12] docs: document dashboard startup telemetry
Document the aspire/dashboard/startup product telemetry event added in
microsoft/aspire#20846: startup result, duration, launch context, and
failure error type. Add the Dashboard:LaunchContext configuration
option to the dashboard configuration reference.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
.../src/content/docs/dashboard/configuration.mdx | 1 +
.../microsoft-collected-dashboard-telemetry.mdx | 13 +++++++++++++
2 files changed, 14 insertions(+)
diff --git a/src/frontend/src/content/docs/dashboard/configuration.mdx b/src/frontend/src/content/docs/dashboard/configuration.mdx
index ce52bc5db..0439b93b6 100644
--- a/src/frontend/src/content/docs/dashboard/configuration.mdx
+++ b/src/frontend/src/content/docs/dashboard/configuration.mdx
@@ -317,6 +317,7 @@ Telemetry limits have different scopes depending upon the telemetry type:
| Option | Description |
|--------|-------------|
| `Dashboard:ApplicationName` Default: `Aspire` | The logical application name used to partition persisted data and to scope authentication and antiforgery cookie names. The AppHost supplies its application name automatically. Set it with the `ASPIRE_DASHBOARD_APPLICATION_NAME` environment variable. Configure a distinct name for dashboards whose cookies should be kept separate; see [Cookie scoping by application name](/dashboard/security-considerations/#cookie-scoping-by-application-name). |
+| `Dashboard:LaunchContext` Default: `null` | The launch context reported in dashboard startup telemetry, such as `apphost`, `cli`, or `container`. Set it with the `DASHBOARD__LAUNCHCONTEXT` environment variable. The AppHost and the `aspire dashboard run` CLI command set this automatically; container deployments can set `container` explicitly. Values are matched case-insensitively, and missing or unrecognized values are reported as `unknown`. See [Microsoft-collected dashboard telemetry](/dashboard/microsoft-collected-dashboard-telemetry/). |
| `Dashboard:UI:DisableResourceGraph` Default: `false` | Disables displaying the resource graph UI in the dashboard. |
| `Dashboard:UI:DisableImport` Default: `false` | Disables the telemetry import UI in the dashboard. |
| `Dashboard:UI:DisableAgentHelp` Default: `false` | Disables the **AI Agents** button in the dashboard header. When `false`, a button is shown in the header that opens a dialog with instructions for using AI coding agents with the dashboard. |
diff --git a/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx b/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx
index 57bbcf6c5..9083d803b 100644
--- a/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx
+++ b/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx
@@ -45,6 +45,19 @@ Alternatively, you can opt-out of telemetry collection by disabling telemetry co
When dashboard usage telemetry is enabled, there's a disclosure statement at the bottom of the settings panel, informing you that telemetry is enabled. This disclosure statement appears when usage telemetry is enabled.
+## Startup telemetry
+
+Separately from the IDE-scoped usage telemetry described above, the dashboard always records an `aspire/dashboard/startup` event when it starts, regardless of how it's launched (AppHost, the `aspire dashboard run` CLI command, standalone, or a deployed container). This event records:
+
+- The startup result (success or failure).
+- The elapsed startup duration, in milliseconds.
+- The launch context: `apphost`, `cli`, `container`, or `unknown`.
+- For failed startups, an error type: `invalid_config` for options validation failures, `address_in_use` for address conflicts, `canceled` for token-driven startup cancellation, or the exception type for other failures.
+
+The launch context is read from the `Dashboard:LaunchContext` configuration option (`DASHBOARD__LAUNCHCONTEXT` environment variable). The AppHost and the `aspire dashboard run` CLI command set this automatically; container deployments can set it explicitly to `container`. Values are matched case-insensitively, and missing or unrecognized values are reported as `unknown`. See [dashboard configuration](/dashboard/configuration/#other).
+
+Startup telemetry is sent using the same Azure Monitor reporting path, and the same `ASPIRE_DASHBOARD_TELEMETRY_OPTOUT` opt-out described above, as other dashboard usage and error telemetry.
+
## Data points
Aspire dashboard usage telemetry doesn't collect personal data, such as, IP addresses or use browser fingerprinting. It doesn't scan your code and doesn't extract source code, authorship, or deployment configuration. The data is sent securely to Microsoft using Azure Monitor through existing telemetry APIs in Visual Studio and Visual Studio Code.
From ce6d2424abb1414a581837605d8c793cfc869fb2 Mon Sep 17 00:00:00 2001
From: David Pine
Date: Mon, 12 Oct 2026 08:21:19 -0500
Subject: [PATCH 02/12] docs: migrate standalone dashboard image references
(#1679)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## Summary
Update active dashboard image references to the published canonical
Aspire repositories. The previous draft/publication warnings are
resolved: all exact image tags consumed by this PR returned HTTP 200 on
October 12, 2026. The PR is ready for review and conflict-free; an
explicit user-directed merge hold remains in effect.
- Audit all 2,475 tracked files, including 611 documentation pages and
every available localization, plus generated data, runnable examples,
configuration, scripts, and workflows. All active tagged references now
use canonical names; legacy names remain only in migration explanations.
Historical release pages and the hosting-integration image catalog are
unchanged.
- Use `mcr.microsoft.com/aspire/dashboard:latest` in all standalone
Docker examples, including the newly added persistence examples.
Preserve container names, ports, authentication, telemetry limits, CORS,
volumes, and persistence settings.
- Keep the English Compose examples on the intentional floating
`mcr.microsoft.com/aspire/nightly/dashboard:latest` selection, with an
explicit publisher-output caveat. Align both Japanese generated-output
examples with the current publisher's version-line selection,
`mcr.microsoft.com/aspire/nightly/dashboard:13.6`, rather than
introducing a new manual translation.
- Preserve the upstream sample's nightly `13.6` pin in its command and
explanation, in both generated README fields. Retain current-main
screenshots and metadata; no other sample fields change semantically.
After the source change merged, normal-main generation verified that the
entire 29-sample catalog is semantically identical to this committed
data.
- Explain repository mappings, tag availability, immutable digests, and
Aspire 13 servicing compatibility. Do not silently upgrade a
version-constrained example when its old tag is unavailable in the new
repository.
- Merge canonical `main` (`1a61517655b4fd7811ef63fb5913f6fb623d9d6a`)
while preserving the original PR commits. Resolve the generated catalog
conflict through the existing updater and extend regression coverage to
persistence commands, all active documentation locales, and arbitrary
valid Docker image tags.
### Feedback addressed
Both actionable inline findings were fixed in
`728e2b88638808155fe10d8f9b0e5f078aa71635`, replied to, and resolved
after pushing to the existing upstream head:
- Match Docker tag grammar rather than three hard-coded tags. Regression
fixtures cover versions, architecture/preview tags, underscores, mixed
case, 128-character tags, end-of-input, and tag-plus-digest references
in both legacy channels. Historical release-page exclusions remain
intact.
- Align both Japanese Compose output examples to canonical nightly
`13.6`; retain the English guide's explicit floating-nightly
explanation. Browser clipboard verification confirms the final
language-specific selections.
A fully paginated feedback refresh returned two resolved threads, no
further thread/comment pages, and zero unresolved findings. No
additional actionable general comments were present.
### Dependencies and merge gates
- Publisher prerequisite
[dotnet/dotnet-docker#7337](https://github.com/dotnet/dotnet-docker/pull/7337)
merged on September 15, 2026. Publisher manifests use `aspire/dashboard`
on `main` (`f731d8c7f1049741a025a3ed8c034f6921c8af5e`) and
`aspire/nightly/dashboard` on `nightly`
(`f1f5cc1b0a02f0dd4538d013cca20a89d4ada83e`); actual publication is
independently confirmed below.
- Source synchronization is fulfilled:
[microsoft/aspire-samples#1952](https://github.com/microsoft/aspire-samples/pull/1952)
merged as `9e83d52d2f0e8be2c5cc61e87e2a3d9b010f1fc3`. This catalog was
initially generated from corrected head
`d9ee93a5ef275919aa81956794ad34285a262199` with the supported
`SAMPLES_BRANCH` override; running the existing generator against normal
`main` after the merge produced semantically identical data for all 29
samples. No needless follow-up catalog edit was made.
- Companion
[microsoft/aspire#20177](https://github.com/microsoft/aspire/pull/20177)
is coordinated separately. At current product `main`
(`b1d4824f1249ea4297b818a3f67c48f0cdb5a3ef`),
`src/Shared/DashboardImage.cs` and the Docker publisher select the
canonical nightly name and resolve a build override or the running
product's major/minor tag. This documentation does not claim that manual
image edits rewrite installed tooling's output.
- **Do not merge, enable auto-merge, or enqueue while the user-directed
incident hold is active.** GitHub auto-merge is disabled and the PR has
no queue entry.
- A valid human approval of the final work and green required/relevant
exact-head CI are mandatory after the hold is lifted. `mitchdenny`
approved the preceding head `e55de41c1d28522ef5f40aa22a53f19134e36017`;
GitHub retains that approval after the feedback push, so a summary
`APPROVED` state must not be mistaken for review of the current head. No
self-approval or bypass was performed.
### Exact published image decisions
| Use | Image | Manifest verification |
| --- | --- | --- |
| Standalone guides | `mcr.microsoft.com/aspire/dashboard:latest` | HTTP
200;
`sha256:613f297a274958abd85e7b71664f51fb42b0ddeb697ebd4c159677774433345b`
|
| Explicitly illustrative English Compose examples |
`mcr.microsoft.com/aspire/nightly/dashboard:latest` | HTTP 200;
`sha256:03a6f96028282634e3e957fb0b146e83fcc88e98f34aa3d689a38cd8ac31e5e7`
|
| Japanese publisher-output examples and upstream sample |
`mcr.microsoft.com/aspire/nightly/dashboard:13.6` | HTTP 200;
`sha256:03a6f96028282634e3e957fb0b146e83fcc88e98f34aa3d689a38cd8ac31e5e7`
|
Both canonical tag lists contain `13`, `13.6`, and `latest`, but earlier
minors such as `13.0` are absent. Exact canonical `13.0`–`13.3` requests
returned 404 while their legacy counterparts returned 200. A repository
rename is not a reason to change an intentionally pinned version or
switch release channels.
## Third-party links and affiliations
None. Added catalog links point to Microsoft's own Microsoft Container
Registry.
## Validation
Validated/pushed head: `728e2b88638808155fe10d8f9b0e5f078aa71635`.
- `pnpm --dir .\src\frontend exec vitest run --config vitest.config.ts
tests/unit/dashboard-image-references.vitest.test.ts
tests/unit/dashboard-agent-commands.vitest.test.ts
tests/unit/update-samples.vitest.test.ts`: **69 passed** after the
feedback fixes. Earlier extended coverage reproduced three stale
persistence/sample-reference failures before correction.
- `pnpm --dir .\src\frontend exec eslint
tests\unit\dashboard-image-references.vitest.test.ts --max-warnings 0`:
**passed**.
- `$env:SAMPLES_BRANCH = 'd9ee93a5ef275919aa81956794ad34285a262199';
pnpm --dir .\src\frontend update:samples`: **passed**, all 29 samples
fetched; only the standalone-dashboard README fields changed
semantically versus the base. Its `readmeRaw` exactly matches the pinned
source bytes. Post-merge execution of the same `update-samples.ts` with
`SAMPLES_BRANCH=main` in a temporary output directory: **passed**, all
29 generated sample objects matched the committed catalog; temporary
assets were removed.
- `git diff upstream/main HEAD --check`: **passed**. Final PR diff: nine
intended files, 215 insertions and 20 deletions. Existing PR history and
the latest base ancestry are preserved.
- `pnpm dev --host 127.0.0.1 --port 4389` with telemetry disabled:
**started successfully**. Playwright CLI verified all seven affected
documentation routes, Bash/PowerShell
standalone/configuration/CORS/persistence variants, C#/TypeScript
deployment variants, migration anchors, both image catalogs, and
`/reference/samples/standalone-dashboard/`. Final Japanese and sample
clipboard checks passed. The owned browser/scratch artifacts and preview
server were cleaned up; port 4389 has no listener.
- `docker manifest inspect mcr.microsoft.com/aspire/dashboard:latest`,
`docker manifest inspect
mcr.microsoft.com/aspire/nightly/dashboard:latest`, and `docker manifest
inspect mcr.microsoft.com/aspire/nightly/dashboard:13.6`: **passed**,
each advertises Linux AMD64 and ARM64. Exact registry manifests were
**HTTP 200** with the digests above.
- Container execution/login/OTLP/persistence runtime checks were
**blocked by the unavailable local Docker Desktop Linux engine**, not
claimed as passed. Four copied Compose examples also exposed
pre-existing `environment must be a mapping` schema failures; a byte
comparison verified their unchanged content against canonical main apart
from dashboard image references. Those unrelated baseline defects were
not altered.
- No full local build was run. Current-head
[CI](https://github.com/microsoft/aspire.dev/actions/runs/38249739333)
has passed frontend Build, frontend lint/unit validation, release-sync,
and change detection;
[CodeQL](https://github.com/microsoft/aspire.dev/actions/runs/38249739086),
forbidden words, and CLA are green. E2E/downstream gates must finish
before merge. Previous-head checks are not reused.
---------
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---
.../content/docs/dashboard/configuration.mdx | 4 +-
.../enable-browser-telemetry/index.mdx | 8 +-
.../src/content/docs/dashboard/index.mdx | 4 +-
.../src/content/docs/dashboard/standalone.mdx | 36 +++-
.../docs/get-started/deploy-first-app.mdx | 8 +-
.../docs/ja/get-started/deploy-first-app.mdx | 4 +-
.../content/docs/whats-new/upgrade-aspire.mdx | 8 +
src/frontend/src/data/samples.json | 6 +-
.../dashboard-image-references.vitest.test.ts | 157 ++++++++++++++++++
9 files changed, 215 insertions(+), 20 deletions(-)
create mode 100644 src/frontend/tests/unit/dashboard-image-references.vitest.test.ts
diff --git a/src/frontend/src/content/docs/dashboard/configuration.mdx b/src/frontend/src/content/docs/dashboard/configuration.mdx
index ce52bc5db..b20124ca4 100644
--- a/src/frontend/src/content/docs/dashboard/configuration.mdx
+++ b/src/frontend/src/content/docs/dashboard/configuration.mdx
@@ -85,7 +85,7 @@ docker run --rm -it -p 18888:18888 -p 4317:18889 -p 4318:18890 -d --name aspire-
-e DASHBOARD__TELEMETRYLIMITS__MAXLOGCOUNT='1000' \
-e DASHBOARD__TELEMETRYLIMITS__MAXTRACECOUNT='1000' \
-e DASHBOARD__TELEMETRYLIMITS__MAXMETRICSCOUNT='1000' \
- mcr.microsoft.com/dotnet/aspire-dashboard:latest
+ mcr.microsoft.com/aspire/dashboard:latest
```
@@ -96,7 +96,7 @@ docker run --rm -it -p 18888:18888 -p 4317:18889 -p 4318:18890 -d --name aspire-
-e DASHBOARD__TELEMETRYLIMITS__MAXLOGCOUNT='1000' `
-e DASHBOARD__TELEMETRYLIMITS__MAXTRACECOUNT='1000' `
-e DASHBOARD__TELEMETRYLIMITS__MAXMETRICSCOUNT='1000' `
- mcr.microsoft.com/dotnet/aspire-dashboard:latest
+ mcr.microsoft.com/aspire/dashboard:latest
```
diff --git a/src/frontend/src/content/docs/dashboard/enable-browser-telemetry/index.mdx b/src/frontend/src/content/docs/dashboard/enable-browser-telemetry/index.mdx
index b131c2e55..e897fd9d5 100644
--- a/src/frontend/src/content/docs/dashboard/enable-browser-telemetry/index.mdx
+++ b/src/frontend/src/content/docs/dashboard/enable-browser-telemetry/index.mdx
@@ -97,7 +97,7 @@ docker run --rm -it -d \
-p 4317:18889 \
-p 4318:18890 \
--name aspire-dashboard \
- mcr.microsoft.com/dotnet/aspire-dashboard:latest
+ mcr.microsoft.com/aspire/dashboard:latest
```
@@ -109,7 +109,7 @@ docker run --rm -it -d `
-p 4317:18889 `
-p 4318:18890 `
--name aspire-dashboard `
- mcr.microsoft.com/dotnet/aspire-dashboard:latest
+ mcr.microsoft.com/aspire/dashboard:latest
```
@@ -135,7 +135,7 @@ docker run --rm -it -d \
-p 4318:18890 \
-e DASHBOARD__OTLP__CORS__ALLOWEDORIGINS=https://localhost:8080 \
--name aspire-dashboard \
- mcr.microsoft.com/dotnet/aspire-dashboard:latest
+ mcr.microsoft.com/aspire/dashboard:latest
```
@@ -148,7 +148,7 @@ docker run --rm -it -d `
-p 4318:18890 `
-e DASHBOARD__OTLP__CORS__ALLOWEDORIGINS=https://localhost:8080 `
--name aspire-dashboard `
- mcr.microsoft.com/dotnet/aspire-dashboard:latest
+ mcr.microsoft.com/aspire/dashboard:latest
```
diff --git a/src/frontend/src/content/docs/dashboard/index.mdx b/src/frontend/src/content/docs/dashboard/index.mdx
index 776647d21..98e117f2b 100644
--- a/src/frontend/src/content/docs/dashboard/index.mdx
+++ b/src/frontend/src/content/docs/dashboard/index.mdx
@@ -95,7 +95,7 @@ Or run the same standalone dashboard from its container image:
```bash
docker run --rm -it -p 18888:18888 -p 4317:18889 -p 4318:18890 -d --name aspire-dashboard \
- mcr.microsoft.com/dotnet/aspire-dashboard:latest
+ mcr.microsoft.com/aspire/dashboard:latest
```
@@ -103,7 +103,7 @@ docker run --rm -it -p 18888:18888 -p 4317:18889 -p 4318:18890 -d --name aspire-
```powershell
docker run --rm -it -p 18888:18888 -p 4317:18889 -p 4318:18890 -d --name aspire-dashboard `
- mcr.microsoft.com/dotnet/aspire-dashboard:latest
+ mcr.microsoft.com/aspire/dashboard:latest
```
diff --git a/src/frontend/src/content/docs/dashboard/standalone.mdx b/src/frontend/src/content/docs/dashboard/standalone.mdx
index 5c91ea115..9cb162d46 100644
--- a/src/frontend/src/content/docs/dashboard/standalone.mdx
+++ b/src/frontend/src/content/docs/dashboard/standalone.mdx
@@ -65,7 +65,7 @@ The dashboard also ships as a standalone container image. Use this option when a
```bash
docker run --rm -it -p 18888:18888 -p 4317:18889 -p 4318:18890 -d --name aspire-dashboard \
- mcr.microsoft.com/dotnet/aspire-dashboard:latest
+ mcr.microsoft.com/aspire/dashboard:latest
```
@@ -73,7 +73,7 @@ docker run --rm -it -p 18888:18888 -p 4317:18889 -p 4318:18890 -d --name aspire-
```powershell
docker run --rm -it -p 18888:18888 -p 4317:18889 -p 4318:18890 -d --name aspire-dashboard `
- mcr.microsoft.com/dotnet/aspire-dashboard:latest
+ mcr.microsoft.com/aspire/dashboard:latest
```
@@ -81,12 +81,38 @@ docker run --rm -it -p 18888:18888 -p 4317:18889 -p 4318:18890 -d --name aspire-
The preceding Docker command:
-- Starts a container from the `mcr.microsoft.com/dotnet/aspire-dashboard:latest` image.
+- Starts a container from the `mcr.microsoft.com/aspire/dashboard:latest` image.
- The container exposes three ports:
- Mapping the dashboard's port `18888` to the host's port `18888`. Port `18888` has the dashboard UI. Navigate to `http://localhost:18888` in the browser to view the dashboard.
- Mapping the dashboard's OTLP/gRPC port `18889` to the host's port `4317`. Port `4317` receives OpenTelemetry data from apps using [OTLP/gRPC](https://opentelemetry.io/docs/specs/otlp/#otlpgrpc).
- Mapping the dashboard's OTLP/HTTP port `18890` to the host's port `4318`. Port `4318` receives OpenTelemetry data from apps using [OTLP/HTTP](https://opentelemetry.io/docs/specs/otlp/#otlphttp).
+### Container image repositories and migration
+
+The dashboard images are published to Microsoft Container Registry (MCR) under the `aspire` product family:
+
+| Channel | Repository | Use |
+| --- | --- | --- |
+| Stable | `mcr.microsoft.com/aspire/dashboard` | Released dashboard images; recommended for standalone use. |
+| Nightly | `mcr.microsoft.com/aspire/nightly/dashboard` | Preview builds for testing upcoming changes. |
+
+Use the [stable image catalog](https://mcr.microsoft.com/en-us/product/aspire/dashboard/tags) or [nightly image catalog](https://mcr.microsoft.com/en-us/product/aspire/nightly/dashboard/tags) to check available tags. Nightly builds aren't a substitute for stable releases.
+
+If you manage a dashboard container yourself, update the image repository in your Docker commands, Compose files, Kubernetes manifests, and image-mirroring or allowlist configuration:
+
+| Previous repository | New repository |
+| --- | --- |
+| `mcr.microsoft.com/dotnet/aspire-dashboard` | `mcr.microsoft.com/aspire/dashboard` |
+| `mcr.microsoft.com/dotnet/nightly/aspire-dashboard` | `mcr.microsoft.com/aspire/nightly/dashboard` |
+
+Preserve your stable or nightly channel and verify that your chosen tag exists in the new repository before changing it. The migration doesn't guarantee that all historical tags are available at the new names. If a version-specific tag isn't available in the new repository, keep the legacy reference rather than silently upgrading the dashboard. The `latest` tag follows the latest image in its repository; choose a published version tag to stay on a version line, or a digest when you need an immutable image reference.
+
+:::note[Aspire 13 compatibility]
+Aspire 13 images continue to be published to the legacy repositories for servicing and security updates. This compatibility covers the published fixed, minor, major, and architecture-specific tags. Legacy `latest` stays on the Aspire 13 line; it isn't a permanent alias for the new repository's `latest`. Subsequent major versions use the new repositories without this legacy syndication.
+:::
+
+The repository change doesn't rename the `aspire-dashboard` container, change its ports or environment variables, or change `aspire dashboard run`. Docker Compose and Kubernetes output generated by an older Aspire release can still contain a legacy image reference. Keep that output aligned with the publisher version rather than assuming the image repository migration changes installed tooling.
+
## Login to the dashboard
Data displayed in the dashboard can be sensitive. By default, the dashboard is secured with authentication that requires a token to login.
@@ -257,7 +283,7 @@ docker run --rm -d --name aspire-dashboard \
-e ASPIRE_DASHBOARD_APPLICATION_NAME=my-app \
-e ASPIRE_DASHBOARD_DATA_DIRECTORY=/dashboard-data \
-e ASPIRE_DASHBOARD_PERSISTENCE_MODE=run \
- mcr.microsoft.com/dotnet/aspire-dashboard:latest
+ mcr.microsoft.com/aspire/dashboard:latest
```
@@ -274,7 +300,7 @@ docker run --rm -d --name aspire-dashboard `
-e ASPIRE_DASHBOARD_APPLICATION_NAME=my-app `
-e ASPIRE_DASHBOARD_DATA_DIRECTORY=/dashboard-data `
-e ASPIRE_DASHBOARD_PERSISTENCE_MODE=run `
- mcr.microsoft.com/dotnet/aspire-dashboard:latest
+ mcr.microsoft.com/aspire/dashboard:latest
```
diff --git a/src/frontend/src/content/docs/get-started/deploy-first-app.mdx b/src/frontend/src/content/docs/get-started/deploy-first-app.mdx
index ff6d60fdc..0d31e0b24 100644
--- a/src/frontend/src/content/docs/get-started/deploy-first-app.mdx
+++ b/src/frontend/src/content/docs/get-started/deploy-first-app.mdx
@@ -20,6 +20,10 @@ import csharpStarterPng from '@assets/get-started/csharp-starter.png';
import javascriptStarterDarkPng from '@assets/get-started/javascript-starter-dark.png';
import javascriptStarterLightPng from '@assets/get-started/javascript-starter-light.png';
+:::note[Dashboard image in these examples]
+The Docker Compose examples on this page intentionally select `mcr.microsoft.com/aspire/nightly/dashboard:latest`. This floating tag follows the latest nightly dashboard image; it isn't an immutable digest or a stable release. Your installed Aspire publisher can generate a different repository or pin a version-line tag, so these examples don't guarantee its default output. For image selection and compatibility guidance, see [Container image repositories and migration](/dashboard/standalone/#container-image-repositories-and-migration).
+:::
+
+## Update standalone dashboard container references
+
+If you manage the standalone dashboard as a container, its stable image repository is now `mcr.microsoft.com/aspire/dashboard`; nightly images use `mcr.microsoft.com/aspire/nightly/dashboard`. Updating the Aspire CLI or packages doesn't rewrite image references in your own Docker commands, Compose files, or Kubernetes manifests.
+
+Before replacing a legacy `dotnet/aspire-dashboard` or `dotnet/nightly/aspire-dashboard` reference, verify that the tag you use exists in the new repository. Legacy repositories continue to receive Aspire 13 servicing images, but their `latest` tag stays on the Aspire 13 line rather than following future major releases. Generated deployment output remains specific to the Aspire publisher version.
+
+For the repository mapping, tag selection, and compatibility details, see [Container image repositories and migration](/dashboard/standalone/#container-image-repositories-and-migration).
+
## Update the VS Code extension (optional)
If you have the Aspire extension installed, you can update it to get the latest tooling support:
diff --git a/src/frontend/src/data/samples.json b/src/frontend/src/data/samples.json
index 41b155cf4..e15de1136 100644
--- a/src/frontend/src/data/samples.json
+++ b/src/frontend/src/data/samples.json
@@ -488,8 +488,8 @@
"title": "Standalone Aspire dashboard sample app",
"description": "View telemetry from any app in the Aspire dashboard. The dashboard supports running standalone, and apps configured with an [OpenTelemetry SDK](https://opentelemetry.io/docs/getting-started/dev/) can send it data.\n\nThis sample is a .NET console app that downloads data from [NuGet](https://nuget.org/). The app sends telemetry to the Aspire dashboard which is viewed in the dashboard telemetry UI.",
"href": "https://github.com/microsoft/aspire-samples/tree/main/samples/standalone-dashboard",
- "readme": "# Standalone Aspire dashboard sample app\n\nView telemetry from any app in the Aspire dashboard. The dashboard supports running standalone, and apps configured with an [OpenTelemetry SDK](https://opentelemetry.io/docs/getting-started/dev/) can send it data.\n\nThis sample is a .NET console app that downloads data from [NuGet](https://nuget.org/). The app sends telemetry to the Aspire dashboard which is viewed in the dashboard telemetry UI.\n\n\n\n\n## Demonstrates\n\n- How to run the Aspire dashboard from a Docker container\n- How to configure a .NET app to export telemetry to the dashboard\n- How to view telemetry in the Aspire dashboard\n\n## Sample prerequisites\n\nThis sample is written in C# and targets .NET 10.0. It requires the [.NET 10.0 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) or later.\n\nThis sample runs the Aspire dashboard from a Docker container. It requires Docker to be installed.\n\n## Start Aspire dashboard\n\nThe following command starts the Aspire dashboard in a Docker container:\n\n``` bash\ndocker run --rm -it -p 18888:18888 -p 4317:18889 -d --name aspire-dashboard mcr.microsoft.com/dotnet/nightly/aspire-dashboard:13.6\n```\n\nThe docker command:\n\n- Starts a container from the `mcr.microsoft.com/dotnet/nightly/aspire-dashboard:13.6` prerelease image.\n- The container has two ports:\n - Port `4317` receives OpenTelemetry data from apps. Apps send data using [OpenTelemetry Protocol (OTLP)](https://opentelemetry.io/docs/specs/otlp/).\n - Port `18888` has the dashboard UI. Navigate to http://localhost:18888 in the browser to view the dashboard.\n\n> [!NOTE]\n> The dashboard currently only supports the [OTLP/gRPC protocol](https://opentelemetry.io/docs/specs/otlp/#otlpgrpc). Apps sending telemetry to the dashboard must be configured to use the `grpc` protocol. There are a couple of options for configuring apps:\n>\n> - Configure the OpenTelemetry SDK inside the app to use the gRPC OTLP protocol, or\n> - Start the app with the [`OTEL_EXPORTER_OTLP_PROTOCOL` environment variable](https://opentelemetry.io/docs/specs/otel/protocol/exporter/#configuration-options) with a value of `grpc`.\n\n## Login to the Aspire dashboard\n\nData displayed in the dashboard can be sensitive. By default, the dashboard is secured with authentication that requires a token to login.\n\nWhen the dashboard is run from a standalone container the login token is printed to the container logs. After copying the highlighted token into the login page, select the *Login* button.\n\n\n\nFor more information about logging into the dashboard, see [Dashboard authentication](https://aspire.dev/dashboard/explore/#dashboard-authentication).\n\n## Running the sample\n\nTo download and run the sample, follow these steps:\n\n1. Clone the `dotnet/aspire-samples` repository.\n2. Navigate to the folder that holds the sample code.\n3. At the command line, type [`dotnet run ConsoleApp.cs`](https://learn.microsoft.com/dotnet/core/tools/dotnet-run).\n\nRun the .NET app by executing the following at the command prompt (opened to the base directory of the sample):\n\n``` bash\ndotnet run ConsoleApp.cs\n```\n\n1. The console app launches, downloads information about the top NuGet packages and then exits.\n2. View the Aspire dashboard at http://localhost:18888 to see app telemetry.\n 1. View structured logs to see the list of top NuGet packages.\n 2. View traces to see HTTP requests made.\n 3. View metrics to see numeric data about the app such as average HTTP request duration.\n\n## Configure OpenTelemetry\n\nThe telemetry export endpoint is configured with the `OTEL_EXPORTER_OTLP_ENDPOINT` setting. This value is set to `http://localhost:4317` in the sample's `ConsoleApp.run.json` file. Removing the `OTEL_EXPORTER_OTLP_ENDPOINT` value disables exporting telemetry.\n",
- "readmeRaw": "# Standalone Aspire dashboard sample app\n\nView telemetry from any app in the Aspire dashboard. The dashboard supports running standalone, and apps configured with an [OpenTelemetry SDK](https://opentelemetry.io/docs/getting-started/dev/) can send it data.\n\nThis sample is a .NET console app that downloads data from [NuGet](https://nuget.org/). The app sends telemetry to the Aspire dashboard which is viewed in the dashboard telemetry UI.\n\n\n\n\n## Demonstrates\n\n- How to run the Aspire dashboard from a Docker container\n- How to configure a .NET app to export telemetry to the dashboard\n- How to view telemetry in the Aspire dashboard\n\n## Sample prerequisites\n\nThis sample is written in C# and targets .NET 10.0. It requires the [.NET 10.0 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) or later.\n\nThis sample runs the Aspire dashboard from a Docker container. It requires Docker to be installed.\n\n## Start Aspire dashboard\n\nThe following command starts the Aspire dashboard in a Docker container:\n\n``` bash\ndocker run --rm -it -p 18888:18888 -p 4317:18889 -d --name aspire-dashboard mcr.microsoft.com/dotnet/nightly/aspire-dashboard:13.6\n```\n\nThe docker command:\n\n- Starts a container from the `mcr.microsoft.com/dotnet/nightly/aspire-dashboard:13.6` prerelease image.\n- The container has two ports:\n - Port `4317` receives OpenTelemetry data from apps. Apps send data using [OpenTelemetry Protocol (OTLP)](https://opentelemetry.io/docs/specs/otlp/).\n - Port `18888` has the dashboard UI. Navigate to http://localhost:18888 in the browser to view the dashboard.\n\n> [!NOTE]\n> The dashboard currently only supports the [OTLP/gRPC protocol](https://opentelemetry.io/docs/specs/otlp/#otlpgrpc). Apps sending telemetry to the dashboard must be configured to use the `grpc` protocol. There are a couple of options for configuring apps:\n>\n> - Configure the OpenTelemetry SDK inside the app to use the gRPC OTLP protocol, or\n> - Start the app with the [`OTEL_EXPORTER_OTLP_PROTOCOL` environment variable](https://opentelemetry.io/docs/specs/otel/protocol/exporter/#configuration-options) with a value of `grpc`.\n\n## Login to the Aspire dashboard\n\nData displayed in the dashboard can be sensitive. By default, the dashboard is secured with authentication that requires a token to login.\n\nWhen the dashboard is run from a standalone container the login token is printed to the container logs. After copying the highlighted token into the login page, select the *Login* button.\n\n\n\nFor more information about logging into the dashboard, see [Dashboard authentication](https://learn.microsoft.com/dotnet/aspire/fundamentals/dashboard/explore#dashboard-authentication).\n\n## Running the sample\n\nTo download and run the sample, follow these steps:\n\n1. Clone the `dotnet/aspire-samples` repository.\n2. Navigate to the folder that holds the sample code.\n3. At the command line, type [`dotnet run ConsoleApp.cs`](https://learn.microsoft.com/dotnet/core/tools/dotnet-run).\n\nRun the .NET app by executing the following at the command prompt (opened to the base directory of the sample):\n\n``` bash\ndotnet run ConsoleApp.cs\n```\n\n1. The console app launches, downloads information about the top NuGet packages and then exits.\n2. View the Aspire dashboard at http://localhost:18888 to see app telemetry.\n 1. View structured logs to see the list of top NuGet packages.\n 2. View traces to see HTTP requests made.\n 3. View metrics to see numeric data about the app such as average HTTP request duration.\n\n## Configure OpenTelemetry\n\nThe telemetry export endpoint is configured with the `OTEL_EXPORTER_OTLP_ENDPOINT` setting. This value is set to `http://localhost:4317` in the sample's `ConsoleApp.run.json` file. Removing the `OTEL_EXPORTER_OTLP_ENDPOINT` value disables exporting telemetry.\n",
+ "readme": "# Standalone Aspire dashboard sample app\n\nView telemetry from any app in the Aspire dashboard. The dashboard supports running standalone, and apps configured with an [OpenTelemetry SDK](https://opentelemetry.io/docs/getting-started/dev/) can send it data.\n\nThis sample is a .NET console app that downloads data from [NuGet](https://nuget.org/). The app sends telemetry to the Aspire dashboard which is viewed in the dashboard telemetry UI.\n\n\n\n\n## Demonstrates\n\n- How to run the Aspire dashboard from a Docker container\n- How to configure a .NET app to export telemetry to the dashboard\n- How to view telemetry in the Aspire dashboard\n\n## Sample prerequisites\n\nThis sample is written in C# and targets .NET 10.0. It requires the [.NET 10.0 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) or later.\n\nThis sample runs the Aspire dashboard from a Docker container. It requires Docker to be installed.\n\n## Start Aspire dashboard\n\nThe following command starts the Aspire dashboard in a Docker container:\n\n``` bash\ndocker run --rm -it -p 18888:18888 -p 4317:18889 -d --name aspire-dashboard mcr.microsoft.com/aspire/nightly/dashboard:13.6\n```\n\nThe docker command:\n\n- Starts a container from the `mcr.microsoft.com/aspire/nightly/dashboard:13.6` prerelease image.\n- The container has two ports:\n - Port `4317` receives OpenTelemetry data from apps. Apps send data using [OpenTelemetry Protocol (OTLP)](https://opentelemetry.io/docs/specs/otlp/).\n - Port `18888` has the dashboard UI. Navigate to http://localhost:18888 in the browser to view the dashboard.\n\n> [!NOTE]\n> The dashboard currently only supports the [OTLP/gRPC protocol](https://opentelemetry.io/docs/specs/otlp/#otlpgrpc). Apps sending telemetry to the dashboard must be configured to use the `grpc` protocol. There are a couple of options for configuring apps:\n>\n> - Configure the OpenTelemetry SDK inside the app to use the gRPC OTLP protocol, or\n> - Start the app with the [`OTEL_EXPORTER_OTLP_PROTOCOL` environment variable](https://opentelemetry.io/docs/specs/otel/protocol/exporter/#configuration-options) with a value of `grpc`.\n\n## Login to the Aspire dashboard\n\nData displayed in the dashboard can be sensitive. By default, the dashboard is secured with authentication that requires a token to login.\n\nWhen the dashboard is run from a standalone container the login token is printed to the container logs. After copying the highlighted token into the login page, select the *Login* button.\n\n\n\nFor more information about logging into the dashboard, see [Dashboard authentication](https://aspire.dev/dashboard/explore/#dashboard-authentication).\n\n## Running the sample\n\nTo download and run the sample, follow these steps:\n\n1. Clone the `dotnet/aspire-samples` repository.\n2. Navigate to the folder that holds the sample code.\n3. At the command line, type [`dotnet run ConsoleApp.cs`](https://learn.microsoft.com/dotnet/core/tools/dotnet-run).\n\nRun the .NET app by executing the following at the command prompt (opened to the base directory of the sample):\n\n``` bash\ndotnet run ConsoleApp.cs\n```\n\n1. The console app launches, downloads information about the top NuGet packages and then exits.\n2. View the Aspire dashboard at http://localhost:18888 to see app telemetry.\n 1. View structured logs to see the list of top NuGet packages.\n 2. View traces to see HTTP requests made.\n 3. View metrics to see numeric data about the app such as average HTTP request duration.\n\n## Configure OpenTelemetry\n\nThe telemetry export endpoint is configured with the `OTEL_EXPORTER_OTLP_ENDPOINT` setting. This value is set to `http://localhost:4317` in the sample's `ConsoleApp.run.json` file. Removing the `OTEL_EXPORTER_OTLP_ENDPOINT` value disables exporting telemetry.\n",
+ "readmeRaw": "# Standalone Aspire dashboard sample app\n\nView telemetry from any app in the Aspire dashboard. The dashboard supports running standalone, and apps configured with an [OpenTelemetry SDK](https://opentelemetry.io/docs/getting-started/dev/) can send it data.\n\nThis sample is a .NET console app that downloads data from [NuGet](https://nuget.org/). The app sends telemetry to the Aspire dashboard which is viewed in the dashboard telemetry UI.\n\n\n\n\n## Demonstrates\n\n- How to run the Aspire dashboard from a Docker container\n- How to configure a .NET app to export telemetry to the dashboard\n- How to view telemetry in the Aspire dashboard\n\n## Sample prerequisites\n\nThis sample is written in C# and targets .NET 10.0. It requires the [.NET 10.0 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) or later.\n\nThis sample runs the Aspire dashboard from a Docker container. It requires Docker to be installed.\n\n## Start Aspire dashboard\n\nThe following command starts the Aspire dashboard in a Docker container:\n\n``` bash\ndocker run --rm -it -p 18888:18888 -p 4317:18889 -d --name aspire-dashboard mcr.microsoft.com/aspire/nightly/dashboard:13.6\n```\n\nThe docker command:\n\n- Starts a container from the `mcr.microsoft.com/aspire/nightly/dashboard:13.6` prerelease image.\n- The container has two ports:\n - Port `4317` receives OpenTelemetry data from apps. Apps send data using [OpenTelemetry Protocol (OTLP)](https://opentelemetry.io/docs/specs/otlp/).\n - Port `18888` has the dashboard UI. Navigate to http://localhost:18888 in the browser to view the dashboard.\n\n> [!NOTE]\n> The dashboard currently only supports the [OTLP/gRPC protocol](https://opentelemetry.io/docs/specs/otlp/#otlpgrpc). Apps sending telemetry to the dashboard must be configured to use the `grpc` protocol. There are a couple of options for configuring apps:\n>\n> - Configure the OpenTelemetry SDK inside the app to use the gRPC OTLP protocol, or\n> - Start the app with the [`OTEL_EXPORTER_OTLP_PROTOCOL` environment variable](https://opentelemetry.io/docs/specs/otel/protocol/exporter/#configuration-options) with a value of `grpc`.\n\n## Login to the Aspire dashboard\n\nData displayed in the dashboard can be sensitive. By default, the dashboard is secured with authentication that requires a token to login.\n\nWhen the dashboard is run from a standalone container the login token is printed to the container logs. After copying the highlighted token into the login page, select the *Login* button.\n\n\n\nFor more information about logging into the dashboard, see [Dashboard authentication](https://learn.microsoft.com/dotnet/aspire/fundamentals/dashboard/explore#dashboard-authentication).\n\n## Running the sample\n\nTo download and run the sample, follow these steps:\n\n1. Clone the `dotnet/aspire-samples` repository.\n2. Navigate to the folder that holds the sample code.\n3. At the command line, type [`dotnet run ConsoleApp.cs`](https://learn.microsoft.com/dotnet/core/tools/dotnet-run).\n\nRun the .NET app by executing the following at the command prompt (opened to the base directory of the sample):\n\n``` bash\ndotnet run ConsoleApp.cs\n```\n\n1. The console app launches, downloads information about the top NuGet packages and then exits.\n2. View the Aspire dashboard at http://localhost:18888 to see app telemetry.\n 1. View structured logs to see the list of top NuGet packages.\n 2. View traces to see HTTP requests made.\n 3. View metrics to see numeric data about the app such as average HTTP request duration.\n\n## Configure OpenTelemetry\n\nThe telemetry export endpoint is configured with the `OTEL_EXPORTER_OTLP_ENDPOINT` setting. This value is set to `http://localhost:4317` in the sample's `ConsoleApp.run.json` file. Removing the `OTEL_EXPORTER_OTLP_ENDPOINT` value disables exporting telemetry.\n",
"tags": [
"csharp",
"dashboard",
@@ -621,4 +621,4 @@
"appHostPath": "VolumeMount.AppHost/AppHost.cs",
"appHostCode": "var builder = DistributedApplication.CreateBuilder(args);\n\nvar sqlserver = builder.AddSqlServer(\"sqlserver\")\n .WithDataVolume()\n .WithLifetime(ContainerLifetime.Persistent);\n\nvar sqlDatabase = sqlserver.AddDatabase(\"sqldb\");\n\nvar blobs = builder.AddAzureStorage(\"Storage\")\n // Use the Azurite storage emulator for local development\n .RunAsEmulator(emulator => emulator.WithDataVolume())\n .AddBlobs(\"BlobConnection\");\n\nvar migration = builder.AddProject(\"migration\")\n .WithReference(sqlDatabase)\n .WaitFor(sqlDatabase);\n\nbuilder.AddProject(\"blazorweb\")\n .WithReference(sqlDatabase)\n .WaitForCompletion(migration)\n .WithReference(blobs)\n .WaitFor(blobs);\n\nbuilder.Build().Run();"
}
-]
+]
\ No newline at end of file
diff --git a/src/frontend/tests/unit/dashboard-image-references.vitest.test.ts b/src/frontend/tests/unit/dashboard-image-references.vitest.test.ts
new file mode 100644
index 000000000..a4960b889
--- /dev/null
+++ b/src/frontend/tests/unit/dashboard-image-references.vitest.test.ts
@@ -0,0 +1,157 @@
+import { readdirSync, readFileSync } from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { describe, expect, test } from 'vitest';
+import samples from '@data/samples.json';
+
+const testsDir = path.dirname(fileURLToPath(import.meta.url));
+const docsRoot = path.resolve(testsDir, '..', '..', 'src', 'content', 'docs');
+const stableImage = 'mcr.microsoft.com/aspire/dashboard:latest';
+const nightlyImage = 'mcr.microsoft.com/aspire/nightly/dashboard:latest';
+const versionedNightlyImage = 'mcr.microsoft.com/aspire/nightly/dashboard:13.6';
+
+function readDoc(file: string): string {
+ return readFileSync(path.join(docsRoot, file), 'utf8');
+}
+
+function dockerCommands(source: string): string[] {
+ return [...source.matchAll(/```(?:bash|powershell)[^\n]*\n([\s\S]*?)```/g)].flatMap(
+ (match) => match[1].match(/^docker run[^\n]*(?:\n[ \t]+[^\n]*)*/gm) ?? []
+ );
+}
+
+function legacyImageReferences(source: string): string[] {
+ return (
+ source.match(
+ /mcr\.microsoft\.com\/dotnet\/(?:nightly\/)?aspire-dashboard:\w[\w.-]{0,127}(?=$|[\s`"'@])/g
+ ) ?? []
+ );
+}
+
+describe('standalone dashboard container images', () => {
+ test.each([
+ ['dashboard/standalone.mdx', 4],
+ ['dashboard/index.mdx', 2],
+ ['dashboard/configuration.mdx', 2],
+ ['dashboard/enable-browser-telemetry/index.mdx', 4],
+ ])('%s uses the stable image in both shell variants', (file, count) => {
+ const source = readDoc(file);
+ const commands = dockerCommands(source);
+
+ expect(commands).toHaveLength(count);
+ expect(source.match(//g)?.length).toBeGreaterThanOrEqual(
+ count / 2
+ );
+ for (const command of commands) {
+ expect(command.match(/mcr\.microsoft\.com\/\S+/g)).toEqual([stableImage]);
+ expect(command).toContain('--name aspire-dashboard');
+ for (const port of ['18888:18888', '4317:18889', '4318:18890']) {
+ expect(command).toContain(`-p ${port}`);
+ }
+ }
+ expect(source.match(/```bash\b/g)?.length).toBeGreaterThanOrEqual(count / 2);
+ expect(source.match(/```powershell\b/g)?.length).toBeGreaterThanOrEqual(count / 2);
+ });
+
+ test('preserves telemetry limits and CORS settings', () => {
+ for (const command of dockerCommands(readDoc('dashboard/configuration.mdx'))) {
+ for (const setting of ['MAXLOGCOUNT', 'MAXTRACECOUNT', 'MAXMETRICSCOUNT']) {
+ expect(command).toContain(`-e DASHBOARD__TELEMETRYLIMITS__${setting}='1000'`);
+ }
+ }
+ const browserCommands = dockerCommands(readDoc('dashboard/enable-browser-telemetry/index.mdx'));
+ expect(
+ browserCommands.filter((command) =>
+ command.includes('-e DASHBOARD__OTLP__CORS__ALLOWEDORIGINS=https://localhost:8080')
+ )
+ ).toHaveLength(2);
+ });
+
+ test('keeps the command explanation and container log name consistent', () => {
+ const source = readDoc('dashboard/standalone.mdx');
+ expect(source).toContain(`Starts a container from the \`${stableImage}\` image.`);
+ expect(source).toContain('docker container logs aspire-dashboard');
+ expect(source).toContain('aspire dashboard run');
+ });
+
+ test('preserves the volume and persistence settings in both shell variants', () => {
+ const commands = dockerCommands(readDoc('dashboard/standalone.mdx')).filter((command) =>
+ command.includes('--mount')
+ );
+ expect(commands).toHaveLength(2);
+ for (const command of commands) {
+ expect(command).toContain(
+ '--mount type=volume,source=aspire-dashboard-data,target=/dashboard-data'
+ );
+ expect(command).toContain('-e ASPIRE_DASHBOARD_APPLICATION_NAME=my-app');
+ expect(command).toContain('-e ASPIRE_DASHBOARD_DATA_DIRECTORY=/dashboard-data');
+ expect(command).toContain('-e ASPIRE_DASHBOARD_PERSISTENCE_MODE=run');
+ }
+ });
+
+ test.each([
+ 'latest',
+ '13',
+ '13.6',
+ '13.5',
+ '14.0',
+ '13.6.1',
+ '13.6.1-amd64',
+ 'preview_1',
+ 'Preview.1',
+ '_build',
+ 'a'.repeat(128),
+ ])('detects the legacy Docker tag %s in both channels', (tag) => {
+ for (const repository of ['dotnet/aspire-dashboard', 'dotnet/nightly/aspire-dashboard']) {
+ const image = `mcr.microsoft.com/${repository}:${tag}`;
+ expect(legacyImageReferences(`image: "${image}"`)).toEqual([image]);
+ expect(legacyImageReferences(image)).toEqual([image]);
+ expect(legacyImageReferences(`${image}@sha256:${'a'.repeat(64)}`)).toEqual([image]);
+ }
+ });
+
+ test('uses canonical tagged image references throughout active docs in all locales', () => {
+ const legacyImages: string[] = [];
+ for (const file of readdirSync(docsRoot, { recursive: true, encoding: 'utf8' })) {
+ if (!/\.mdx?$/.test(file) || /(?:^|[\\/])whats-new[\\/]aspire-\d/.test(file)) {
+ continue;
+ }
+ const images = legacyImageReferences(readDoc(file));
+ legacyImages.push(...images.map((image) => `${file}: ${image}`));
+ }
+ expect(legacyImages).toEqual([]);
+ });
+});
+
+describe('deployment example dashboard image references', () => {
+ test.each([
+ ['get-started/deploy-first-app.mdx', nightlyImage],
+ ['ja/get-started/deploy-first-app.mdx', versionedNightlyImage],
+ ])('%s preserves its documented nightly image selection', (file, image) => {
+ const images = [...readDoc(file).matchAll(/image: "(mcr\.microsoft\.com\/[^"]+)"/g)].map(
+ (match) => match[1]
+ );
+ expect(images).toEqual([image, image]);
+ });
+
+ test('distinguishes the English floating examples from installed publisher output', () => {
+ const source = readDoc('get-started/deploy-first-app.mdx');
+ expect(source).toContain(`intentionally select \`${nightlyImage}\``);
+ expect(source).toContain('Your installed Aspire publisher can generate a different repository');
+ expect(source).toContain('/dashboard/standalone/#container-image-repositories-and-migration');
+ });
+});
+
+describe('standalone dashboard sample image', () => {
+ test('preserves the upstream nightly version pin in both README fields', () => {
+ const sample = samples.find((entry) => entry.name === 'standalone-dashboard');
+ expect(sample).toBeDefined();
+ for (const field of ['readme', 'readmeRaw'] as const) {
+ const source = sample![field];
+ const images = source.match(/mcr\.microsoft\.com\/[^\s`]+/g);
+ expect(images).toEqual([versionedNightlyImage, versionedNightlyImage]);
+ expect(source).toContain(`--name aspire-dashboard ${versionedNightlyImage}`);
+ expect(source).toContain(`\`${versionedNightlyImage}\` prerelease image.`);
+ }
+ });
+});
From 5c9d532cfc803eb1844f782bd05c5eb4d6cd903f Mon Sep 17 00:00:00 2001
From: James Newton-King
Date: Mon, 12 Oct 2026 22:13:30 +0800
Subject: [PATCH 03/12] Apply batched suggestions from code review
Co-authored-by: James Newton-King
---
src/frontend/src/content/docs/dashboard/configuration.mdx | 2 +-
.../docs/dashboard/microsoft-collected-dashboard-telemetry.mdx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/frontend/src/content/docs/dashboard/configuration.mdx b/src/frontend/src/content/docs/dashboard/configuration.mdx
index 0439b93b6..6bcb9b460 100644
--- a/src/frontend/src/content/docs/dashboard/configuration.mdx
+++ b/src/frontend/src/content/docs/dashboard/configuration.mdx
@@ -317,7 +317,7 @@ Telemetry limits have different scopes depending upon the telemetry type:
| Option | Description |
|--------|-------------|
| `Dashboard:ApplicationName` Default: `Aspire` | The logical application name used to partition persisted data and to scope authentication and antiforgery cookie names. The AppHost supplies its application name automatically. Set it with the `ASPIRE_DASHBOARD_APPLICATION_NAME` environment variable. Configure a distinct name for dashboards whose cookies should be kept separate; see [Cookie scoping by application name](/dashboard/security-considerations/#cookie-scoping-by-application-name). |
-| `Dashboard:LaunchContext` Default: `null` | The launch context reported in dashboard startup telemetry, such as `apphost`, `cli`, or `container`. Set it with the `DASHBOARD__LAUNCHCONTEXT` environment variable. The AppHost and the `aspire dashboard run` CLI command set this automatically; container deployments can set `container` explicitly. Values are matched case-insensitively, and missing or unrecognized values are reported as `unknown`. See [Microsoft-collected dashboard telemetry](/dashboard/microsoft-collected-dashboard-telemetry/). |
+| `Dashboard:LaunchContext` Default: `null` | The launch context reported in dashboard startup telemetry, such as `apphost`, `cli`, or `container`. The AppHost and the `aspire dashboard run` CLI command set this automatically; container deployments can set `container` explicitly. See [Microsoft-collected dashboard telemetry](/dashboard/microsoft-collected-dashboard-telemetry/). |
| `Dashboard:UI:DisableResourceGraph` Default: `false` | Disables displaying the resource graph UI in the dashboard. |
| `Dashboard:UI:DisableImport` Default: `false` | Disables the telemetry import UI in the dashboard. |
| `Dashboard:UI:DisableAgentHelp` Default: `false` | Disables the **AI Agents** button in the dashboard header. When `false`, a button is shown in the header that opens a dialog with instructions for using AI coding agents with the dashboard. |
diff --git a/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx b/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx
index 9083d803b..dd88f6b8b 100644
--- a/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx
+++ b/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx
@@ -77,7 +77,7 @@ The Aspire dashboard doesn't collect telemetry on Visual Studio versions `< 17.1
| 9.3 | OTel data processing times. | — |
| 9.3 | Dashboard-related unhandled exceptions. | — |
| 9.3 | GitHub Copilot usage statistics. | — |
-| 9.3 | GitHub Copilot help/unhelp feedback. | — |
+| 17.0 | Dashboard startup. | — |
## See also
From 145095613c615a81732b2deba2509cf1f54fd487 Mon Sep 17 00:00:00 2001
From: James Newton-King
Date: Mon, 12 Oct 2026 22:14:11 +0800
Subject: [PATCH 04/12] Apply suggestion from @JamesNK
---
.../microsoft-collected-dashboard-telemetry.mdx | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx b/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx
index dd88f6b8b..5fe75aab4 100644
--- a/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx
+++ b/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx
@@ -45,19 +45,6 @@ Alternatively, you can opt-out of telemetry collection by disabling telemetry co
When dashboard usage telemetry is enabled, there's a disclosure statement at the bottom of the settings panel, informing you that telemetry is enabled. This disclosure statement appears when usage telemetry is enabled.
-## Startup telemetry
-
-Separately from the IDE-scoped usage telemetry described above, the dashboard always records an `aspire/dashboard/startup` event when it starts, regardless of how it's launched (AppHost, the `aspire dashboard run` CLI command, standalone, or a deployed container). This event records:
-
-- The startup result (success or failure).
-- The elapsed startup duration, in milliseconds.
-- The launch context: `apphost`, `cli`, `container`, or `unknown`.
-- For failed startups, an error type: `invalid_config` for options validation failures, `address_in_use` for address conflicts, `canceled` for token-driven startup cancellation, or the exception type for other failures.
-
-The launch context is read from the `Dashboard:LaunchContext` configuration option (`DASHBOARD__LAUNCHCONTEXT` environment variable). The AppHost and the `aspire dashboard run` CLI command set this automatically; container deployments can set it explicitly to `container`. Values are matched case-insensitively, and missing or unrecognized values are reported as `unknown`. See [dashboard configuration](/dashboard/configuration/#other).
-
-Startup telemetry is sent using the same Azure Monitor reporting path, and the same `ASPIRE_DASHBOARD_TELEMETRY_OPTOUT` opt-out described above, as other dashboard usage and error telemetry.
-
## Data points
Aspire dashboard usage telemetry doesn't collect personal data, such as, IP addresses or use browser fingerprinting. It doesn't scan your code and doesn't extract source code, authorship, or deployment configuration. The data is sent securely to Microsoft using Azure Monitor through existing telemetry APIs in Visual Studio and Visual Studio Code.
From 32f2d1c895952771c0d58924ef8c9115a37b3a0a Mon Sep 17 00:00:00 2001
From: Samson Amaugo
Date: Mon, 12 Oct 2026 15:33:12 +0100
Subject: [PATCH 05/12] Fix the dashboard container persistence example: mount
the volume where the non-root user can write (#1869)
## Summary
The Docker example under "Persist data between container runs" on the
standalone dashboard page does not work as written. The container exits
a few seconds after starting.
**Steps to reproduce**
Run the two commands from that section unchanged:
docker volume create aspire-dashboard-data
docker run --rm -d --name aspire-dashboard -p 18888:18888 -p 4317:18889
-p 4318:18890 --mount
type=volume,source=aspire-dashboard-data,target=/dashboard-data -e
ASPIRE_DASHBOARD_APPLICATION_NAME=my-app -e
ASPIRE_DASHBOARD_DATA_DIRECTORY=/dashboard-data -e
ASPIRE_DASHBOARD_PERSISTENCE_MODE=run
mcr.microsoft.com/dotnet/aspire-dashboard:latest
**Result**
The container exits with code 100. Because the example uses `--rm`, the
container and its logs are removed, so the reader sees no error. Running
it without `--rm` shows:
Aspire dashboard version: 13.6.1
System.UnauthorizedAccessException: Access to the path
'/dashboard-data/runs' is denied.
**Cause**
The image runs as a non-root user (uid 1654). `/dashboard-data` does not
exist in the image, so Docker creates the new named volume owned by
root, and the dashboard cannot create its `runs` directory in it.
**Change**
- Mount the volume at `/home/app`, the container user's home directory.
Docker gives a new volume the ownership of the directory it is mounted
over, so the volume is writable by the dashboard.
- Set `ASPIRE_DASHBOARD_DATA_DIRECTORY=/home/app/dashboard-data`.
- Add one sentence under the example explaining why this path is used.
Both the Bash and PowerShell tabs are updated.
An alternative would be to create `/dashboard-data` in the image with
the right owner, which would make the original example work unchanged.
I'm happy to adjust this PR if that is preferred.
## Third-party links and affiliations
None
## Validation
- Reproduced the failure with the original example on
`mcr.microsoft.com/dotnet/aspire-dashboard:latest` (13.6.1), Docker
29.4.3, Docker Desktop on macOS, and on Docker on Linux.
- Ran the corrected example twice in a row in `run` mode: the container
started with no errors both times, and the volume contained the saved
run from the first start.
- Also ran it in `Resume` mode with an application sending OTLP
telemetry, removed the container, started a new one on the same volume,
and confirmed the earlier traces were still shown.
Co-authored-by: Claude Opus 5.5
---
src/frontend/src/content/docs/dashboard/standalone.mdx | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/frontend/src/content/docs/dashboard/standalone.mdx b/src/frontend/src/content/docs/dashboard/standalone.mdx
index 9cb162d46..3c7811156 100644
--- a/src/frontend/src/content/docs/dashboard/standalone.mdx
+++ b/src/frontend/src/content/docs/dashboard/standalone.mdx
@@ -279,9 +279,9 @@ docker run --rm -d --name aspire-dashboard \
-p 18888:18888 \
-p 4317:18889 \
-p 4318:18890 \
- --mount type=volume,source=aspire-dashboard-data,target=/dashboard-data \
+ --mount type=volume,source=aspire-dashboard-data,target=/home/app \
-e ASPIRE_DASHBOARD_APPLICATION_NAME=my-app \
- -e ASPIRE_DASHBOARD_DATA_DIRECTORY=/dashboard-data \
+ -e ASPIRE_DASHBOARD_DATA_DIRECTORY=/home/app/dashboard-data \
-e ASPIRE_DASHBOARD_PERSISTENCE_MODE=run \
mcr.microsoft.com/aspire/dashboard:latest
```
@@ -296,9 +296,9 @@ docker run --rm -d --name aspire-dashboard `
-p 18888:18888 `
-p 4317:18889 `
-p 4318:18890 `
- --mount type=volume,source=aspire-dashboard-data,target=/dashboard-data `
+ --mount type=volume,source=aspire-dashboard-data,target=/home/app `
-e ASPIRE_DASHBOARD_APPLICATION_NAME=my-app `
- -e ASPIRE_DASHBOARD_DATA_DIRECTORY=/dashboard-data `
+ -e ASPIRE_DASHBOARD_DATA_DIRECTORY=/home/app/dashboard-data `
-e ASPIRE_DASHBOARD_PERSISTENCE_MODE=run `
mcr.microsoft.com/aspire/dashboard:latest
```
@@ -306,6 +306,8 @@ docker run --rm -d --name aspire-dashboard `
+The dashboard container runs as a non-root user, so the volume is mounted at that user's home directory, `/home/app`. Docker gives a new volume the ownership of the directory it's mounted over. A volume mounted at a path that doesn't exist in the image is owned by root, and the dashboard fails to start with an "Access to the path is denied" error.
+
Stop the container and run the same `docker run` command again to access the retained data. Keep the volume, application name, and persistence mode unchanged between container runs.
Persisted telemetry can contain sensitive data. Restrict access to the volume and see [Aspire dashboard data persistence](/dashboard/data-persistence/) for persistence behavior and [Dashboard security considerations](/dashboard/security-considerations/#protect-persisted-data) for security requirements.
From 8929ab18b0631c82de22ae94aa9049412cdd7316 Mon Sep 17 00:00:00 2001
From: James Newton-King
Date: Mon, 12 Oct 2026 22:41:40 +0800
Subject: [PATCH 06/12] Apply suggestion from @JamesNK
---
.../docs/dashboard/microsoft-collected-dashboard-telemetry.mdx | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx b/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx
index 5fe75aab4..a98ac1d4d 100644
--- a/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx
+++ b/src/frontend/src/content/docs/dashboard/microsoft-collected-dashboard-telemetry.mdx
@@ -63,7 +63,6 @@ The Aspire dashboard doesn't collect telemetry on Visual Studio versions `< 17.1
| 9.3 | Resource restart times. | — |
| 9.3 | OTel data processing times. | — |
| 9.3 | Dashboard-related unhandled exceptions. | — |
-| 9.3 | GitHub Copilot usage statistics. | — |
| 17.0 | Dashboard startup. | — |
## See also
From c1e2e160c74deb62576d5cb360131b03b55b2bea Mon Sep 17 00:00:00 2001
From: David Pine
Date: Tue, 13 Oct 2026 08:27:49 -0500
Subject: [PATCH 07/12] Restore landing page performance and serve the site
over HTTP/2 (#1836)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## Summary
The landing page's Lighthouse score slipped from the high 80s to the
high 70s (mobile, simulated slow 4G), and PageSpeed Insights reported
70. Rather than guess, I built a production-like lab (the production
build output served over HTTPS + **HTTP/1.1** + Brotli with the same
cache headers, because that is what `aspire.dev` serves today), ran
Lighthouse 13 with the mobile preset (simulated Slow 4G, 4× CPU) in a
fresh browser profile per run, and bisected the page across the commits
that changed it. Every number below is the median of five cold runs.
There is one commit per cause (plus one review fix to the banner
script), so any of them can be reverted on its own.
### Where it regressed
| Build (HTTP/1.1) | Score | FCP | LCP | CLS | Requests |
| --- | --- | --- | --- | --- | --- |
| Before the redesign (`0b54dce5`) | 87 | 2.33 s | 3.60 s | 0.004 | 43 |
| Landing redesign (#1420) | 84 | 2.63 s | 3.96 s | 0.005 | 75 |
| Release 13.5 content (includes the banner auto-expiry, #1448) | 82 |
2.63 s | 3.84 s | 0.093 | 75 |
| `main` (`a097c7e7`) | 78 | 2.78 s | 4.28 s | 0.105 | 88 |
| **This PR** | **86** (85, 86 and 87 in three separate batches) |
**2.25 s** | **3.77 s** | **0.001** | **61** |
Serving the same bytes over HTTP/2: `main` 90 → this PR 93.
### Causes and fixes
I measured each lever on `main` in isolation before changing any code.
| Cause | Fix | Alone |
| --- | --- | --- |
| The banner (#1448) is rendered `hidden` and a bundled script reveals
it after first paint, shifting the whole page down (CLS 0.09). | Render
it visible and hide it with a tiny pre-paint script when the reader
dismissed it or its sunset/auto-dismiss window has passed (the absolute
sunset is checked before storage is read, so blocked storage cannot
paint an expired banner). A test runs the emitted script against
`resolveBannerVisibility` so the two cannot drift. | 78 → 80 |
| Poppins is declared in `site.css`, so it is only discovered after that
stylesheet downloads; text re-flows when it swaps in (CLS 0.08). |
Preload the three weights the first viewport uses. Each is still fetched
once. | 78 → 81 (FCP −0.30 s) |
| The redesign set `loading="eager"` on 35 icons thousands of pixels
below the fold; on HTTP/1.1 they compete with CSS and fonts for six
connections. | Use the default lazy loading again. Native lazy loading
never starts for `display: none` content, so a small helper
(`loadLazyImagesNearViewport`) loads the icons in hidden environment
panels and the inactive AppHost language as their section nears the
viewport, and switching panels or language stays instant. | 78 → 81 (LCP
−0.32 s, 88 → 61 requests) |
| `AsciinemaPlayer` imported its CSS from a bundled `
>
)
}
@@ -79,6 +110,7 @@ const firstSeenKey = bannerHash
// so shipped behavior can't diverge from the tests. This bundled module reads
// its per-banner config from `data-*` attributes on the element (a bundled
// script can't use `define:vars`), leaving only DOM/localStorage plumbing here.
+ // The pre-paint script above applies the same decision before first paint.
import { parseFirstSeen, resolveBannerVisibility } from '@utils/banner-expiry';
const initializeBanner = () => {
diff --git a/src/frontend/src/components/starlight/Head.astro b/src/frontend/src/components/starlight/Head.astro
index 9fce57471..ef3ae838a 100644
--- a/src/frontend/src/components/starlight/Head.astro
+++ b/src/frontend/src/components/starlight/Head.astro
@@ -1,5 +1,8 @@
---
import 'tippy.js/dist/tippy.css';
+import poppinsRegular from '@fontsource/poppins/files/poppins-latin-400-normal.woff2?url';
+import poppinsSemiBold from '@fontsource/poppins/files/poppins-latin-600-normal.woff2?url';
+import poppinsBold from '@fontsource/poppins/files/poppins-latin-700-normal.woff2?url';
import DefaultHead from '@astrojs/starlight/components/Head.astro';
import { ClientRouter } from 'astro:transitions';
import AccessibleCodeButtons from '../AccessibleCodeButtons.astro';
@@ -7,6 +10,10 @@ import SiteTour from '../SiteTour.astro';
import { getStructuredData } from '@utils/structured-data';
import { getOgMetadata } from '@utils/page-metadata';
+// The Poppins weights that text in the first viewport renders with. The same files back the
+// @font-face rules in site.css, so these resolve to the already-emitted assets.
+const preloadedFonts = [poppinsRegular, poppinsSemiBold, poppinsBold];
+
const repoUrl = (
import.meta.env.PUBLIC_REPO_URL ||
import.meta.env.REPO_URL ||
@@ -40,6 +47,18 @@ function computeSourceUrl() {
+{
+ /*
+ * Fonts are declared in site.css, so without these the browser only discovers them after that
+ * stylesheet has downloaded and parsed. Preloading starts the downloads with the document and
+ * lets the text paint in Poppins instead of swapping in (and re-flowing) after first paint.
+ */
+}
+{
+ preloadedFonts.map((href) => (
+
+ ))
+}
")
+ ).toBe(true);
+ expect(
+ importsCssFromBundledScript(
+ "---\nimport 'pkg/player.css';\n---\n"
+ )
+ ).toBe(false);
+ expect(
+ importsCssFromBundledScript(
+ "---\n// not a "
+ )
+ ).toBe(false);
+ expect(
+ importsCssFromBundledScript(
+ "---\n---\n"
+ )
+ ).toBe(false);
+ });
+
+ test('images that opt out of lazy loading', () => {
+ expect(optsOutOfLazyLoading(' ')).toBe(true);
+ expect(
+ optsOutOfLazyLoading(" ")
+ ).toBe(true);
+ expect(optsOutOfLazyLoading("const props = { loading: 'eager' as const };")).toBe(true);
+ expect(optsOutOfLazyLoading("images.forEach((image) => { image.loading = 'eager'; });")).toBe(
+ false
+ );
+ expect(optsOutOfLazyLoading(' ')).toBe(false);
+ });
+ });
+});
From 73158d1929860ac896485d12ad0d5d8cd5991b57 Mon Sep 17 00:00:00 2001
From: Alistair Matthews
Date: Tue, 13 Oct 2026 17:07:33 +0100
Subject: [PATCH 08/12] Propagate the API Reference Astro component (#1849)
## Summary
The API Reference Astro component is complete and deployed but only used
in **Get Started** Aspire.dev content. This PR propagates its usage to
all other content files where appropriate:
- It's only used on the first reference to a given API on each page.
- It's only used where there is both a C# and a JavaScript version of
the referenced API.
Fixes: #1848
## Third-party links and affiliations
None
## Validation
- `pnpm test:unit:api-reference`
- `pnpm run dev` and manually check some instances of the `ApiReference`
component.
---------
Co-authored-by: David Pine
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Copilot-Session: 92354b96-5c95-491b-93fe-453cb0e1499d
---
.../app-host/certificate-configuration.mdx | 11 ++---
.../content/docs/app-host/container-files.mdx | 9 ++--
.../docs/app-host/container-registry.mdx | 5 ++-
.../src/content/docs/app-host/eventing.mdx | 13 +++---
.../docs/app-host/executable-resources.mdx | 9 ++--
.../app-host/migrate-from-docker-compose.mdx | 23 +++++-----
.../docs/app-host/resource-lifetimes.mdx | 15 ++++---
.../docs/app-host/typescript-apphost.mdx | 5 ++-
.../content/docs/app-host/with-terminal.mdx | 7 +--
.../content/docs/app-host/withdockerfile.mdx | 11 ++---
.../multi-language-architecture.mdx | 5 ++-
.../architecture/resource-api-patterns.mdx | 3 +-
.../docs/architecture/resource-examples.mdx | 2 +
.../architecture/resource-hierarchies.mdx | 7 +--
.../docs/architecture/resource-publishing.mdx | 3 +-
.../docs/dashboard/ephemeral-terminals.mdx | 4 +-
.../src/content/docs/dashboard/explore.mdx | 5 ++-
.../dashboard/telemetry-after-deployment.mdx | 3 +-
.../src/content/docs/dashboard/terminals.mdx | 5 ++-
.../docs/deployment/azure/app-service.mdx | 5 ++-
.../deployment/azure/azure-developer-cli.mdx | 5 ++-
.../azure/azure-security-best-practices.mdx | 5 ++-
.../docs/deployment/azure/container-apps.mdx | 9 ++--
.../docs/deployment/azure/sandboxes.mdx | 15 ++++---
.../docs/deployment/custom-deployments.mdx | 5 ++-
.../docs/deployment/deploy-with-aspire.mdx | 3 +-
.../docs/deployment/docker-compose.mdx | 23 +++++-----
.../content/docs/deployment/environments.mdx | 5 ++-
.../docs/deployment/javascript-apps.mdx | 27 +++++------
.../deployment/kubernetes-gateway-aks.mdx | 9 ++--
.../deployment/kubernetes-ingress-aks.mdx | 9 ++--
.../docs/deployment/kubernetes-ingress.mdx | 7 +--
.../docs/deployment/kubernetes/aks.mdx | 25 ++++++-----
.../docs/deployment/kubernetes/clusters.mdx | 9 ++--
.../deployment/kubernetes/helm-charts.mdx | 3 +-
.../kubernetes/persistent-volumes.mdx | 5 ++-
.../src/content/docs/deployment/pipelines.mdx | 9 ++--
.../docs/diagnostics/aspireacadomains001.mdx | 3 +-
.../docs/diagnostics/aspireacanaming001.mdx | 3 +-
.../docs/diagnostics/aspireazure002.mdx | 3 +-
.../docs/diagnostics/aspireazure003.mdx | 3 +-
.../docs/diagnostics/aspireblazor001.mdx | 3 +-
.../docs/diagnostics/aspirebrowserlogs001.mdx | 3 +-
.../diagnostics/aspirecertificates001.mdx | 5 ++-
.../docs/diagnostics/aspirecommand001.mdx | 3 +-
.../docs/diagnostics/aspirecompute002.mdx | 3 +-
.../docs/diagnostics/aspirecompute003.mdx | 3 +-
.../docs/diagnostics/aspirecosmosdb001.mdx | 3 +-
.../docs/diagnostics/aspirecsharpapps001.mdx | 3 +-
.../aspiredockerfilebuilder001.mdx | 3 +-
.../diagnostics/aspiredotnetproject001.mdx | 5 ++-
.../docs/diagnostics/aspiredotnettool001.mdx | 3 +-
.../docs/diagnostics/aspiredurabletask001.mdx | 11 ++---
.../docs/diagnostics/aspireextension001.mdx | 3 +-
.../diagnostics/aspirehostingpython001.mdx | 3 +-
.../docs/diagnostics/aspirejavascript001.mdx | 11 ++---
.../content/docs/diagnostics/aspiremcp001.mdx | 3 +-
.../docs/diagnostics/aspirepersistence001.mdx | 9 ++--
.../docs/diagnostics/aspirepipelines003.mdx | 3 +-
.../docs/diagnostics/aspirepostgres001.mdx | 5 ++-
.../docs/diagnostics/aspireprobes001.mdx | 3 +-
.../diagnostics/aspireprocesscommand001.mdx | 3 +-
.../docs/diagnostics/aspireprojects001.mdx | 3 +-
.../docs/diagnostics/aspireradius003.mdx | 1 +
.../docs/diagnostics/aspireterminal001.mdx | 3 +-
.../docs/diagnostics/aspireusersecrets001.mdx | 5 ++-
.../src/content/docs/diagnostics/overview.mdx | 14 +++---
.../docs/extensibility/custom-resources.mdx | 5 ++-
.../extensibility/interaction-service.mdx | 3 +-
.../multi-language-integration-authoring.mdx | 3 +-
.../fundamentals/annotations-overview.mdx | 9 ++--
.../fundamentals/container-networking.mdx | 3 +-
.../fundamentals/custom-resource-commands.mdx | 5 ++-
.../fundamentals/custom-resource-urls.mdx | 11 ++---
.../fundamentals/environment-variables.mdx | 5 ++-
.../docs/fundamentals/external-parameters.mdx | 13 +++---
.../docs/fundamentals/health-checks.mdx | 7 +--
.../docs/fundamentals/http-commands.mdx | 3 +-
.../docs/fundamentals/networking-overview.mdx | 9 ++--
.../fundamentals/persist-data-volumes.mdx | 13 +++---
.../docs/fundamentals/service-discovery.mdx | 5 ++-
.../get-started/add-aspire-existing-app.mdx | 2 +-
.../docs/get-started/ai-coding-agents.mdx | 1 +
.../content/docs/get-started/aspire-sdk.mdx | 3 +-
.../get-started/aspire-vscode-extension.mdx | 1 +
.../ai/github-models/github-models-host.mdx | 5 ++-
.../integrations/ai/ollama/ollama-connect.mdx | 3 +-
.../integrations/ai/ollama/ollama-host.mdx | 9 ++--
.../integrations/ai/openai/openai-host.mdx | 9 ++--
.../caching/garnet/garnet-connect.mdx | 3 +-
.../caching/garnet/garnet-host.mdx | 7 +--
.../redis-distributed-get-started.mdx | 3 +-
.../redis-distributed-host.mdx | 11 ++---
.../integrations/caching/redis-extensions.mdx | 5 ++-
.../caching/redis/redis-connect.mdx | 3 +-
.../integrations/caching/redis/redis-host.mdx | 9 ++--
.../caching/valkey/valkey-connect.mdx | 3 +-
.../caching/valkey/valkey-host.mdx | 9 ++--
.../integrations/cloud/azure/aks/index.mdx | 9 ++--
.../azure-ai-foundry-connect.mdx | 3 +-
.../azure-ai-foundry-get-started.mdx | 5 ++-
.../azure-ai-foundry-host.mdx | 43 +++++++++---------
.../azure-ai-inference-host.mdx | 3 +-
.../azure-ai-search/azure-ai-search-host.mdx | 9 ++--
.../azure-app-configuration-host.mdx | 19 ++++----
.../azure-app-service-get-started.mdx | 3 +-
.../azure-app-service-host.mdx | 13 +++---
.../azure/azure-application-insights.mdx | 9 ++--
.../azure-cache-redis-connect.mdx | 5 ++-
.../azure-cache-redis-host.mdx | 13 +++---
.../cloud/azure/azure-connector-namespace.mdx | 5 ++-
.../azure-container-registry-connect.mdx | 5 ++-
.../azure-container-registry-get-started.mdx | 3 +-
.../azure-container-registry-host.mdx | 15 ++++---
.../azure-cosmos-db-connect.mdx | 5 ++-
.../azure-cosmos-db/azure-cosmos-db-host.mdx | 27 +++++------
.../cloud/azure/azure-data-explorer.mdx | 11 ++---
.../cloud/azure/azure-default-credential.mdx | 3 +-
.../azure-event-hubs-host.mdx | 19 ++++----
.../cloud/azure/azure-front-door.mdx | 11 ++---
.../azure-functions-connect.mdx | 3 +-
.../azure-functions-get-started.mdx | 3 +-
.../azure-functions/azure-functions-host.mdx | 15 ++++---
.../azure-key-vault/azure-key-vault-host.mdx | 17 +++----
.../cloud/azure/azure-log-analytics.mdx | 7 +--
.../azure/azure-openai/azure-openai-host.mdx | 13 +++---
.../azure-postgresql-connect.mdx | 3 +-
.../azure-postgresql-get-started.mdx | 3 +-
.../azure-postgresql-host.mdx | 19 ++++----
.../azure-service-bus-host.mdx | 21 ++++-----
.../azure-signalr/azure-signalr-connect.mdx | 3 +-
.../azure-signalr/azure-signalr-host.mdx | 13 +++---
.../azure-sql-database-connect.mdx | 5 ++-
.../azure-sql-database-get-started.mdx | 5 ++-
.../azure-sql-database-host.mdx | 19 ++++----
.../azure-storage-blobs-connect.mdx | 7 +--
.../azure-storage-blobs-host.mdx | 21 ++++-----
.../cloud/azure/azure-storage-datalake.mdx | 7 +--
.../azure-storage-queues-connect.mdx | 3 +-
.../azure-storage-queues-get-started.mdx | 3 +-
.../azure-storage-queues-host.mdx | 13 +++---
.../azure-storage-tables-connect.mdx | 3 +-
.../azure-storage-tables-get-started.mdx | 3 +-
.../azure-storage-tables-host.mdx | 21 ++++-----
.../cloud/azure/azure-virtual-network.mdx | 37 +++++++--------
.../azure-web-pubsub-connect.mdx | 3 +-
.../azure-web-pubsub-host.mdx | 13 +++---
.../cloud/azure/configure-container-apps.mdx | 17 +++----
.../cloud/azure/container-app-jobs.mdx | 9 ++--
.../cloud/azure/customize-resources.mdx | 13 +++---
.../cloud/azure/local-provisioning.mdx | 5 ++-
.../integrations/cloud/azure/overview.mdx | 13 +++---
.../cloud/azure/user-assigned-identity.mdx | 7 +--
.../docs/integrations/compute/docker.mdx | 31 ++++++-------
.../docs/integrations/compute/floci.mdx | 7 +--
.../content/docs/integrations/compute/k3s.mdx | 17 +++----
.../docs/integrations/compute/kubernetes.mdx | 13 +++---
.../hosting-integrations.mdx | 7 +--
.../secure-communication.mdx | 3 +-
.../clickhouse/clickhouse-connect.mdx | 3 +-
.../databases/clickhouse/clickhouse-host.mdx | 5 ++-
.../azure-cosmos-db/azure-cosmos-db-host.mdx | 11 ++---
.../azure-sql/azure-sql-get-started.mdx | 3 +-
.../efcore/azure-sql/azure-sql-host.mdx | 11 ++---
.../databases/efcore/migrations.mdx | 9 ++--
.../efcore/mongodb/mongodb-efcore-connect.mdx | 3 +-
.../databases/efcore/mysql/mysql-connect.mdx | 3 +-
.../databases/efcore/oracle/oracle-host.mdx | 9 ++--
.../efcore/postgres/postgresql-connect.mdx | 3 +-
.../databases/efcore/seed-database.mdx | 5 ++-
.../efcore/sql-server/sql-server-connect.mdx | 3 +-
.../elasticsearch/elasticsearch-connect.mdx | 5 ++-
.../elasticsearch/elasticsearch-host.mdx | 3 +-
.../databases/kurrentdb/kurrentdb-connect.mdx | 3 +-
.../meilisearch/meilisearch-connect.mdx | 3 +-
.../meilisearch/meilisearch-host.mdx | 7 +--
.../databases/milvus/milvus-host.mdx | 5 ++-
.../databases/mongodb/mongodb-extensions.mdx | 5 ++-
.../databases/mongodb/mongodb-host.mdx | 25 ++++++-----
.../databases/mysql/mysql-extensions.mdx | 7 +--
.../databases/mysql/mysql-get-started.mdx | 3 +-
.../databases/mysql/mysql-host.mdx | 9 ++--
.../databases/postgres/postgres-host.mdx | 13 +++---
.../postgres/postgresql-extensions.mdx | 9 ++--
.../databases/ravendb/ravendb-connect.mdx | 3 +-
.../databases/ravendb/ravendb-host.mdx | 3 +-
.../sql-server/sql-server-extensions.mdx | 7 +--
.../databases/sql-server/sql-server-host.mdx | 9 ++--
.../databases/sqlite/sqlite-connect.mdx | 3 +-
.../databases/sqlite/sqlite-get-started.mdx | 3 +-
.../databases/sqlite/sqlite-host.mdx | 5 ++-
.../databases/surrealdb/surrealdb-connect.mdx | 3 +-
.../databases/surrealdb/surrealdb-host.mdx | 7 +--
.../integrations/devtools/browser-logs.mdx | 3 +-
.../integrations/devtools/dab/dab-host.mdx | 3 +-
.../integrations/devtools/dev-tunnels.mdx | 7 +--
.../devtools/flagd/flagd-host.mdx | 5 ++-
.../devtools/goff/goff-connect.mdx | 3 +-
.../integrations/devtools/goff/goff-host.mdx | 9 ++--
.../docs/integrations/devtools/k6/k6-host.mdx | 11 ++---
.../devtools/mailpit/mailpit-connect.mdx | 3 +-
.../sql-projects/sql-projects-host.mdx | 13 +++---
.../integrations/dotnet/blazor-connect.mdx | 3 +-
.../dotnet/blazor-get-started.mdx | 5 ++-
.../integrations/dotnet/blazor-hosting.mdx | 2 +-
.../dotnet/csharp-file-based-apps.mdx | 5 ++-
.../dotnet/dotnet-tool-resources.mdx | 15 ++++---
.../integrations/dotnet/launch-profiles.mdx | 7 +--
.../content/docs/integrations/dotnet/maui.mdx | 5 ++-
.../integrations/dotnet/project-resources.mdx | 15 ++++---
.../docs/integrations/frameworks/bun-apps.mdx | 5 ++-
.../frameworks/deno/deno-get-started.mdx | 3 +-
.../frameworks/deno/deno-host.mdx | 11 ++---
.../frameworks/dotnet/dotnet-get-started.mdx | 5 ++-
.../frameworks/dotnet/dotnet-host.mdx | 9 ++--
.../frameworks/go/go-get-started.mdx | 3 +-
.../integrations/frameworks/go/go-host.mdx | 19 ++++----
.../frameworks/java/java-connect.mdx | 4 +-
.../integrations/frameworks/javascript.mdx | 31 ++++++-------
.../frameworks/nodejs-extensions.mdx | 11 ++---
.../docs/integrations/frameworks/orleans.mdx | 5 ++-
.../frameworks/perl/perl-get-started.mdx | 3 +-
.../frameworks/perl/perl-host.mdx | 23 +++++-----
.../frameworks/powershell/powershell-host.mdx | 11 ++---
.../docs/integrations/frameworks/python.mdx | 25 ++++++-----
.../frameworks/rust/rust-host.mdx | 2 +-
.../integrations/frameworks/wpf-winforms.mdx | 3 +-
.../apache-kafka/apache-kafka-host.mdx | 3 +-
.../messaging/lavinmq/lavinmq-host.mdx | 5 ++-
.../messaging/nats/nats-get-started.mdx | 3 +-
.../integrations/messaging/nats/nats-host.mdx | 3 +-
.../messaging/rabbitmq/rabbitmq-connect.mdx | 3 +-
.../messaging/rabbitmq/rabbitmq-host.mdx | 7 +--
.../observability/seq/seq-connect.mdx | 3 +-
.../integrations/reverse-proxies/yarp.mdx | 11 ++---
.../docs/integrations/security/keycloak.mdx | 19 ++++----
.../ja/app-host/certificate-configuration.mdx | 11 ++---
.../docs/ja/app-host/container-files.mdx | 9 ++--
.../docs/ja/app-host/container-registry.mdx | 5 ++-
.../src/content/docs/ja/app-host/eventing.mdx | 13 +++---
.../docs/ja/app-host/executable-resources.mdx | 9 ++--
.../app-host/migrate-from-docker-compose.mdx | 21 ++++-----
.../docs/ja/app-host/resource-lifetimes.mdx | 5 ++-
.../docs/ja/app-host/withdockerfile.mdx | 9 ++--
.../multi-language-architecture.mdx | 5 ++-
.../ja/architecture/resource-api-patterns.mdx | 3 +-
.../ja/architecture/resource-examples.mdx | 2 +
.../ja/architecture/resource-hierarchies.mdx | 7 +--
.../ja/architecture/resource-publishing.mdx | 3 +-
.../content/docs/ja/deployment/pipelines.mdx | 9 ++--
.../ja/extensibility/custom-resources.mdx | 5 ++-
.../ja/extensibility/interaction-service.mdx | 3 +-
.../multi-language-integration-authoring.mdx | 3 +-
.../fundamentals/custom-resource-commands.mdx | 3 +-
.../ja/fundamentals/custom-resource-urls.mdx | 11 ++---
.../ja/fundamentals/external-parameters.mdx | 13 +++---
.../docs/ja/fundamentals/health-checks.mdx | 7 +--
.../docs/ja/fundamentals/http-commands.mdx | 3 +-
.../ja/fundamentals/networking-overview.mdx | 9 ++--
.../ja/fundamentals/persist-data-volumes.mdx | 13 +++---
.../ja/fundamentals/service-discovery.mdx | 5 ++-
.../get-started/add-aspire-existing-app.mdx | 9 ++--
.../docs/ja/get-started/aspire-mcp-server.mdx | 3 +-
.../get-started/aspire-vscode-extension.mdx | 1 +
.../docs/ja/get-started/deploy-first-app.mdx | 9 ++--
.../src/content/docs/ja/get-started/faq.mdx | 6 ++-
.../content/docs/ja/get-started/first-app.mdx | 17 +++----
.../ja/get-started/resource-mcp-servers.mdx | 5 ++-
.../docs/ja/get-started/troubleshooting.mdx | 5 ++-
.../integrations/dotnet/launch-profiles.mdx | 7 +--
.../docs/ja/testing/accessing-resources.mdx | 3 +-
.../docs/ja/testing/write-your-first-test.mdx | 3 +-
.../content/docs/ja/whats-new/aspire-13-1.mdx | 11 ++---
.../content/docs/ja/whats-new/aspire-13-2.mdx | 33 +++++++-------
.../content/docs/ja/whats-new/aspire-13-3.mdx | 33 +++++++-------
.../content/docs/ja/whats-new/aspire-13.mdx | 43 +++++++++---------
.../cli/commands/aspire-docs-api-search.mdx | 3 +-
.../reference/cli/commands/aspire-init.mdx | 3 +-
.../docs/testing/accessing-resources.mdx | 3 +-
.../docs/testing/advanced-scenarios.mdx | 7 +--
.../docs/testing/write-your-first-test.mdx | 3 +-
.../content/docs/whats-new/aspire-13-1.mdx | 11 ++---
.../content/docs/whats-new/aspire-13-2.mdx | 35 ++++++++-------
.../content/docs/whats-new/aspire-13-3.mdx | 33 +++++++-------
.../content/docs/whats-new/aspire-13-4.mdx | 33 +++++++-------
.../content/docs/whats-new/aspire-13-5.mdx | 19 ++++----
.../content/docs/whats-new/aspire-13-6.mdx | 43 +++++++++---------
.../src/content/docs/whats-new/aspire-13.mdx | 45 ++++++++++---------
.../src/content/docs/whats-new/aspire-9-1.mdx | 5 ++-
.../src/content/docs/whats-new/aspire-9-2.mdx | 11 ++---
.../src/content/docs/whats-new/aspire-9-3.mdx | 33 +++++++-------
.../src/content/docs/whats-new/aspire-9-4.mdx | 21 ++++-----
.../src/content/docs/whats-new/aspire-9-5.mdx | 23 +++++-----
.../src/content/docs/whats-new/aspire-9.mdx | 13 +++---
.../tests/unit/api-reference.vitest.test.ts | 12 +++++
.../dashboard-image-references.vitest.test.ts | 4 +-
296 files changed, 1444 insertions(+), 1137 deletions(-)
diff --git a/src/frontend/src/content/docs/app-host/certificate-configuration.mdx b/src/frontend/src/content/docs/app-host/certificate-configuration.mdx
index 7acf8fc54..3ade07657 100644
--- a/src/frontend/src/content/docs/app-host/certificate-configuration.mdx
+++ b/src/frontend/src/content/docs/app-host/certificate-configuration.mdx
@@ -6,13 +6,14 @@ description: Configure HTTPS endpoints and certificate trust for Aspire resource
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import OsAwareTabs from '@components/OsAwareTabs.astro';
+import ApiReference from '@components/ApiReference.astro';
Aspire provides two complementary sets of certificate APIs:
1. **HTTPS endpoint APIs**: Configure the certificates that resources use for their own HTTPS endpoints (server authentication)
2. **Certificate trust APIs**: Configure which certificates resources trust when making outbound HTTPS connections (client authentication)
-Both sets of APIs work together to enable secure HTTPS communication during local development. For example, a Vite frontend might use `WithHttpsDeveloperCertificate` to serve HTTPS traffic, while also using `WithDeveloperCertificateTrust` to trust the dashboard's OTLP endpoint certificate.
+Both sets of APIs work together to enable secure HTTPS communication during local development. For example, a Vite frontend might use to serve HTTPS traffic, while also using to trust the dashboard's OTLP endpoint certificate.
Certificate customization only applies at run time. Custom certificates aren't
@@ -151,7 +152,7 @@ HTTPS endpoint configuration determines which certificate a resource presents wh
### Default behavior
-For resources that have a certificate configuration defined with `WithHttpsCertificateConfiguration`, Aspire attempts to configure it to use the development certificate if available. This automatic configuration works for many common resource types including YARP, Redis, and Keycloak containers; Vite based JavaScript apps; and Python apps using Uvicorn.
+For resources that have a certificate configuration defined with , Aspire attempts to configure it to use the development certificate if available. This automatic configuration works for many common resource types including YARP, Redis, and Keycloak containers; Vite based JavaScript apps; and Python apps using Uvicorn.
You can control this behavior using the HTTPS endpoint APIs described below.
@@ -291,7 +292,7 @@ await builder.build().run();
-Use `WithoutHttpsCertificate` when:
+Use when:
- The resource doesn't support HTTPS
- You want to manually configure certificates
@@ -480,7 +481,7 @@ In the preceding example, the certificate bundle is created with custom certific
Certificate trust scopes control how custom certificates interact with a resource's default trusted certificates. Different scopes provide flexibility in managing certificate trust based on your application's requirements.
-The `WithCertificateTrustScope` API accepts a `CertificateTrustScope` value to specify the trust behavior.
+The API accepts a `CertificateTrustScope` value to specify the trust behavior.
#### Available trust scopes
@@ -677,7 +678,7 @@ Default implementations are provided for Node.js, Python, and container resource
#### Configure container certificate paths
-For container resources, you can customize where certificates are stored and accessed using `WithContainerCertificatePaths`:
+For container resources, you can customize where certificates are stored and accessed using :
```csharp title="AppHost.cs"
var builder = DistributedApplication.CreateBuilder(args);
diff --git a/src/frontend/src/content/docs/app-host/container-files.mdx b/src/frontend/src/content/docs/app-host/container-files.mdx
index 8e02c0f3b..080ecfb63 100644
--- a/src/frontend/src/content/docs/app-host/container-files.mdx
+++ b/src/frontend/src/content/docs/app-host/container-files.mdx
@@ -5,11 +5,12 @@ description: Inject files and directories into Aspire container resources at dev
---
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
Aspire provides APIs to inject files and directories into containers, enabling you to configure containerized resources with custom configuration files, scripts, certificates, and other assets. There are two complementary APIs:
-- **`WithContainerFiles`**: Injects files into containers at development time when they start during `aspire run`.
-- **`PublishWithContainerFiles`**: Copies files from one resource's container into another resource's container as build artifacts at publish time during `aspire publish`.
+- : Injects files into containers at development time when they start during `aspire run`.
+- : Copies files from one resource's container into another resource's container as build artifacts at publish time during `aspire publish`.
## Inject files at development time
@@ -417,7 +418,7 @@ This produces a self-contained Nginx container that serves the frontend applicat
### Customize the source path
-By default, the source resource exports files from its container based on its configured output paths. Use `WithContainerFilesSource` to specify which path inside the source container to copy from:
+By default, the source resource exports files from its container based on its configured output paths. Use to specify which path inside the source container to copy from:
@@ -436,7 +437,7 @@ The `withContainerFiles` API is not yet available in the TypeScript AppHost SDK.
-Use `ClearContainerFilesSources` to remove any previously configured source paths before adding new ones.
+Use to remove any previously configured source paths before adding new ones.
## See also
diff --git a/src/frontend/src/content/docs/app-host/container-registry.mdx b/src/frontend/src/content/docs/app-host/container-registry.mdx
index 318d36582..28809f66e 100644
--- a/src/frontend/src/content/docs/app-host/container-registry.mdx
+++ b/src/frontend/src/content/docs/app-host/container-registry.mdx
@@ -6,6 +6,7 @@ description: Configure container registries for Aspire — generic registries, D
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
Aspire 13.1 introduced explicit container registry configuration, giving developers control over where and when container images are pushed during deployment. This article explains how to configure container registries for your Aspire applications.
@@ -24,7 +25,7 @@ When deploying Aspire applications to production environments, your containerize
This API is experimental and may change in future releases. Use diagnostic code `ASPIRECOMPUTE003` to suppress the experimental warning. For more information, see [ASPIRECOMPUTE003](/diagnostics/aspirecompute003/).
-Use the `AddContainerRegistry` method to configure a generic container registry for your application. This works with any Docker-compatible registry including DockerHub, GitHub Container Registry, Harbor, and private registries.
+Use the method to configure a generic container registry for your application. This works with any Docker-compatible registry including DockerHub, GitHub Container Registry, Harbor, and private registries.
### Basic usage
@@ -303,7 +304,7 @@ In the preceding example:
### Using an existing ACR
-To use an existing Azure Container Registry, call the `PublishAsExisting` method when you add the ACR:
+To use an existing Azure Container Registry, call the method when you add the ACR:
diff --git a/src/frontend/src/content/docs/app-host/eventing.mdx b/src/frontend/src/content/docs/app-host/eventing.mdx
index ba6dafd55..f45685daa 100644
--- a/src/frontend/src/content/docs/app-host/eventing.mdx
+++ b/src/frontend/src/content/docs/app-host/eventing.mdx
@@ -6,6 +6,7 @@ description: Use the Aspire AppHost eventing APIs for lifecycle events, custom e
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
In Aspire, eventing allows you to publish and subscribe to events during various AppHost life cycles. Eventing is more flexible than life cycle events. Both let you run arbitrary code during event callbacks, but eventing offers finer control of event timing, publishing, and provides supports for custom events.
@@ -110,7 +111,7 @@ builder.Eventing.Subscribe(
`builder.Eventing.Subscribe()` API. Use the named callback APIs
generated for each supported event, such as `subscribeBeforeStart`,
`subscribeAfterResourcesCreated`, `addEventingSubscriber`, and resource
- callbacks like `onResourceReady`.
+ callbacks like .
@@ -278,12 +279,12 @@ The preceding code subscribes to the `InitializeResourceEvent`, `ResourceReadyEv
and `await event.services()` when you need the resource or service provider.
-- `OnInitializeResource` / `onInitializeResource`: Subscribes to the `InitializeResourceEvent`.
-- `OnResourceEndpointsAllocated` / `onResourceEndpointsAllocated`: Subscribes to the `ResourceEndpointsAllocatedEvent` event.
-- `OnConnectionStringAvailable` / `onConnectionStringAvailable`: Subscribes to the `ConnectionStringAvailableEvent` event.
-- `OnBeforeResourceStarted` / `onBeforeResourceStarted`: Subscribes to the `BeforeResourceStartedEvent` event.
+- : Subscribes to the `InitializeResourceEvent`.
+- : Subscribes to the `ResourceEndpointsAllocatedEvent` event.
+- : Subscribes to the `ConnectionStringAvailableEvent` event.
+- : Subscribes to the `BeforeResourceStartedEvent` event.
- `OnResourceReady` / `onResourceReady`: Subscribes to the `ResourceReadyEvent` event.
-- `OnResourceStopped` / `onResourceStopped`: Subscribes to the `ResourceStoppedEvent` event.
+- : Subscribes to the `ResourceStoppedEvent` event.
When the AppHost is run, by the time the Aspire dashboard is displayed, you should see the following log output in the console:
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 d02b1ead8..118f282e6 100644
--- a/src/frontend/src/content/docs/app-host/executable-resources.mdx
+++ b/src/frontend/src/content/docs/app-host/executable-resources.mdx
@@ -4,8 +4,9 @@ description: Host external executable applications in your Aspire AppHost using
---
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
-In Aspire, you can host external executable applications alongside your projects using the `AddExecutable` method. This capability is useful when you need to integrate executable applications or tools into your distributed application, such as Node.js applications, Python scripts, or specialized CLI tools.
+In Aspire, you can host external executable applications alongside your projects using the method. This capability is useful when you need to integrate executable applications or tools into your distributed application, such as Node.js applications, Python scripts, or specialized CLI tools.
## When to use executable resources
@@ -122,7 +123,7 @@ const app = await builder.addExecutable("worker", "python", ".", ["worker.py"])
-When one resource depends on another, `WithReference` passes along environment variables containing the dependent resource's connection details. For example, the `worker` executable's reference to `redis` and `postgres` provides it with the `ConnectionStrings__cache` and `ConnectionStrings__appdb` environment variables, which contain connection strings to these resources.
+When one resource depends on another, passes along environment variables containing the dependent resource's connection details. For example, the `worker` executable's reference to `redis` and `postgres` provides it with the `ConnectionStrings__cache` and `ConnectionStrings__appdb` environment variables, which contain connection strings to these resources.
### Access specific endpoint information
@@ -282,7 +283,7 @@ When upgrading to Aspire 13.3, replace every earlier per-kind environment helper
## Publishing with PublishAsDockerFile
-For production deployment, executable resources need to be containerized. Use the `PublishAsDockerFile` method to specify how the executable should be packaged:
+For production deployment, executable resources need to be containerized. Use the method to specify how the executable should be packaged:
@@ -353,7 +354,7 @@ When working with executable resources:
1. **Use explicit paths**: For better reliability, use full paths to executables when possible.
1. **Handle dependencies**: Use `WithReference` to establish proper dependency relationships.
-1. **Configure explicit start**: Use `WithExplicitStart()` for executables that shouldn't start automatically.
+1. **Configure explicit start**: Use for executables that shouldn't start automatically.
1. **Prepare for deployment**: Always use `PublishAsDockerFile()` for production scenarios.
1. **Environment isolation**: Use environment variables rather than command-line arguments for sensitive configuration.
1. **Resource naming**: Use descriptive names that clearly identify the executable's purpose.
diff --git a/src/frontend/src/content/docs/app-host/migrate-from-docker-compose.mdx b/src/frontend/src/content/docs/app-host/migrate-from-docker-compose.mdx
index 249a48645..c69a2f18d 100644
--- a/src/frontend/src/content/docs/app-host/migrate-from-docker-compose.mdx
+++ b/src/frontend/src/content/docs/app-host/migrate-from-docker-compose.mdx
@@ -5,6 +5,7 @@ description: Compare Aspire and Docker Compose for local development, service di
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
Docker Compose and Aspire both describe and run multi-service applications. This guide compares their local development workflows and maps Compose services, dependencies, and configuration to an Aspire AppHost written in TypeScript or C#.
@@ -157,17 +158,17 @@ await builder.build().run();
-In Docker Compose, the `build:` directive creates container images from Dockerfiles. In Aspire, .NET services are added directly as project references with `AddProject()`, providing better debugging, hot reload, and telemetry integration. For services that still build from Dockerfiles, use `AddDockerfile()` for an existing Dockerfile or `AddDockerfileBuilder()` when the AppHost should generate the Dockerfile programmatically.
+In Docker Compose, the `build:` directive creates container images from Dockerfiles. In Aspire, .NET services are added directly as project references with , providing better debugging, hot reload, and telemetry integration. For services that still build from Dockerfiles, use for an existing Dockerfile or when the AppHost should generate the Dockerfile programmatically.
**Key differences explained:**
- **Build vs. project** — Docker Compose `build:` services become `AddProject()` for .NET apps, which runs them directly instead of in containers
- **Ports** — Both examples explicitly map ports (3000 and 5000)
-- **Startup order** — Docker Compose uses `depends_on` with health conditions; Aspire uses `WaitFor()` for startup ordering
-- **Service discovery** — `WithReference()` only configures service discovery and connection strings; it doesn't control startup order
-- **Connection strings** — By default, `WithReference(database)` provides `ConnectionStrings__myapp` using the resource name from `AddDatabase()`. To match a different name like `DefaultConnection`, use a named reference: `.WithReference(database, "DefaultConnection")`
-- **Volumes** — `WithDataVolume()` must be called explicitly to add persistent storage; it's not automatic
+- **Startup order** — Docker Compose uses `depends_on` with health conditions; Aspire uses for startup ordering
+- **Service discovery** — only configures service discovery and connection strings; it doesn't control startup order
+- **Connection strings** — By default, `WithReference(database)` provides `ConnectionStrings__myapp` using the resource name from . To match a different name like `DefaultConnection`, use a named reference: `.WithReference(database, "DefaultConnection")`
+- **Volumes** — must be called explicitly to add persistent storage; it's not automatic
- **Image versions** — `WithImageTag("15")` pins PostgreSQL to version 15
### Container-based services
@@ -277,13 +278,13 @@ Aspire generates .NET-format connection strings, which differ from Docker Compos
- Docker Compose: `DATABASE_URL=postgresql://postgres:secret@postgres:5432/main`
- Aspire: `ConnectionStrings__main=Host=localhost;Port=12345;Username=postgres;Password=;Database=main`
-If your application expects URL-format environment variables, construct them manually with `WithEnvironment()`. See [Environment variables and configuration](#environment-variables-and-configuration) for details.
+If your application expects URL-format environment variables, construct them manually with . See [Environment variables and configuration](#environment-variables-and-configuration) for details.
**Key differences explained:**
-- **Image versions** — Explicitly specified with `WithImageTag()` to match Docker Compose
-- **Dockerfile builds** — Docker Compose `build: .` maps to `AddDockerfile("web", ".")`, which builds a container image from a Dockerfile. Use `AddContainer()` for pre-built images that use `image:` in Docker Compose
+- **Image versions** — Explicitly specified with to match Docker Compose
+- **Dockerfile builds** — Docker Compose `build: .` maps to `AddDockerfile("web", ".")`, which builds a container image from a Dockerfile. Use for pre-built images that use `image:` in Docker Compose
- **Ports** — `WithHostPort()` maps to a static host port; without it, Aspire assigns a random port
- **Volumes** — `WithDataVolume()` must be called explicitly to add persistent storage
- **Startup ordering** — `WaitFor()` controls startup order, similar to Docker Compose `depends_on` with conditions
@@ -462,7 +463,7 @@ await builder.build().run();
**Key differences:**
- **Named volumes** — Created with `AddVolume()` and shared between containers
-- **Bind mounts** — Use `WithBindMount()` for host directory access
+- **Bind mounts** — Use for host directory access
### Networking
@@ -532,14 +533,14 @@ Successfully migrating from Docker Compose to Aspire requires a systematic appro
- **Configure dependencies** with `WithReference()` for service discovery
- **Add startup ordering** with `WaitFor()` to match `depends_on` behavior
- **Set up environment variables** — Note that connection string formats will differ
- - **Migrate health checks** — Use `WithHttpHealthCheck()` or `WithHealthCheck()` for custom checks
+ - **Migrate health checks** — Use or for custom checks
4. ### Handle data migration
For persistent data:
- Use `WithDataVolume()` for automatic volume management with integrations
- - Use `WithVolume()` for named volumes that need to persist data
+ - Use for named volumes that need to persist data
- Use `WithBindMount()` for host directory mounts when you need direct access to host files
5. ### Test and validate
diff --git a/src/frontend/src/content/docs/app-host/resource-lifetimes.mdx b/src/frontend/src/content/docs/app-host/resource-lifetimes.mdx
index a39514c1c..22214da3d 100644
--- a/src/frontend/src/content/docs/app-host/resource-lifetimes.mdx
+++ b/src/frontend/src/content/docs/app-host/resource-lifetimes.mdx
@@ -10,6 +10,7 @@ import LearnMore from '@components/LearnMore.astro';
import persistentContainer from '@assets/fundamentals/persistent-container-dark.png';
import persistentContainerLight from '@assets/fundamentals/persistent-container-light.png';
import persistentContainerDocker from '@assets/whats-new/aspire-9/persistent-container-docker-desktop.png';
+import ApiReference from '@components/ApiReference.astro';
Aspire resources support a number of different lifetime modes. For example, the default **session lifetime** starts a resource when the AppHost starts and shuts it down when the AppHost exits. A **persistent lifetime** leaves a resource running when the AppHost exits and can reuse the same instance on the next run.
@@ -29,11 +30,11 @@ A session lifetime creates the resource when the AppHost starts and disposes of
Use session lifetime for resources that should only exist while the AppHost is running, such as local test dependencies, temporary containers, or processes that don't need stable state across runs. Session resources also default to proxied endpoints, which are available while the AppHost is running.
-If you previously configured another lifetime and want to return a resource to the default behavior, call `WithSessionLifetime()`. For container resources, `WithLifetime(ContainerLifetime.Session)` is still supported.
+If you previously configured another lifetime and want to return a resource to the default behavior, call . For container resources, `WithLifetime(ContainerLifetime.Session)` is still supported.
### Persistent lifetime
-A persistent lifetime reuses a previously created resource when possible and doesn't dispose of it when the AppHost stops. Configure this behavior with `WithPersistentLifetime()`, or with the existing container-specific `WithLifetime(ContainerLifetime.Persistent)` API for container resources.
+A persistent lifetime reuses a previously created resource when possible and doesn't dispose of it when the AppHost stops. Configure this behavior with , or with the existing container-specific `WithLifetime(ContainerLifetime.Persistent)` API for container resources.
Use persistent lifetime for resources that are expensive to initialize, need stable local endpoints, or should remain available while you restart or rebuild the AppHost. Common examples include databases, message brokers, emulators, long-running executables, and project resources that should continue running after the AppHost exits.
@@ -80,9 +81,9 @@ Aspire evaluates the source resource's lifetime when it prepares the application
## Defer resource start with explicit start
-Use `WithExplicitStart()` to prevent a resource from starting automatically with the rest of the AppHost. The resource appears in the dashboard but remains stopped until you start it manually.
+Use to prevent a resource from starting automatically with the rest of the AppHost. The resource appears in the dashboard but remains stopped until you start it manually.
-Starting in Aspire 13.5, `WithExplicitStart()` also affects when execution configuration callbacks (for example, `WithEnvironment` and `WithArgs`) are evaluated, depending on whether the resource is session-scoped or persistent.
+Starting in Aspire 13.5, `WithExplicitStart()` also affects when execution configuration callbacks (for example, and ) are evaluated, depending on whether the resource is session-scoped or persistent.
### Session-scoped explicit-start resources
@@ -257,7 +258,7 @@ Persistent project and executable resources are run by Aspire's orchestrator so
## Match another resource's lifetime
-Use `WithLifetimeOf` when a companion resource should follow another resource's lifetime. This is useful when a sidecar, helper process, or supporting service should become persistent only when its source resource is persistent.
+Use when a companion resource should follow another resource's lifetime. This is useful when a sidecar, helper process, or supporting service should become persistent only when its source resource is persistent.
@@ -305,7 +306,7 @@ The dependent resource's lifetime is evaluated when Aspire prepares the applicat
## Scope cleanup to a parent process
-Use `WithParentProcessLifetime` when a resource should survive AppHost restarts but be cleaned up when another process exits. Aspire records the parent process identity instead of retaining a live process handle, so the cleanup scope follows the specific process instance instead of a reused process ID.
+Use when a resource should survive AppHost restarts but be cleaned up when another process exits. Aspire records the parent process identity instead of retaining a live process handle, so the cleanup scope follows the specific process instance instead of a reused process ID.
@@ -413,7 +414,7 @@ For example, if you have a service named `"postgres"` in an AppHost project loca
### Custom container names
-For advanced scenarios, you can set a custom container name using the `WithContainerName` method:
+For advanced scenarios, you can set a custom container name using the method:
diff --git a/src/frontend/src/content/docs/app-host/typescript-apphost.mdx b/src/frontend/src/content/docs/app-host/typescript-apphost.mdx
index 27c4a361c..6728fe5fc 100644
--- a/src/frontend/src/content/docs/app-host/typescript-apphost.mdx
+++ b/src/frontend/src/content/docs/app-host/typescript-apphost.mdx
@@ -7,6 +7,7 @@ description: Learn the files and configuration that make up a TypeScript AppHost
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import FileTree from 'starlight-plugin-icons/components/FileTree.astro';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
When you create a TypeScript AppHost with `aspire new`, the CLI scaffolds a project with the following structure:
@@ -295,7 +296,7 @@ The Aspire CLI supports the following package managers at the **AppHost root**
| Deno | `packageManager`, `deno.lock`, `deno.json`, or `deno.jsonc` | Deno 2 or later |
| Yarn Classic (v1) | `yarn.lock` with `# yarn lockfile v1` or `packageManager` with `yarn@1.x` | Not supported |
-This policy governs the **AppHost root only**. Apps the AppHost orchestrates — for example, a Node.js service added with `addNodeApp`, a Bun guest app, or a workspace package — can use any package manager their own tooling requires; they are independent of the AppHost-root toolchain.
+This policy governs the **AppHost root only**. Apps the AppHost orchestrates — for example, a Node.js service added with , a Bun guest app, or a workspace package — can use any package manager their own tooling requires; they are independent of the AppHost-root toolchain.
Aspire end-to-end tests cover TypeScript AppHosts with representative `packageManager` pins such as `npm@10.0.0`, `pnpm@10.0.0`, `yarn@4.14.1`, and `bun@1.2.0`. These tested versions are representative points within the supported ranges, not the only versions you can use.
@@ -456,7 +457,7 @@ Bun has built-in TypeScript support, so it runs `apphost.mts` directly without `
### Use Deno as the AppHost runtime
-Install Deno 2 or later and select it with a Deno configuration file, lockfile, or a `packageManager` entry such as `"deno@2.0.0"`. The generated AppHost module and resource APIs stay the same. This is distinct from [hosting a Deno application](/integrations/frameworks/deno/deno-host/): `addDenoApp` models a guest resource and doesn't choose the AppHost runtime.
+Install Deno 2 or later and select it with a Deno configuration file, lockfile, or a `packageManager` entry such as `"deno@2.0.0"`. The generated AppHost module and resource APIs stay the same. This is distinct from [hosting a Deno application](/integrations/frameworks/deno/deno-host/): models a guest resource and doesn't choose the AppHost runtime.
Aspire restores dependencies with `deno install` and validates the AppHost with `deno check`. Deno uses its own configuration rather than `tsconfig.apphost.json`. Watch mode uses Deno's native watcher and checks types on every restart, without `tsx` or `nodemon`. The CLI rejects Deno 1.x.
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 3f7ebb319..40f341228 100644
--- a/src/frontend/src/content/docs/app-host/with-terminal.mdx
+++ b/src/frontend/src/content/docs/app-host/with-terminal.mdx
@@ -10,8 +10,9 @@ import terminalResourceDark from '@assets/dashboard/terminals/terminal-resource-
import terminalResourceLight from '@assets/dashboard/terminals/terminal-resource-light.png';
import terminalDetachedDark from '@assets/dashboard/terminals/terminal-detached-dark.png';
import terminalDetachedLight from '@assets/dashboard/terminals/terminal-detached-light.png';
+import ApiReference from '@components/ApiReference.astro';
-If you have a terminal user interface (TUI) application or a shell-based experience that you want to exercise while it runs under Aspire, add `WithTerminal(...)` to the resource. Aspire then exposes an interactive terminal session that you can attach to from the [Aspire dashboard](/dashboard/overview/) or from the [`aspire terminal`](/reference/cli/commands/aspire-terminal/) CLI command.
+If you have a terminal user interface (TUI) application or a shell-based experience that you want to exercise while it runs under Aspire, add to the resource. Aspire then exposes an interactive terminal session that you can attach to from the [Aspire dashboard](/dashboard/overview/) or from the [`aspire terminal`](/reference/cli/commands/aspire-terminal/) CLI command.
For an introduction to the resource Terminal view, terminal dock, and detached windows, start with [Dashboard terminals](/dashboard/terminals/).
@@ -78,7 +79,7 @@ Reach for `WithTerminal` when a resource is interactive rather than a plain back
The [TypeScript terminal basics sample](https://github.com/microsoft/aspire-samples/tree/main/samples/terminals/basics-typescript) and [C# terminal basics sample](https://github.com/microsoft/aspire-samples/tree/main/samples/terminals/basics-csharp) demonstrate this with a containerized REST client, an API, and Redis.
-The [TypeScript AppHost](https://github.com/microsoft/aspire-samples/blob/main/samples/terminals/basics-typescript/apphost.mts) and [C# AppHost](https://github.com/microsoft/aspire-samples/blob/main/samples/terminals/basics-csharp/apphost.cs) build the client's image with `AddDockerfile`, pass the API endpoint through `BASE_URL`, wait for the API, and enable the terminal with `WithTerminal()`. The client runs as the resource's main process; there is no separate client session to create.
+The [TypeScript AppHost](https://github.com/microsoft/aspire-samples/blob/main/samples/terminals/basics-typescript/apphost.mts) and [C# AppHost](https://github.com/microsoft/aspire-samples/blob/main/samples/terminals/basics-csharp/apphost.cs) build the client's image with , pass the API endpoint through `BASE_URL`, wait for the API, and enable the terminal with `WithTerminal()`. The client runs as the resource's main process; there is no separate client session to create.
Follow either sample's README to send a request from the resource terminal, change the stored data through Redis's separate REPL command, and read it back through the API. This illustrates the distinction between an interactive resource and an [ephemeral terminal](/dashboard/ephemeral-terminals/) without requiring host installations of the client tools.
@@ -170,7 +171,7 @@ builder.Build().Run();
## Terminals and replicas
-Each replica of a resource gets its own independent terminal session. Aspire creates one terminal host per parent replica, so requesting three replicas yields three separate terminals. The order of `WithReplicas` and `WithTerminal` does not matter. For a project-based interactive app in `../Agent/Agent.csproj`:
+Each replica of a resource gets its own independent terminal session. Aspire creates one terminal host per parent replica, so requesting three replicas yields three separate terminals. The order of and `WithTerminal` does not matter. For a project-based interactive app in `../Agent/Agent.csproj`:
diff --git a/src/frontend/src/content/docs/app-host/withdockerfile.mdx b/src/frontend/src/content/docs/app-host/withdockerfile.mdx
index df30b8257..0c1cbab72 100644
--- a/src/frontend/src/content/docs/app-host/withdockerfile.mdx
+++ b/src/frontend/src/content/docs/app-host/withdockerfile.mdx
@@ -5,8 +5,9 @@ description: Add Dockerfiles to your Aspire app model with WithDockerfile — bu
---
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
-With Aspire it's possible to specify a _Dockerfile_ to build when the [AppHost](/get-started/app-host/) is started using either the `AddDockerfile` or `WithDockerfile` extension methods.
+With Aspire it's possible to specify a _Dockerfile_ to build when the [AppHost](/get-started/app-host/) is started using either the or extension methods.
These two methods serve different purposes:
@@ -126,7 +127,7 @@ await pgsql.withPgAdmin(); // Still works because it's still a PostgreSQL resour
## Generate a Dockerfile programmatically
-Use `AddDockerfileBuilder` or `WithDockerfileBuilder` when you need Aspire to generate a Dockerfile from AppHost code. These APIs are useful when the Dockerfile depends on AppHost configuration, when you want to compose Dockerfile fragments, or when you want to keep multi-stage image build logic near the resource definition.
+Use or when you need Aspire to generate a Dockerfile from AppHost code. These APIs are useful when the Dockerfile depends on AppHost configuration, when you want to compose Dockerfile fragments, or when you want to keep multi-stage image build logic near the resource definition.
The Dockerfile builder APIs are experimental and may change in future
@@ -249,7 +250,7 @@ await builder.build().run();
## Generate a Dockerfile with a factory function
-Use `AddDockerfileFactory` or `WithDockerfileFactory` when you need to generate a Dockerfile as a string from AppHost code. Unlike the [Dockerfile builder APIs](#generate-a-dockerfile-programmatically) that use a fluent API to compose Dockerfile instructions, the factory APIs let you return Dockerfile content directly as a string — useful when you already have string-based Dockerfile generation logic or want to construct content conditionally.
+Use or when you need to generate a Dockerfile as a string from AppHost code. Unlike the [Dockerfile builder APIs](#generate-a-dockerfile-programmatically) that use a fluent API to compose Dockerfile instructions, the factory APIs let you return Dockerfile content directly as a string — useful when you already have string-based Dockerfile generation logic or want to construct content conditionally.
The factory callback receives a `DockerfileFactoryContext` parameter that provides access to the resource and DI services when needed.
@@ -344,7 +345,7 @@ await builder.build().run();
## Pass build arguments
-The `WithBuildArg` method can be used to pass arguments into the container image build.
+The method can be used to pass arguments into the container image build.
@@ -419,7 +420,7 @@ CMD ["./mygoapp"]
## Pass build secrets
-In addition to build arguments it's possible to specify build secrets using `WithBuildSecret` which are made selectively available to individual commands in the _Dockerfile_ using the `--mount=type=secret` syntax on `RUN` commands.
+In addition to build arguments it's possible to specify build secrets using which are made selectively available to individual commands in the _Dockerfile_ using the `--mount=type=secret` syntax on `RUN` commands.
diff --git a/src/frontend/src/content/docs/architecture/multi-language-architecture.mdx b/src/frontend/src/content/docs/architecture/multi-language-architecture.mdx
index 0709757d1..241dafec2 100644
--- a/src/frontend/src/content/docs/architecture/multi-language-architecture.mdx
+++ b/src/frontend/src/content/docs/architecture/multi-language-architecture.mdx
@@ -5,6 +5,7 @@ description: Understand how Aspire uses a guest/host architecture, ATS, SDK gene
---
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
Aspire supports writing AppHosts in multiple languages. While the orchestration engine is built on .NET, a guest/host architecture allows AppHosts written in TypeScript today, and additional languages in the future, to access Aspire integrations, service discovery, and the dashboard.
@@ -12,7 +13,7 @@ Aspire supports writing AppHosts in multiple languages. While the orchestration
Aspire's hosting integrations and deployment publishers are written in .NET and have already accumulated the runtime behavior needed for local orchestration, diagnostics, and publishing. Rewriting those integrations for every guest language would duplicate a large amount of behavior and significantly increase maintenance cost.
-Instead, guest languages only declare resources such as `addRedis`, `addPostgres`, and `withReference`, while the .NET host handles orchestration concerns such as starting containers, wiring service discovery, running health checks, and generating deployment artifacts. The trade-off is a local IPC hop, which is much cheaper than maintaining the same integration surface independently in multiple languages.
+Instead, guest languages only declare resources such as , , and , while the .NET host handles orchestration concerns such as starting containers, wiring service discovery, running health checks, and generating deployment artifacts. The trade-off is a local IPC hop, which is much cheaper than maintaining the same integration surface independently in multiple languages.
## Guest/host model
@@ -55,7 +56,7 @@ flowchart TB
2. The ATS scanner inspects assemblies for exports and generates the TypeScript SDK into `.aspire/modules/`.
3. The CLI starts the host process and creates the local socket or pipe endpoint.
4. The CLI starts the guest process and passes connection details through environment variables.
-5. The guest connects and invokes capabilities such as `createBuilder`, `addRedis`, `build`, and `run`.
+5. The guest connects and invokes capabilities such as , `addRedis`, `build`, and .
6. The host orchestrates resources, starts the dashboard, and manages the application lifecycle.
## Token-based authentication
diff --git a/src/frontend/src/content/docs/architecture/resource-api-patterns.mdx b/src/frontend/src/content/docs/architecture/resource-api-patterns.mdx
index 9b48d32c5..d7f68914d 100644
--- a/src/frontend/src/content/docs/architecture/resource-api-patterns.mdx
+++ b/src/frontend/src/content/docs/architecture/resource-api-patterns.mdx
@@ -5,6 +5,7 @@ description: Discover common API resource patterns in Aspire, including how to a
---
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
Aspire's resource model allows you to define and configure resources in a structured way, enabling seamless integration and management of your application's components. This guide provides details the common patterns for adding and configuring resources in Aspire.
@@ -294,7 +295,7 @@ Custom value objects defer evaluation and allow the framework to discover depend
| `IValueWithReferences` _(opt.)_ | `IEnumerable References { get; }` | Both (if needed) | Declare dependencies on other resources |
- **Implement** `IValueProvider` and `IManifestExpressionProvider` on all structured value types.
-- **Implement** `IExpressionValue` when a structured value type should be accepted by APIs such as `WithEnvironment(...)`.
+- **Implement** `IExpressionValue` when a structured value type should be accepted by APIs such as .
- **Implement** `IValueWithReferences` only when your type holds resource references.
### Attaching to resources
diff --git a/src/frontend/src/content/docs/architecture/resource-examples.mdx b/src/frontend/src/content/docs/architecture/resource-examples.mdx
index 63bce99be..a9eacae81 100644
--- a/src/frontend/src/content/docs/architecture/resource-examples.mdx
+++ b/src/frontend/src/content/docs/architecture/resource-examples.mdx
@@ -5,6 +5,8 @@ description: "Explore complete, runnable examples that demonstrate Aspire's reso
next: false
---
+import ApiReference from '@components/ApiReference.astro';
+
Aspire provides a flexible resource model that allows you to define and configure resources in a structured way. This guide explores common patterns for adding and configuring resources, including examples of custom resources and how to implement them.
## Example: Derived Container Resource (Redis)
diff --git a/src/frontend/src/content/docs/architecture/resource-hierarchies.mdx b/src/frontend/src/content/docs/architecture/resource-hierarchies.mdx
index 1182c06d7..3de40dcfa 100644
--- a/src/frontend/src/content/docs/architecture/resource-hierarchies.mdx
+++ b/src/frontend/src/content/docs/architecture/resource-hierarchies.mdx
@@ -5,6 +5,7 @@ description: Model parent-child resource relationships in Aspire to express owne
---
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
Aspire supports modeling **parent-child relationships** between resources to express ownership, containment, and grouping.
@@ -28,7 +29,7 @@ When a resource implements the `IResourceWithParent` interface, it declares **tr
## Visual grouping (without lifecycle impact)
-Aspire also supports **visual-only parent-child relationships** using the `WithParentRelationship()` method during resource construction.
+Aspire also supports **visual-only parent-child relationships** using the method during resource construction.
Visual relationships:
@@ -113,7 +114,7 @@ Endpoints are modeled as **external entities**:
Resources connect to each other through:
-- **`WithReference()` calls**: Direct resource-to-resource dependencies.
+- ** calls**: Direct resource-to-resource dependencies.
- **Environment variables and CLI arguments**: Configuration values containing structured references.
- **Other configuration sources**: Settings populated with structured value references.
@@ -361,7 +362,7 @@ Error accessing Url: Endpoint has not been allocated.
```
- The overloads of `WithEnvironment` that take a callback run after endpoints
+ The overloads of that take a callback run after endpoints
have been allocated.
diff --git a/src/frontend/src/content/docs/architecture/resource-publishing.mdx b/src/frontend/src/content/docs/architecture/resource-publishing.mdx
index eece9edb0..ff91418a8 100644
--- a/src/frontend/src/content/docs/architecture/resource-publishing.mdx
+++ b/src/frontend/src/content/docs/architecture/resource-publishing.mdx
@@ -5,6 +5,7 @@ description: Learn how Aspire publishes resource manifests as JSON for deploymen
---
import { Steps } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
Aspire provides a flexible mechanism for publishing resource manifests, enabling seamless integration with various deployment environments. Resources are serialized into JSON format, which can be consumed by deployment tools.
@@ -18,7 +19,7 @@ Custom resources that publish JSON manifest entries must:
-Resources can opt-out of being included in the publishing manifest entirely by calling the `ExcludeFromManifest()` extension method on the `IResourceBuilder`. Resources marked this way will be omitted when generating publishing assets like Docker Compose files or Kubernetes manifests.
+Resources can opt-out of being included in the publishing manifest entirely by calling the extension method on the `IResourceBuilder`. Resources marked this way will be omitted when generating publishing assets like Docker Compose files or Kubernetes manifests.
## Registering the callback
diff --git a/src/frontend/src/content/docs/dashboard/ephemeral-terminals.mdx b/src/frontend/src/content/docs/dashboard/ephemeral-terminals.mdx
index 219df7417..f946cd2c9 100644
--- a/src/frontend/src/content/docs/dashboard/ephemeral-terminals.mdx
+++ b/src/frontend/src/content/docs/dashboard/ephemeral-terminals.mdx
@@ -3,6 +3,8 @@ title: Create ephemeral terminals from your AppHost
description: Use TerminalService to launch interactive processes, display docked terminals, and manage their lifetime independently of resources in your AppHost.
---
+import ApiReference from '@components/ApiReference.astro';
+
Ephemeral terminals let AppHost code launch an interactive process for a specific task and display it in the dashboard. Redis's `WithRepl()` is one example: it adds a resource command that opens an authenticated `redis-cli` session inside the running container.
The same building blocks are available for your own commands. Use `Aspire.Hosting.ApplicationModel.TerminalService` to create a terminal, configure its executable and placement, start its process, and show it in the dock. The [custom docked SQL REPL sample](https://github.com/microsoft/aspire-samples/tree/main/samples/terminals/docked-repl-csharp) demonstrates this with rqlite's SQL client.
@@ -75,7 +77,7 @@ The same mechanism can launch other interactive programs, not just REPLs. For ex
## Open a database or cache REPL
-A read-eval-print loop (REPL) accepts commands and displays their results interactively. The built-in `WithRepl()` methods are examples of this command-driven experience: they add an opt-in **REPL** resource command that opens the integration's bundled client in the dashboard terminal dock. They don't replace the database server's process or require `WithTerminal()`.
+A read-eval-print loop (REPL) accepts commands and displays their results interactively. The built-in `WithRepl()` methods are examples of this command-driven experience: they add an opt-in **REPL** resource command that opens the integration's bundled client in the dashboard terminal dock. They don't replace the database server's process or require .
For a complete TypeScript or C# Redis example, follow [Use the terminal dock](/dashboard/terminals/#use-the-terminal-dock). It covers setup, opening the **REPL** command, checking the connection with `PING`, and exiting cleanly.
diff --git a/src/frontend/src/content/docs/dashboard/explore.mdx b/src/frontend/src/content/docs/dashboard/explore.mdx
index 469382ca4..b01bbcadb 100644
--- a/src/frontend/src/content/docs/dashboard/explore.mdx
+++ b/src/frontend/src/content/docs/dashboard/explore.mdx
@@ -127,6 +127,7 @@ import terminalDockDark from '@assets/dashboard/terminals/terminal-dock-dark.png
import terminalDockLight from '@assets/dashboard/terminals/terminal-dock-light.png';
import dashboardRunSelector from '@assets/dashboard/explore/dashboard-run-selector.png';
import dashboardRunSelectorExpanded from '@assets/dashboard/explore/dashboard-run-selector-expanded.png';
+import ApiReference from '@components/ApiReference.astro';
In the upcoming sections, you discover how to create an Aspire project and embark on the following tasks:
@@ -350,11 +351,11 @@ You can download any console log to your local machine and use your preferred te
-Resources configured with `WithTerminal` also provide an interactive **Terminal** view. For resource terminals, the AppHost terminal dock, detached windows, and keyboard controls, see [Dashboard terminals](/dashboard/terminals/).
+Resources configured with also provide an interactive **Terminal** view. For resource terminals, the AppHost terminal dock, detached windows, and keyboard controls, see [Dashboard terminals](/dashboard/terminals/).
#### Resource replicas
-When project resources are replicated using the `WithReplicas` API, they're represented in the resource selector under a top-level named resource entry with an icon to indicator. Each replicated resource is listed under the top-level resource entry, with its corresponding unique name. Consider the following example screenshot of a replicated project resource:
+When project resources are replicated using the API, they're represented in the resource selector under a top-level named resource entry with an icon to indicator. Each replicated resource is listed under the top-level resource entry, with its corresponding unique name. Consider the following example screenshot of a replicated project resource:
diff --git a/src/frontend/src/content/docs/dashboard/telemetry-after-deployment.mdx b/src/frontend/src/content/docs/dashboard/telemetry-after-deployment.mdx
index 148dc37e1..ba3a52380 100644
--- a/src/frontend/src/content/docs/dashboard/telemetry-after-deployment.mdx
+++ b/src/frontend/src/content/docs/dashboard/telemetry-after-deployment.mdx
@@ -5,6 +5,7 @@ description: Understand how telemetry and the Aspire dashboard work after you de
import { Aside, Steps } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
The Aspire dashboard is designed for local development and short-term diagnostics. It offers configurable persistence and built-in limits on how much data it retains, but it isn't intended for long-term production observability. After deploying your app to a production environment, configure a durable telemetry backend.
@@ -100,7 +101,7 @@ If some or all logs don't appear in your telemetry backend after deployment, che
### OTEL environment variables not set
-Verify that the OTEL environment variables are correctly set in your deployed containers. When deploying to Azure Container Apps, Aspire sets these variables automatically when you use `WithReference` for Application Insights or when you configure the OTEL endpoint.
+Verify that the OTEL environment variables are correctly set in your deployed containers. When deploying to Azure Container Apps, Aspire sets these variables automatically when you use for Application Insights or when you configure the OTEL endpoint.
Check for these environment variables in your deployed container:
diff --git a/src/frontend/src/content/docs/dashboard/terminals.mdx b/src/frontend/src/content/docs/dashboard/terminals.mdx
index 830159b2c..3ff8c2994 100644
--- a/src/frontend/src/content/docs/dashboard/terminals.mdx
+++ b/src/frontend/src/content/docs/dashboard/terminals.mdx
@@ -9,6 +9,7 @@ import { Image } from 'astro:assets';
import resourceTerminal from '@assets/dashboard/terminals/resource-terminal.png';
import terminalDock from '@assets/dashboard/terminals/redis-repl-dock.png';
import detachedTerminal from '@assets/dashboard/terminals/detached-terminal.png';
+import ApiReference from '@components/ApiReference.astro';
The Aspire dashboard can display interactive terminal applications as well as logs. A terminal lets you type into a running process, respond to its prompts, and use a terminal user interface (TUI) without leaving the dashboard.
@@ -22,8 +23,8 @@ Aspire has two kinds of terminals: those attached to resources in your app model
| Kind | Purpose | Where it appears |
| ---- | ------- | ---------------- |
-| **Resource terminal** | Interact with a resource's own process, such as a TUI or shell, configured with `WithTerminal()`. | The resource's **Terminal** view on the **Console logs** page. |
-| **Ephemeral terminal** | Run a purpose-specific tool, such as a database REPL opened with `WithRepl()`. The AppHost owns this separate process. | The terminal dock. |
+| **Resource terminal** | Interact with a resource's own process, such as a TUI or shell, configured with . | The resource's **Terminal** view on the **Console logs** page. |
+| **Ephemeral terminal** | Run a purpose-specific tool, such as a database REPL opened with . The AppHost owns this separate process. | The terminal dock. |
Ephemeral terminals aren't resources in the app model. They can remain available for a task or session; their lifetime is controlled by the AppHost code that creates them or by closing their dock tab. Opening a resource or dock terminal in a separate window changes only its presentation, not its kind or process.
diff --git a/src/frontend/src/content/docs/deployment/azure/app-service.mdx b/src/frontend/src/content/docs/deployment/azure/app-service.mdx
index 258a1f3df..b70345b7c 100644
--- a/src/frontend/src/content/docs/deployment/azure/app-service.mdx
+++ b/src/frontend/src/content/docs/deployment/azure/app-service.mdx
@@ -6,6 +6,7 @@ description: "Deploy Aspire applications to Azure App Service with the `aspire d
import { Badge, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
@@ -75,7 +76,7 @@ await builder.build().run();
-For a standard App Service deployment, you only need the environment and a supported app resource. Use `PublishAsAzureAppServiceWebsite` only when you want to customize the generated website or deployment slot.
+For a standard App Service deployment, you only need the environment and a supported app resource. Use only when you want to customize the generated website or deployment slot.
## How Aspire maps your app to Azure App Service
@@ -270,7 +271,7 @@ await builder.build().run();
### Environment-variable name validation
-Azure App Service application settings accept only letters, numbers, and underscores. If a connection name contains dashes and you intentionally want to bypass App Service name validation for that website, call `SkipEnvironmentVariableNameChecks()` after `PublishAsAzureAppServiceWebsite`.
+Azure App Service application settings accept only letters, numbers, and underscores. If a connection name contains dashes and you intentionally want to bypass App Service name validation for that website, call after `PublishAsAzureAppServiceWebsite`.
diff --git a/src/frontend/src/content/docs/deployment/azure/azure-developer-cli.mdx b/src/frontend/src/content/docs/deployment/azure/azure-developer-cli.mdx
index 9a271f313..db4e35a43 100644
--- a/src/frontend/src/content/docs/deployment/azure/azure-developer-cli.mdx
+++ b/src/frontend/src/content/docs/deployment/azure/azure-developer-cli.mdx
@@ -9,6 +9,7 @@ topic: deployment
import { Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
The Azure Developer CLI (`azd`) is still supported with Aspire for existing workflows, but it is no longer the recommended default deployment path.
@@ -37,7 +38,7 @@ This page does not duplicate `azd`'s full operational workflow. For install, ini
## Resource naming
-The `aspire deploy` path and `azd` use different resource naming schemes by default. If you're upgrading from an existing `azd` deployment to `aspire deploy`, use `WithAzdResourceNaming()` to preserve the original naming convention. This avoids creating duplicate Azure resources:
+The `aspire deploy` path and `azd` use different resource naming schemes by default. If you're upgrading from an existing `azd` deployment to `aspire deploy`, use to preserve the original naming convention. This avoids creating duplicate Azure resources:
@@ -85,7 +86,7 @@ Aspire parameters and `azd` inputs follow different paths:
| Parameter type | How it reaches Azure resources |
| -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
-| **Aspire parameters** (`AddParameter`) | Resolved by the AppHost through .NET configuration when generating the manifest. Use `appsettings.{env}.json` or environment variables. |
+| **Aspire parameters** ( ) | Resolved by the AppHost through .NET configuration when generating the manifest. Use `appsettings.{env}.json` or environment variables. |
| **`azd` infrastructure inputs (Bicep parameters)** | Prompted by `azd provision` and stored in `.azure/{name}/config.json`. Used by `azd` directly during Bicep deployment — not passed to the AppHost. |
| **Secrets** | Prompted by `azd provision` and stored in a local vault. Injected into Bicep parameters during provisioning. |
diff --git a/src/frontend/src/content/docs/deployment/azure/azure-security-best-practices.mdx b/src/frontend/src/content/docs/deployment/azure/azure-security-best-practices.mdx
index dcf3f31b4..b2bd56d87 100644
--- a/src/frontend/src/content/docs/deployment/azure/azure-security-best-practices.mdx
+++ b/src/frontend/src/content/docs/deployment/azure/azure-security-best-practices.mdx
@@ -6,6 +6,7 @@ description: Harden Aspire deployments to Azure with private networking, managed
import { Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
When you deploy Aspire apps to Azure, the base security posture comes from the deployment target you choose and the Azure resources you provision. This guide explains what Aspire configures for you by default and how to work with either the standard public networking model or the private-networked model, then harden the deployment with managed identities, Key Vault, and monitoring.
@@ -84,8 +85,8 @@ await builder.build().run();
This pattern has a few important behaviors:
-- `WithDelegatedSubnet` configures the subnet delegation Azure Container Apps environments require.
-- `AddPrivateEndpoint` automatically creates the private DNS zone, virtual network link, and DNS zone group the target service needs.
+- configures the subnet delegation Azure Container Apps environments require.
+- automatically creates the private DNS zone, virtual network link, and DNS zone group the target service needs.
- In publish and deploy flows, adding a private endpoint also disables public network access on the target Azure resource by default.
- Resources that reference the target keep using the same connection information; private DNS resolves the hostname to the private IP inside the virtual network.
diff --git a/src/frontend/src/content/docs/deployment/azure/container-apps.mdx b/src/frontend/src/content/docs/deployment/azure/container-apps.mdx
index 7bcbc4277..ecb27e11b 100644
--- a/src/frontend/src/content/docs/deployment/azure/container-apps.mdx
+++ b/src/frontend/src/content/docs/deployment/azure/container-apps.mdx
@@ -6,6 +6,7 @@ description: "Deploy Aspire applications to Azure Container Apps with the `aspir
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
Use `aspire deploy` to deploy Aspire applications to Azure Container Apps. Aspire provisions the Container Apps environment, Azure Container Registry, managed identity, and the Container Apps resources needed for the compute resources in your AppHost.
@@ -232,7 +233,7 @@ await builder.build().run();
### Custom domains
-Use `ConfigureCustomDomain` when you want Aspire to configure a custom domain and managed certificate on the generated Container App.
+Use when you want Aspire to configure a custom domain and managed certificate on the generated Container App.
@@ -278,7 +279,7 @@ await builder.build().run();
### Internal service discovery
-Services deployed to Azure Container Apps use internal DNS for service discovery. Use `WithExternalHttpEndpoints()` only for endpoints you want reachable outside the Container Apps environment.
+Services deployed to Azure Container Apps use internal DNS for service discovery. Use only for endpoints you want reachable outside the Container Apps environment.
@@ -358,7 +359,7 @@ await env.withDashboard(false);
Express environments are experimental and may change in future releases. The
- `AsExpress` API reports [ASPIREACAEXPRESS001](/diagnostics/aspireacaexpress001/),
+ API reports [ASPIREACAEXPRESS001](/diagnostics/aspireacaexpress001/),
which you must suppress to build. Check the
[Azure Container Apps Express overview](https://learn.microsoft.com/azure/container-apps/express-overview)
for current availability and supported features before you adopt it.
@@ -419,7 +420,7 @@ The following limitations apply when you use Express:
- **Referenced endpoints must be public.** Express apps have no private `.internal` hostname, so a referenced endpoint must be explicitly exposed with `WithExternalHttpEndpoints`. Referencing an internal-only endpoint fails during deployment rather than emitting an address that can't resolve. Exposing an endpoint doesn't add authentication — enforce authorization in the app.
- **HTTPS ingress is required.** Combining `AsExpress` with `WithHttpsUpgrade(false)` is rejected, in either call order.
-You can combine `AsExpress` with `AsExisting` or `PublishAsExisting` to declare that an existing environment already uses Express. Aspire doesn't verify or convert the deployed environment's mode.
+You can combine `AsExpress` with or to declare that an existing environment already uses Express. Aspire doesn't verify or convert the deployed environment's mode.
## Deploy with aspire deploy
diff --git a/src/frontend/src/content/docs/deployment/azure/sandboxes.mdx b/src/frontend/src/content/docs/deployment/azure/sandboxes.mdx
index 8eaea2785..b7a80d704 100644
--- a/src/frontend/src/content/docs/deployment/azure/sandboxes.mdx
+++ b/src/frontend/src/content/docs/deployment/azure/sandboxes.mdx
@@ -6,6 +6,7 @@ description: "Deploy Aspire compute resources to Azure Container Apps Sandboxes
import { Badge, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
@@ -85,7 +86,7 @@ builder.Build().Run();
The sandbox group only affects publish and deploy. When you run the AppHost locally with `aspire run`, Aspire adds the sandbox group to the app model but doesn't provision Azure sandbox resources, so your resources run locally as usual.
-For a standard deployment, you only need the sandbox group and your compute resources. Use `PublishAsAzureSandbox` only when you want to customize the sandbox runtime options for a resource.
+For a standard deployment, you only need the sandbox group and your compute resources. Use only when you want to customize the sandbox runtime options for a resource.
## Customize sandbox runtime options
@@ -184,7 +185,7 @@ Durations must use whole-second precision. C# AppHosts use `TimeSpan` values, an
## Endpoints and access
-Aspire creates sandbox ports only for endpoints that are marked external, such as with `WithExternalHttpEndpoints`. Each exposed port gets a public HTTPS URL on the sandbox proxy, which terminates TLS and forwards traffic to the container's target port.
+Aspire creates sandbox ports only for endpoints that are marked external, such as with . Each exposed port gets a public HTTPS URL on the sandbox proxy, which terminates TLS and forwards traffic to the container's target port.
- **Authenticated by default.** External endpoints require Microsoft Entra ID authentication by default. The sandbox port doesn't use an allow-list, so any authenticated Entra ID user can access it.
- **Anonymous access is opt-in.** To allow anonymous access, set `Anonymous` to `true` for the endpoint in `AzureSandboxOptions.Endpoints`, as shown in the preceding example.
@@ -204,7 +205,7 @@ Sandbox egress uses full traffic inspection with a deny-by-default policy. Aspir
## Deploy to multiple compute environments
-When an AppHost contains more than one compute environment, assign each compute resource explicitly with `WithComputeEnvironment`. `PublishAsAzureSandbox` uses that assignment and doesn't select an environment on its own:
+When an AppHost contains more than one compute environment, assign each compute resource explicitly with . `PublishAsAzureSandbox` uses that assignment and doesn't select an environment on its own:
@@ -267,15 +268,15 @@ When you run `aspire deploy` directly, Aspire binds the role assignment to the a
For a new sandbox group, Aspire creates a dedicated user-assigned managed identity, attaches it to the sandbox group, and grants it only the `AcrPull` role on the group's Azure Container Registry. The service uses this identity to import private images from the registry. Public registry images are imported without it, and registry credentials aren't sent to the service or stored in deployment state.
-Use `WithAcrPullIdentity` to supply a different user-assigned identity. For sandbox groups that Aspire creates, the identity is attached automatically, but you're responsible for granting it `AcrPull` on the registry.
+Use to supply a different user-assigned identity. For sandbox groups that Aspire creates, the identity is attached automatically, but you're responsible for granting it `AcrPull` on the registry.
### Workload identities
The image pull identity isn't exposed to sandbox workloads. To give workloads a managed identity, configure it on the sandbox group:
-- `WithSystemAssignedIdentity` adds a system-assigned managed identity for sandbox workloads.
-- `WithUserAssignedIdentity` adds a user-assigned managed identity for sandbox workloads.
-- `WithNoManagedIdentity` clears the workload identities configured on the sandbox group.
+- adds a system-assigned managed identity for sandbox workloads.
+- adds a user-assigned managed identity for sandbox workloads.
+- clears the workload identities configured on the sandbox group.
diff --git a/src/frontend/src/content/docs/deployment/custom-deployments.mdx b/src/frontend/src/content/docs/deployment/custom-deployments.mdx
index 0b7e34ff6..4838e50f5 100644
--- a/src/frontend/src/content/docs/deployment/custom-deployments.mdx
+++ b/src/frontend/src/content/docs/deployment/custom-deployments.mdx
@@ -5,6 +5,7 @@ description: Build container images from your Aspire resources and create custom
---
import { Aside } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
Aspire provides powerful APIs for building container images from your resources during publishing and deployment operations. This article covers the key components that enable programmatic container image creation and progress reporting.
@@ -46,7 +47,7 @@ The `IResourceContainerImageManager` is the core service in the `Aspire.Hosting.
### Configure container builds
-Configure each compute resource with `WithContainerBuildOptions`. The callback receives a `ContainerBuildOptionsCallbackContext` that allows you to specify:
+Configure each compute resource with . The callback receives a `ContainerBuildOptionsCallbackContext` that allows you to specify:
- **Destination**: Push the image to a registry or save it as an archive.
- **Image format**: Docker or Open Container Initiative (OCI) format.
@@ -76,7 +77,7 @@ The progress reporter uses a hierarchical model with guaranteed ordering and thr
The reporter API provides structured access to progress reporting with the following characteristics:
- **Acquisition**: The pipeline runner creates an `IReportingStep` for each pipeline step and exposes it through `PipelineStepContext.ReportingStep`.
-- **Step creation**: Register steps with `WithPipelineStepFactory` or `builder.Pipeline.AddStep`. The pipeline runner creates the corresponding reporting step during execution.
+- **Step creation**: Register steps with or `builder.Pipeline.AddStep`. The pipeline runner creates the corresponding reporting step during execution.
- **Task creation**: `IReportingStep.CreateTaskAsync(title, ct)` returns an `IReportingTask`.
- **State transitions**: `SucceedAsync`, `WarnAsync`, `FailAsync` methods accept a summary message.
- **Completion**: Complete individual tasks in the callback. The runner disposes the reporting step after the callback and completes the overall pipeline operation.
diff --git a/src/frontend/src/content/docs/deployment/deploy-with-aspire.mdx b/src/frontend/src/content/docs/deployment/deploy-with-aspire.mdx
index c30a44d14..aa715cfc1 100644
--- a/src/frontend/src/content/docs/deployment/deploy-with-aspire.mdx
+++ b/src/frontend/src/content/docs/deployment/deploy-with-aspire.mdx
@@ -9,6 +9,7 @@ import {
TabItem,
Tabs,
} from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
import LearnMore from '@components/LearnMore.astro';
Aspire deployment is pipeline-based. Add a deployment target to your AppHost, and Aspire gains the steps needed for that target. `aspire publish`, `aspire deploy`, and `aspire do ` are different ways of entering that pipeline.
@@ -162,7 +163,7 @@ The placeholder name in published output is target-specific, but the mapping sta
This `.env` example is specific to Docker Compose publish output. It illustrates the **publish artifact handoff** path. `aspire deploy` does not consume this `.env` file; Aspire resolves the parameter before applying changes directly.
-Because this example has only one matching compute environment, the project resource attaches to it automatically. Use `WithComputeEnvironment` only when you need to disambiguate between multiple matching targets.
+Because this example has only one matching compute environment, the project resource attaches to it automatically. Use only when you need to disambiguate between multiple matching targets.
Parameters answer **what values does this pipeline need?**
diff --git a/src/frontend/src/content/docs/deployment/docker-compose.mdx b/src/frontend/src/content/docs/deployment/docker-compose.mdx
index b55a1a80c..015452f65 100644
--- a/src/frontend/src/content/docs/deployment/docker-compose.mdx
+++ b/src/frontend/src/content/docs/deployment/docker-compose.mdx
@@ -6,6 +6,7 @@ description: Publish and deploy your Aspire application using Docker Compose wit
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
Docker Compose is a deployment target for Aspire applications. When you add a Docker Compose environment to your AppHost, Aspire generates Docker Compose files, environment variable configurations, and container images from your app model. You can then deploy these artifacts to any machine running Docker or Podman.
@@ -57,7 +58,7 @@ When Podman is the active runtime, Aspire uses `podman-compose` (or the Docker C
## Prerequisites
-To deploy with Docker Compose, add a Docker Compose environment resource to your AppHost using `AddDockerComposeEnvironment`:
+To deploy with Docker Compose, add a Docker Compose environment resource to your AppHost using :
@@ -217,7 +218,7 @@ When you publish or deploy, Aspire generates the following artifacts in the `asp
## Generate Dockerfiles from your AppHost
-Docker Compose deployments can build images from Dockerfiles that are generated by your AppHost. Use `AddDockerfileBuilder` to create a new container resource from a generated Dockerfile, or `WithDockerfileBuilder` to replace the image for an existing container resource with a generated Dockerfile build.
+Docker Compose deployments can build images from Dockerfiles that are generated by your AppHost. Use to create a new container resource from a generated Dockerfile, or to replace the image for an existing container resource with a generated Dockerfile build.
The Dockerfile builder APIs are experimental and may change in future
@@ -301,7 +302,7 @@ The Docker hosting integration captures environment variables from your app mode
### Customize environment file
-For advanced scenarios, use `ConfigureEnvFile` to customize the generated `.env` file:
+For advanced scenarios, use to customize the generated `.env` file:
@@ -346,7 +347,7 @@ This is useful when you need to add custom environment variables to the generate
## Customize the Docker Compose file
-Use `ConfigureComposeFile` to customize the generated `docker-compose.yml` model before Aspire writes it to disk:
+Use to customize the generated `docker-compose.yml` model before Aspire writes it to disk:
@@ -390,7 +391,7 @@ await builder.build().run();
## Customize Docker Compose services
-To customize the generated Docker Compose service for a specific resource, use the `PublishAsDockerComposeService` method. This is optional — all resources are automatically included in the Docker Compose output. Use this method only when you need to modify the generated service definition:
+To customize the generated Docker Compose service for a specific resource, use the method. This is optional — all resources are automatically included in the Docker Compose output. Use this method only when you need to modify the generated service definition:
@@ -437,11 +438,11 @@ await builder.build().run();
-The `configure` callback receives the `DockerComposeServiceResource` and the generated `Service` object, allowing you to modify properties like labels, restart policy, container name, or other Docker Compose service settings. Use `AsEnvironmentPlaceholder` for values that should be written as Compose environment variable placeholders in the generated YAML and `.env` files.
+The `configure` callback receives the `DockerComposeServiceResource` and the generated `Service` object, allowing you to modify properties like labels, restart policy, container name, or other Docker Compose service settings. Use for values that should be written as Compose environment variable placeholders in the generated YAML and `.env` files.
## Resolve Docker Compose service host names
-Use `GetHostAddressExpression` when you need the host name that another Docker Compose service should use for an endpoint. In Docker Compose deployments, this expression resolves to the generated service name on the Compose network.
+Use when you need the host name that another Docker Compose service should use for an endpoint. In Docker Compose deployments, this expression resolves to the generated service name on the Compose network.
@@ -476,7 +477,7 @@ const apiHost = await compose.getHostAddressExpression(apiEndpoint);
## Image pull policy
-Container resources support an `ImagePullPolicy` that controls when the container runtime pulls an image. Use the `WithImagePullPolicy` extension method to set the policy on a container resource:
+Container resources support an `ImagePullPolicy` that controls when the container runtime pulls an image. Use the extension method to set the policy on a container resource:
@@ -520,7 +521,7 @@ When deploying containers, you can customize how container images are named, tag
### Set remote image name and tag
-Use `WithRemoteImageName` and `WithRemoteImageTag` to customize the image reference:
+Use and to customize the image reference:
@@ -556,7 +557,7 @@ await api.withRemoteImageTag('v1.0.0');
### Advanced customization with callbacks
-For more complex scenarios, use `WithImagePushOptions` to register a callback that dynamically configures push options:
+For more complex scenarios, use to register a callback that dynamically configures push options:
@@ -606,7 +607,7 @@ Multiple callbacks can be registered on the same resource, and they are invoked
### Configure a container registry
-Use the `AddContainerRegistry` method to define a container registry and `WithContainerRegistry` to associate resources with it:
+Use the method to define a container registry and to associate resources with it:
diff --git a/src/frontend/src/content/docs/deployment/environments.mdx b/src/frontend/src/content/docs/deployment/environments.mdx
index 49b6366cb..9ed32e74c 100644
--- a/src/frontend/src/content/docs/deployment/environments.mdx
+++ b/src/frontend/src/content/docs/deployment/environments.mdx
@@ -6,6 +6,7 @@ description: Use Aspire environments to configure your application for developme
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
When you run or deploy an Aspire application, the **environment** determines how the AppHost configures resources, what parameter values are used, and how your deployment is organized. Environments let you use the same AppHost to target different deployment contexts — development, staging, production, or any custom name — without duplicating your application model.
@@ -121,7 +122,7 @@ The following convenience methods are available:
### Set environment variables on child resources
-Your services often need to know which environment they're running in. Different frameworks use different environment variables — use `WithEnvironment` to set the appropriate one for each service:
+Your services often need to know which environment they're running in. Different frameworks use different environment variables — use to set the appropriate one for each service:
@@ -197,7 +198,7 @@ Common environment variable conventions by framework and ecosystem:
| Java (Spring) | `SPRING_PROFILES_ACTIVE` | `dev`, `test`, `prod` |
- `AddNodeApp` automatically sets `NODE_ENV` to `development` or `production`
+ automatically sets `NODE_ENV` to `development` or `production`
based on whether the AppHost environment is `Development`. If you need a
different value (such as `staging`), override it with an explicit
`WithEnvironment("NODE_ENV", ...)` call as shown above.
diff --git a/src/frontend/src/content/docs/deployment/javascript-apps.mdx b/src/frontend/src/content/docs/deployment/javascript-apps.mdx
index 70446c878..cb81f93ea 100644
--- a/src/frontend/src/content/docs/deployment/javascript-apps.mdx
+++ b/src/frontend/src/content/docs/deployment/javascript-apps.mdx
@@ -6,6 +6,7 @@ description: Learn the main production deployment models for JavaScript app reso
import { Aside, TabItem, Tabs } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
JavaScript app resources can represent static browser frontends, Node.js servers, SSR frameworks, and specialized resources such as Next.js apps. The deployment decision is less about which AppHost API you started with and more about **which resource owns the public HTTP surface in production**.
@@ -13,12 +14,12 @@ Use this table as the starting point:
| What are you deploying? | Production entrypoint | Aspire pattern |
| ----------------------------------------------------- | --------------------------- | --------------------------- |
-| Static frontend served by a backend | Backend, API, or web server | `PublishWithContainerFiles` |
-| Static frontend served by a gateway or BFF | Reverse proxy | `PublishWithStaticFiles` |
-| Static frontend served by its own JavaScript resource | JavaScript app resource | `PublishAsStaticWebsite` |
-| SSR or Node.js app with a built server artifact | JavaScript app resource | `PublishAsNodeServer` |
-| SSR or Node.js app started by a package script | JavaScript app resource | `PublishAsPackageScript` |
-| Next.js standalone app | Next.js app resource | `AddNextJsApp` |
+| Static frontend served by a backend | Backend, API, or web server | |
+| Static frontend served by a gateway or BFF | Reverse proxy | |
+| Static frontend served by its own JavaScript resource | JavaScript app resource | |
+| SSR or Node.js app with a built server artifact | JavaScript app resource | |
+| SSR or Node.js app started by a package script | JavaScript app resource | |
+| Next.js standalone app | Next.js app resource | |
| Static frontend hosted separately from the backend | Static host + separate API | Custom topology |
This article is deployment-target agnostic. It explains the JavaScript hosting models you can use with Aspire, not the full steps for a specific deployment target.
@@ -109,7 +110,7 @@ await builder.build().run();
### How it works
-1. `AddViteApp` runs the Vite dev server during `aspire run`.
+1. runs the Vite dev server during `aspire run`.
2. During publish, Aspire builds the frontend and extracts its production output.
3. `PublishWithContainerFiles` copies those files into the backend or web server container.
4. The backend or web server becomes the deployed HTTP endpoint and serves the frontend files.
@@ -342,7 +343,7 @@ You can call `PublishAsStaticWebsite` without an API target when the static webs
`PublishAsStaticWebsite` only takes effect at publish time. In run mode, each framework still uses its own dev server, and the browser hits the dev server's origin instead of YARP. To keep the same `/api/*` shape working in development, the dev server itself needs a small proxy config that forwards `/api/*` to the backend resource.
-When the frontend references a backend resource, either explicitly through `WithReference` or implicitly when you pass `apiTarget` to `PublishAsStaticWebsite`, Aspire exposes the backend URL through service-discovery environment variables. The variable name follows the pattern `_` in upper case. For a backend resource named `api` with an `http` endpoint, that's `API_HTTP`. If you rename the resource, for example `weather`, or use `https`, the variable becomes `WEATHER_HTTP` or `API_HTTPS`. `apiTarget` adds the reference for you, so no extra `WithReference` call is required when you use `PublishAsStaticWebsite(apiPath, apiTarget)`.
+When the frontend references a backend resource, either explicitly through or implicitly when you pass `apiTarget` to `PublishAsStaticWebsite`, Aspire exposes the backend URL through service-discovery environment variables. The variable name follows the pattern `_` in upper case. For a backend resource named `api` with an `http` endpoint, that's `API_HTTP`. If you rename the resource, for example `weather`, or use `https`, the variable becomes `WEATHER_HTTP` or `API_HTTPS`. `apiTarget` adds the reference for you, so no extra `WithReference` call is required when you use `PublishAsStaticWebsite(apiPath, apiTarget)`.
Each framework reads that variable from its own dev-server config:
@@ -518,7 +519,7 @@ ENTRYPOINT ["sh", "-c", "exec pnpm run start"]
## Next.js standalone apps
-Use `AddNextJsApp` for Next.js apps that use [standalone output](https://nextjs.org/docs/pages/api-reference/next-config-js/output). It is more specific than `AddJavaScriptApp` because it configures the Next.js development server port argument and publish-time standalone container shape, and it validates that the Next.js configuration enables `output: "standalone"`.
+Use `AddNextJsApp` for Next.js apps that use [standalone output](https://nextjs.org/docs/pages/api-reference/next-config-js/output). It is more specific than because it configures the Next.js development server port argument and publish-time standalone container shape, and it validates that the Next.js configuration enables `output: "standalone"`.
Choose this method instead of `AddJavaScriptApp(...).PublishAsPackageScript(...)` for Next.js standalone deployments. Use the more general package-script publish method for frameworks where the production server should be started through the package manager and the framework does not have a dedicated Aspire resource.
@@ -713,13 +714,13 @@ await builder.build().run();
- **Pit 1 - Runtime environment on the Vite resource**
- Example: `WithEnvironment(...)` / `withEnvironment(...)` on `AddViteApp` / `addViteApp` to set `VITE_API_BASE_URL`.
+ Example: on `AddViteApp` / `addViteApp` to set `VITE_API_BASE_URL`.
Associated failure: Vite usually reads `VITE_*` values at build time, so the deployed browser app does not learn its backend URL from the Vite resource at runtime.
- **Pit 2 - Switching the same value to a build arg**
- Example: `WithBuildArg(...)` / `withBuildArg(...)` to set the backend URL during the frontend image build.
+ Example: to set the backend URL during the frontend image build.
Associated failure: the backend URL is usually not known when the frontend image is being built.
@@ -1207,7 +1208,7 @@ If a build-only JavaScript resource is not consumed by another resource, publish
Build-only container resource(s) 'frontend' are not consumed by another resource and won't participate in publish or deploy. Reference them from another resource, for example using 'PublishWithContainerFiles' or 'PublishWithStaticFiles', or suppress this validation for the app by calling 'builder.Pipeline.DisableBuildOnlyContainerValidation()'.
```
-Prefer fixing the app model by choosing one of the deployment shapes in this article. The app-wide `DisableBuildOnlyContainerValidation()` escape hatch exists for exceptional cases, but it should not be the normal way to deploy JavaScript frontends.
+Prefer fixing the app model by choosing one of the deployment shapes in this article. The app-wide escape hatch exists for exceptional cases, but it should not be the normal way to deploy JavaScript frontends.
To disable the validation for the whole app, call `DisableBuildOnlyContainerValidation` on the pipeline:
@@ -1261,7 +1262,7 @@ JavaScript app resource 'js' is configured to run script 'migrate', but publish
To resolve the conflict, choose one of the following options:
- **Remove or rename the Dockerfile** so Aspire generates a new one that runs your requested script as the container entrypoint.
-- **Override the container entrypoint explicitly** by calling `PublishAsDockerFile(...)` and configuring the entrypoint directly on the container resource. This keeps the existing Dockerfile and gives you full control over what runs:
+- **Override the container entrypoint explicitly** by calling and configuring the entrypoint directly on the container resource. This keeps the existing Dockerfile and gives you full control over what runs:
diff --git a/src/frontend/src/content/docs/deployment/kubernetes-gateway-aks.mdx b/src/frontend/src/content/docs/deployment/kubernetes-gateway-aks.mdx
index 42630e28b..3bae82442 100644
--- a/src/frontend/src/content/docs/deployment/kubernetes-gateway-aks.mdx
+++ b/src/frontend/src/content/docs/deployment/kubernetes-gateway-aks.mdx
@@ -11,8 +11,9 @@ sidebar:
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import OsAwareTabs from '@components/OsAwareTabs.astro';
+import ApiReference from '@components/ApiReference.astro';
-This walkthrough shows how to use `AddGateway` to expose Aspire services on Azure Kubernetes Service (AKS) with **Application Gateway for Containers (AGC)** and automatic TLS certificate provisioning via **cert-manager HTTP-01** challenges.
+This walkthrough shows how to use to expose Aspire services on Azure Kubernetes Service (AKS) with **Application Gateway for Containers (AGC)** and automatic TLS certificate provisioning via **cert-manager HTTP-01** challenges.
Gateway API with HTTP-01 is the **recommended approach** for TLS on AKS because:
@@ -21,7 +22,7 @@ Gateway API with HTTP-01 is the **recommended approach** for TLS on AKS because:
- **Works with any domain** — including the auto-assigned AGC FQDN (`*.alb.azure.com`), your own custom domain, or even without a pre-existing DNS zone.
-**Using `AddAzureKubernetesEnvironment`?** The integrated walkthrough at [Deploy to AKS — Expose your app to the internet](/deployment/kubernetes/aks/#expose-your-app-to-the-internet) covers Gateway API + AGC + cert-manager (HTTP-01) end to end with the Aspire-provisioned cluster. Use this page only if you have a pre-existing AKS cluster that wasn't provisioned by Aspire.
+**Using ?** The integrated walkthrough at [Deploy to AKS — Expose your app to the internet](/deployment/kubernetes/aks/#expose-your-app-to-the-internet) covers Gateway API + AGC + cert-manager (HTTP-01) end to end with the Aspire-provisioned cluster. Use this page only if you have a pre-existing AKS cluster that wasn't provisioned by Aspire.
@@ -495,7 +496,7 @@ builder.build().run();
-The `WithTls()` call with no arguments auto-generates the TLS secret name (`ingress-tls`) and adds a cert-manager annotation to the Gateway referencing the `ClusterIssuer` specified via the `clusterIssuer` parameter.
+The call with no arguments auto-generates the TLS secret name (`ingress-tls`) and adds a cert-manager annotation to the Gateway referencing the `ClusterIssuer` specified via the `clusterIssuer` parameter.
## Deploy
@@ -631,7 +632,7 @@ After deployment and DNS propagation, verify that your Gateway is configured cor
## How it works
-When you deploy a Gateway with `WithHostname()` and `WithTls()`, the following sequence occurs:
+When you deploy a Gateway with and `WithTls()`, the following sequence occurs:
diff --git a/src/frontend/src/content/docs/deployment/kubernetes-ingress-aks.mdx b/src/frontend/src/content/docs/deployment/kubernetes-ingress-aks.mdx
index aaa507eac..d94af4ea2 100644
--- a/src/frontend/src/content/docs/deployment/kubernetes-ingress-aks.mdx
+++ b/src/frontend/src/content/docs/deployment/kubernetes-ingress-aks.mdx
@@ -11,13 +11,14 @@ sidebar:
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import OsAwareTabs from '@components/OsAwareTabs.astro';
+import ApiReference from '@components/ApiReference.astro';
-This walkthrough shows how to use `AddIngress` to expose Aspire services on
+This walkthrough shows how to use to expose Aspire services on
Azure Kubernetes Service (AKS) with **Application Gateway for Containers (AGC)**
and automatic TLS certificate provisioning via **cert-manager** DNS-01 challenges.
-**Using `AddAzureKubernetesEnvironment`?** The integrated walkthrough at [Deploy to AKS — Expose your app to the internet](/deployment/kubernetes/aks/#expose-your-app-to-the-internet) covers AGC + cert-manager end to end without any of the manual `az aks`, `az network alb`, or `helm install` ceremony below. Use this page only if you have a pre-existing AKS cluster that wasn't provisioned by Aspire, or if you need DNS-01 certificate issuance against an Azure DNS zone.
+**Using ?** The integrated walkthrough at [Deploy to AKS — Expose your app to the internet](/deployment/kubernetes/aks/#expose-your-app-to-the-internet) covers AGC + cert-manager end to end without any of the manual `az aks`, `az network alb`, or `helm install` ceremony below. Use this page only if you have a pre-existing AKS cluster that wasn't provisioned by Aspire, or if you need DNS-01 certificate issuance against an Azure DNS zone.
@@ -726,7 +727,7 @@ After the deployment completes, verify the ingress is working:
## How TLS works with Ingress on AGC
When you deploy an ingress with the `cert-manager.io/cluster-issuer` annotation
-and `WithTls`, the following sequence occurs:
+and , the following sequence occurs:
@@ -807,7 +808,7 @@ const ingress = k8s.addIngress("ingress")
Deploy without a custom hostname
-When you omit `WithHostname`, AGC automatically assigns a generated FQDN to the
+When you omit , AGC automatically assigns a generated FQDN to the
ingress. You won't be able to use cert-manager for TLS because you don't control
the domain. The AGC-assigned FQDN uses a wildcard certificate managed by Azure.
diff --git a/src/frontend/src/content/docs/deployment/kubernetes-ingress.mdx b/src/frontend/src/content/docs/deployment/kubernetes-ingress.mdx
index 624015c67..647a860e0 100644
--- a/src/frontend/src/content/docs/deployment/kubernetes-ingress.mdx
+++ b/src/frontend/src/content/docs/deployment/kubernetes-ingress.mdx
@@ -7,6 +7,7 @@ sidebar:
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
When you deploy an Aspire application to Kubernetes, your services are accessible only within the cluster by default. To expose services to external traffic — such as a web frontend that users access from the internet — you need to configure an **Ingress** or **Gateway** resource that routes traffic from outside the cluster to your services.
@@ -29,7 +30,7 @@ Aspire provides first-class APIs for defining Ingress and Gateway API resources
new traffic-routing capabilities are landing in Gateway API instead. For new
Aspire deployments, prefer
[`AddGateway(...)`](/deployment/kubernetes-gateway-aks/) over
- `AddIngress(...)` unless your cluster or controller doesn't yet support
+ unless your cluster or controller doesn't yet support
Gateway API. See [Gateway API
concepts](https://gateway-api.sigs.k8s.io/concepts/api-overview/) for the
upstream design rationale.
@@ -47,7 +48,7 @@ Kubernetes offers two approaches for routing external traffic to your services:
| **Routing features** | Host and path matching | Host, path, header, query, method matching |
| **Extensibility** | Controller-specific annotations | Standardized filters and policies |
| **Traffic splitting** | Not standardized | First-class weighted backends |
-| **Aspire API** | `AddIngress()` | `AddGateway()` |
+| **Aspire API** | `AddIngress()` | |
**Recommendation:** Use **Gateway API** for new deployments. It's the future direction of Kubernetes traffic management and offers richer routing capabilities with better portability across providers. Use **Ingress** when your cluster or ingress controller doesn't support the Gateway API yet.
@@ -146,7 +147,7 @@ If you call `WithHostname` more than once, each hostless path or route applies t
A Gateway API `HTTPRoute` supports at most 16 hostnames. If a Gateway has more than 16 hostnames and any hostless routes, publishing fails; define explicit host-scoped routes instead.
-An Ingress default backend (`WithDefaultBackend`) doesn't inherit the hostname and remains a catch-all for any traffic that doesn't match a more specific rule. When TLS is also configured, Aspire adds a rule that forwards each TLS hostname without its own rule to the default backend, because some ingress controllers require every TLS host to have a matching rule.
+An Ingress default backend ( ) doesn't inherit the hostname and remains a catch-all for any traffic that doesn't match a more specific rule. When TLS is also configured, Aspire adds a rule that forwards each TLS hostname without its own rule to the default backend, because some ingress controllers require every TLS host to have a matching rule.
This inheritance behavior applies from Aspire 13.6 onward. In earlier
diff --git a/src/frontend/src/content/docs/deployment/kubernetes/aks.mdx b/src/frontend/src/content/docs/deployment/kubernetes/aks.mdx
index 6894a47ea..47b09314e 100644
--- a/src/frontend/src/content/docs/deployment/kubernetes/aks.mdx
+++ b/src/frontend/src/content/docs/deployment/kubernetes/aks.mdx
@@ -7,6 +7,7 @@ description: Deploy your Aspire application to Azure Kubernetes Service with ful
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import OsAwareTabs from '@components/OsAwareTabs.astro';
+import ApiReference from '@components/ApiReference.astro';
Deploy your Aspire application to Azure Kubernetes Service (AKS). Aspire provisions the AKS cluster, Azure Container Registry (ACR), and any Azure resources your app depends on — then deploys your application in a single command.
@@ -88,7 +89,7 @@ Aspire builds your container images, pushes them to ACR, generates Helm charts,
### System node pool
-Customize the system node pool VM size and scaling using `WithSystemNodePool`:
+Customize the system node pool VM size and scaling using :
@@ -107,7 +108,7 @@ await aks.withSystemNodePool('Standard_D4s_v5', 1, 5);
### Additional node pools
-Add additional node pools for workload isolation or specialized hardware, then use `WithNodePool` to schedule workloads on them:
+Add additional node pools for workload isolation or specialized hardware, then use to schedule workloads on them:
@@ -166,14 +167,14 @@ This walkthrough uses the integrated AGC + cert-manager APIs that ship with [
### How AGC ingress fits together
-When you opt in via `AddLoadBalancer`, Aspire flips the AKS cluster's Bicep to enable the AKS-managed Gateway API and Application Load Balancer ingress profiles. After deploy, the cluster runs the Microsoft-managed AGC controller, which watches for Aspire's generated `Gateway` and `HTTPRoute` resources and programs an Azure-hosted HTTPS frontend automatically.
+When you opt in via , Aspire flips the AKS cluster's Bicep to enable the AKS-managed Gateway API and Application Load Balancer ingress profiles. After deploy, the cluster runs the Microsoft-managed AGC controller, which watches for Aspire's generated `Gateway` and `HTTPRoute` resources and programs an Azure-hosted HTTPS frontend automatically.
The pieces fit together like this:
| Aspire AppHost call | What it produces in Azure / Kubernetes |
|---|---|
-| `AddAzureKubernetesEnvironment` | AKS cluster (with Gateway API + ALB ingress profile when an LB is added) and ACR |
-| `AddAzureVirtualNetwork` + `AddSubnet` | A VNet and subnets — one for AKS nodes, one (or more) delegated to AGC |
+| | AKS cluster (with Gateway API + ALB ingress profile when an LB is added) and ACR |
+| + | A VNet and subnets — one for AKS nodes, one (or more) delegated to AGC |
| `AddLoadBalancer(name, subnet)` | An AGC `ApplicationLoadBalancer` CR plus role assignments on the subnet |
| `AddGateway(name).WithLoadBalancer(lb)` | A Gateway API `Gateway` resource attached to the AGC frontend |
| `WithRoute(path, endpoint)` | An `HTTPRoute` that points the path at your service |
@@ -285,7 +286,7 @@ Each AGC `ApplicationLoadBalancer` caps at five frontends (Gateways or Ingresses
### Add a Gateway with a route to your service
-`AddGateway` declares a Kubernetes Gateway API `Gateway`. `WithLoadBalancer` attaches it to the AGC ALB you just created and defaults the `gatewayClassName` to `azure-alb-external`. `WithRoute` adds an `HTTPRoute` that forwards a path to the named endpoint on one of your services.
+ declares a Kubernetes Gateway API `Gateway`. `WithLoadBalancer` attaches it to the AGC ALB you just created and defaults the `gatewayClassName` to `azure-alb-external`. `WithRoute` adds an `HTTPRoute` that forwards a path to the named endpoint on one of your services.
@@ -329,7 +330,7 @@ This first deploy serves plain HTTP only. Continue to the next step before expos
### Add automatic HTTPS with cert-manager
-`AddCertManager` installs the upstream cert-manager Helm chart with the CRDs and Gateway API watcher enabled and the `--force-conflicts` flag set so AKS's Azure Policy add-on doesn't break subsequent upgrades. `AddIssuer` adds a typed `ClusterIssuer` parented to that installation, and `WithTls(issuer)` on a gateway adds an HTTPS listener that cert-manager will populate with a real certificate.
+ installs the upstream cert-manager Helm chart with the CRDs and Gateway API watcher enabled and the `--force-conflicts` flag set so AKS's Azure Policy add-on doesn't break subsequent upgrades. adds a typed `ClusterIssuer` parented to that installation, and `WithTls(issuer)` on a gateway adds an HTTPS listener that cert-manager will populate with a real certificate.
@@ -394,12 +395,12 @@ await storefront.withTls(letsencrypt, {
-Let's Encrypt's production endpoint enforces strict rate limits. While iterating on your AppHost, swap `WithLetsEncryptProduction` for `WithLetsEncryptStaging` so failed attempts don't cost you your weekly quota. Browsers will warn on staging certificates — flip back to production once everything works end-to-end.
+Let's Encrypt's production endpoint enforces strict rate limits. While iterating on your AppHost, swap for so failed attempts don't cost you your weekly quota. Browsers will warn on staging certificates — flip back to production once everything works end-to-end.
#### How the certificate gets issued
-cert-manager validates domain ownership using the **HTTP-01** challenge configured by `WithHttp01Solver` — it asks the gateway to serve a token at `/.well-known/acme-challenge/` and verifies the response. There is no DNS API access required, so this works for the auto-assigned `*.alb.azure.com` FQDN out of the box.
+cert-manager validates domain ownership using the **HTTP-01** challenge configured by — it asks the gateway to serve a token at `/.well-known/acme-challenge/` and verifies the response. There is no DNS API access required, so this works for the auto-assigned `*.alb.azure.com` FQDN out of the box.
To break the chicken-and-egg problem where AGC won't program a Gateway whose HTTPS listener references a missing secret, Aspire pre-creates a self-signed bootstrap secret on the first deploy. Once AGC publishes the gateway's FQDN, Aspire patches the listener with the real hostname and cert-manager swaps the bootstrap certificate for a Let's Encrypt one. You may briefly see a self-signed certificate during the first deploy — this is expected.
@@ -434,7 +435,7 @@ The `*.alb.azure.com` FQDN is fine for testing but real applications need a host
### Tell the gateway about your hostname
-`WithHostname` adds the hostname to the gateway's `HTTPRoute`s and to the HTTPS listener so cert-manager issues the certificate for the right name. Use the parameter overload when the hostname differs across deployment environments.
+ adds the hostname to the gateway's `HTTPRoute`s and to the HTTPS listener so cert-manager issues the certificate for the right name. Use the parameter overload when the hostname differs across deployment environments.
@@ -551,7 +552,7 @@ After authentication, `aspire deploy` needs a target subscription and location.
### Customizing Azure resources
-Use `PublishAsKubernetesService` to customize the Kubernetes resources generated for individual services:
+Use to customize the Kubernetes resources generated for individual services:
@@ -584,7 +585,7 @@ await api.publishAsKubernetesService(async (resource) => {
## Install external Helm charts
-Use `AddHelmChart` on the AKS environment to install pre-existing Helm charts — such as cert-manager or NGINX ingress — as post-deploy pipeline steps alongside your application.
+Use on the AKS environment to install pre-existing Helm charts — such as cert-manager or NGINX ingress — as post-deploy pipeline steps alongside your application.
See [Install external Helm charts](/deployment/kubernetes/helm-charts/) for a full walkthrough of adding external charts, configuring Helm values, overriding namespaces and release names, and choosing destroy-time uninstall behavior.
diff --git a/src/frontend/src/content/docs/deployment/kubernetes/clusters.mdx b/src/frontend/src/content/docs/deployment/kubernetes/clusters.mdx
index 950050ef3..3b56d6040 100644
--- a/src/frontend/src/content/docs/deployment/kubernetes/clusters.mdx
+++ b/src/frontend/src/content/docs/deployment/kubernetes/clusters.mdx
@@ -7,6 +7,7 @@ description: Publish and deploy your Aspire application to an existing Kubernete
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import FileTree from 'starlight-plugin-icons/components/FileTree.astro';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
Deploy your Aspire application to any existing Kubernetes cluster. Aspire generates a complete Helm chart from your application model, and you can either apply it yourself or let `aspire deploy` install it directly using your current `kubectl` context.
@@ -211,7 +212,7 @@ If you prefer to publish first and deploy separately — for example, in a CI/CD
### Helm settings
-Use `WithHelm` to configure Helm chart settings such as namespace, release name, and chart version:
+Use to configure Helm chart settings such as namespace, release name, and chart version:
@@ -241,7 +242,7 @@ Helm is the default deployment engine. Call `WithHelm` only when you need to cus
### Node pools
-Use `AddNodePool` to reference an existing node pool in your cluster, then `WithNodePool` to schedule specific workloads on it:
+Use to reference an existing node pool in your cluster, then to schedule specific workloads on it:
@@ -270,7 +271,7 @@ For vanilla Kubernetes, `AddNodePool` creates a named reference to a node pool t
### Per-resource customization
-Use `PublishAsKubernetesService` to modify the generated Kubernetes resources for individual services:
+Use to modify the generated Kubernetes resources for individual services:
@@ -395,7 +396,7 @@ Kubernetes Secrets store values as base64-encoded strings. Verify that your Secr
## Install external Helm charts
-Use `AddHelmChart` on the Kubernetes environment to install pre-existing Helm charts — such as cert-manager, NGINX ingress, or monitoring tools — as post-deploy pipeline steps alongside your application's own chart.
+Use on the Kubernetes environment to install pre-existing Helm charts — such as cert-manager, NGINX ingress, or monitoring tools — as post-deploy pipeline steps alongside your application's own chart.
See [Install external Helm charts](/deployment/kubernetes/helm-charts/) for a full walkthrough of adding external charts, configuring Helm values, overriding namespaces and release names, and choosing destroy-time uninstall behavior.
diff --git a/src/frontend/src/content/docs/deployment/kubernetes/helm-charts.mdx b/src/frontend/src/content/docs/deployment/kubernetes/helm-charts.mdx
index 6a4b1abd7..756766fc5 100644
--- a/src/frontend/src/content/docs/deployment/kubernetes/helm-charts.mdx
+++ b/src/frontend/src/content/docs/deployment/kubernetes/helm-charts.mdx
@@ -5,6 +5,7 @@ description: Learn how to install external Helm charts alongside your Aspire app
import { Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
Install pre-existing Helm charts — such as cert-manager, NGINX ingress controller, or monitoring tools — as part of your Aspire Kubernetes deployment. Aspire runs `helm upgrade --install` for each configured external chart after deploying your application's own generated Helm chart.
@@ -16,7 +17,7 @@ Install pre-existing Helm charts — such as cert-manager, NGINX ingress control
## Deployment order
-When you use `aspire deploy`, Aspire deploys your application as a Helm chart and then runs any additional install steps you have defined. `AddHelmChart` registers one of these post-deploy pipeline steps. The install order is:
+When you use `aspire deploy`, Aspire deploys your application as a Helm chart and then runs any additional install steps you have defined. registers one of these post-deploy pipeline steps. The install order is:
diff --git a/src/frontend/src/content/docs/deployment/kubernetes/persistent-volumes.mdx b/src/frontend/src/content/docs/deployment/kubernetes/persistent-volumes.mdx
index 32fbba5b3..4624d9c4f 100644
--- a/src/frontend/src/content/docs/deployment/kubernetes/persistent-volumes.mdx
+++ b/src/frontend/src/content/docs/deployment/kubernetes/persistent-volumes.mdx
@@ -6,8 +6,9 @@ description: Model durable storage as first-class persistent volume resources in
import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
-Stateful workloads — databases, message brokers, or any service that writes durable data — need storage that survives pod restarts and rescheduling. Call `AddPersistentVolume` on a Kubernetes environment to describe a durable disk once in your AppHost, configure its storage class, capacity, access modes, and annotations with fluent methods, then bind it to one or more workloads:
+Stateful workloads — databases, message brokers, or any service that writes durable data — need storage that survives pod restarts and rescheduling. Call on a Kubernetes environment to describe a durable disk once in your AppHost, configure its storage class, capacity, access modes, and annotations with fluent methods, then bind it to one or more workloads:
@@ -242,7 +243,7 @@ This default only applies to workloads bound through `WithPersistentVolume(...)`
### Overriding or removing the default
-The default security context is applied before any `PublishAsKubernetesService` callback runs, so a workload or cluster that needs a different group can replace it:
+The default security context is applied before any callback runs, so a workload or cluster that needs a different group can replace it:
diff --git a/src/frontend/src/content/docs/deployment/pipelines.mdx b/src/frontend/src/content/docs/deployment/pipelines.mdx
index 06608baa5..1ef11664f 100644
--- a/src/frontend/src/content/docs/deployment/pipelines.mdx
+++ b/src/frontend/src/content/docs/deployment/pipelines.mdx
@@ -9,6 +9,7 @@ lastUpdated: true
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
When you compose your distributed app in Aspire's **AppHost**, you're not just defining services for local development and orchestration—you're also setting up the foundation for deployment. The same composition you use to run and debug locally is leveraged when you publish your app, ensuring consistency from development through to production.
@@ -149,8 +150,8 @@ Dependencies in Aspire pipelines are explicit and purpose-driven, unlike traditi
Steps declare their relationships using:
-- `PipelineStep.DependsOn`: This step must run after another step completes successfully
-- `PipelineStep.RequiredBy`: Another step must run after this step (inverse dependency declaration)
+- : This step must run after another step completes successfully
+- : Another step must run after this step (inverse dependency declaration)
**Example dependency relationships:**
@@ -520,7 +521,7 @@ aspire do validate
### Resource-level steps
-Resources can contribute their own pipeline steps using `WithPipelineStepFactory`:
+Resources can contribute their own pipeline steps using :
```csharp title="Resource-level custom step"
var api = builder.AddProject("api")
@@ -566,7 +567,7 @@ You can choose from two dependency types to fix the step order:
### Pipeline configuration
-Resources can also customize how they participate in the pipeline using `WithPipelineConfiguration`, which provides control over step ordering and resource-specific pipeline behavior.
+Resources can also customize how they participate in the pipeline using , which provides control over step ordering and resource-specific pipeline behavior.
The `WithPipelineConfiguration` API is experimental and may change in future releases. Refer to the [aspire do command reference](/reference/cli/commands/aspire-do/) for the latest details on pipeline configuration.
diff --git a/src/frontend/src/content/docs/diagnostics/aspireacadomains001.mdx b/src/frontend/src/content/docs/diagnostics/aspireacadomains001.mdx
index 44d4ed331..16d195946 100644
--- a/src/frontend/src/content/docs/diagnostics/aspireacadomains001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspireacadomains001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler error ASPIREACADOMAINS001 and
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
has graduated from experimental and no longer requires suppressing this diagnostic.
:::
## Example
diff --git a/src/frontend/src/content/docs/diagnostics/aspireacanaming001.mdx b/src/frontend/src/content/docs/diagnostics/aspireacanaming001.mdx
index 8d8bb65d2..bec10d8b5 100644
--- a/src/frontend/src/content/docs/diagnostics/aspireacanaming001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspireacanaming001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIREACANAMING001 an
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
WithCompactResourceNaming is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
-This diagnostic warning is reported when using the experimental `WithCompactResourceNaming` extension method on an Azure Container App environment. This API opts the environment into shorter, compact names for the volume-backing Azure Storage resources that Aspire provisions, which avoids storage-account name-length collisions when the environment name is long. It doesn't rename the Container App environment, container registry, Log Analytics workspace, or managed identity.
+This diagnostic warning is reported when using the experimental extension method on an Azure Container App environment. This API opts the environment into shorter, compact names for the volume-backing Azure Storage resources that Aspire provisions, which avoids storage-account name-length collisions when the environment name is long. It doesn't rename the Container App environment, container registry, Log Analytics workspace, or managed identity.
## Example
diff --git a/src/frontend/src/content/docs/diagnostics/aspireazure002.mdx b/src/frontend/src/content/docs/diagnostics/aspireazure002.mdx
index b2bf5ccea..bdf062535 100644
--- a/src/frontend/src/content/docs/diagnostics/aspireazure002.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspireazure002.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler error ASPIREAZURE002 and how
---
import { Badge, Aside } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
- As of Aspire 13.4, the `PublishAsAzureContainerAppJob` and `PublishAsScheduledAzureContainerAppJob` APIs are no longer experimental and do not trigger `ASPIREAZURE002`. This diagnostic only applies if you are using an earlier version of Aspire.
+ As of Aspire 13.4, the and APIs are no longer experimental and do not trigger `ASPIREAZURE002`. This diagnostic only applies if you are using an earlier version of Aspire.
> Azure Container App Jobs are for evaluation purposes only and are subject to change or removal in future updates. Suppress this diagnostic to proceed.
diff --git a/src/frontend/src/content/docs/diagnostics/aspireazure003.mdx b/src/frontend/src/content/docs/diagnostics/aspireazure003.mdx
index e781e3b80..79215edff 100644
--- a/src/frontend/src/content/docs/diagnostics/aspireazure003.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspireazure003.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler error ASPIREAZURE003 and how
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
Azure Virtual Network types and members are for evaluation purposes only and are subject to change or removal in future updates. Suppress this diagnostic to proceed.
-The Aspire Azure hosting integration now ships with support for Azure Virtual Networks. If you're using any of the `Aspire.Hosting.Azure.Network` APIs such as `AddAzureVirtualNetwork`, you might see a compiler error/warning indicating that the API is experimental. This behavior is expected, as the API is still in preview and the shape of this API is expected to change in the future.
+The Aspire Azure hosting integration now ships with support for Azure Virtual Networks. If you're using any of the `Aspire.Hosting.Azure.Network` APIs such as , you might see a compiler error/warning indicating that the API is experimental. This behavior is expected, as the API is still in preview and the shape of this API is expected to change in the future.
## Example
diff --git a/src/frontend/src/content/docs/diagnostics/aspireblazor001.mdx b/src/frontend/src/content/docs/diagnostics/aspireblazor001.mdx
index 143c40728..826ed346a 100644
--- a/src/frontend/src/content/docs/diagnostics/aspireblazor001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspireblazor001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIREBLAZOR001 and h
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
`, and `WithBlazorClientApp`
+- `BlazorGatewayExtensions` — , , , and `WithBlazorClientApp`
- `BlazorHostedExtensions` — client wiring for a hosted Blazor Web App
- `BlazorWasmAppResource` — the resource type that represents a Blazor WebAssembly app
diff --git a/src/frontend/src/content/docs/diagnostics/aspirebrowserlogs001.mdx b/src/frontend/src/content/docs/diagnostics/aspirebrowserlogs001.mdx
index befc10bbd..f6c06777d 100644
--- a/src/frontend/src/content/docs/diagnostics/aspirebrowserlogs001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspirebrowserlogs001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler error ASPIREBROWSERLOGS001 an
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
extension method
- `BrowserUserDataMode` enum
- Other types and members that configure the tracked browser session
diff --git a/src/frontend/src/content/docs/diagnostics/aspirecertificates001.mdx b/src/frontend/src/content/docs/diagnostics/aspirecertificates001.mdx
index 95afddca1..2c7fcc4ea 100644
--- a/src/frontend/src/content/docs/diagnostics/aspirecertificates001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspirecertificates001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIRECERTIFICATES001
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
,
+- Certificate configuration builder extensions like and
These APIs enable configuring HTTPS/TLS server certificates for resources in your Aspire application, including support for custom certificates and developer certificates for local development scenarios.
diff --git a/src/frontend/src/content/docs/diagnostics/aspirecommand001.mdx b/src/frontend/src/content/docs/diagnostics/aspirecommand001.mdx
index 17aa16399..e2a2ebda8 100644
--- a/src/frontend/src/content/docs/diagnostics/aspirecommand001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspirecommand001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIRECOMMAND001 and
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
>`)
+- The overload that accepts a validation callback (`Func>`)
- `RequiredCommandAnnotation`
- `IRequiredCommandValidator`
- `RequiredCommandValidationContext` and `RequiredCommandValidationResult`
diff --git a/src/frontend/src/content/docs/diagnostics/aspirecompute002.mdx b/src/frontend/src/content/docs/diagnostics/aspirecompute002.mdx
index b3ea6cd9c..2b34602f5 100644
--- a/src/frontend/src/content/docs/diagnostics/aspirecompute002.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspirecompute002.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIRECOMPUTE002 and
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
-> The `GetHostAddressExpression` method is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
+> The method is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
This diagnostic warning is reported when using the experimental `GetHostAddressExpression` method from the `IComputeEnvironmentResource` interface.
diff --git a/src/frontend/src/content/docs/diagnostics/aspirecompute003.mdx b/src/frontend/src/content/docs/diagnostics/aspirecompute003.mdx
index 710cd4742..1f7f46112 100644
--- a/src/frontend/src/content/docs/diagnostics/aspirecompute003.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspirecompute003.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIRECOMPUTE003 and
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
- Supports chaining with other resource configuration methods
## To suppress this warning
diff --git a/src/frontend/src/content/docs/diagnostics/aspirecosmosdb001.mdx b/src/frontend/src/content/docs/diagnostics/aspirecosmosdb001.mdx
index ff13b1a1f..7d00c2759 100644
--- a/src/frontend/src/content/docs/diagnostics/aspirecosmosdb001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspirecosmosdb001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler error ASPIRECOSMOSDB001 and h
---
import { Badge, Aside } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
- As of Aspire 13.6, `RunAsPreviewEmulator` and `WithDataExplorer` are no longer experimental and do not trigger `ASPIRECOSMOSDB001`. `RunAsEmulator` now defaults to the Linux-based (vNext) emulator, and `RunAsPreviewEmulator` is retained only as an obsolete compatibility alias that forwards to `RunAsEmulator`. Use `RunAsClassicEmulator` if you need the classic (Windows-based) emulator instead. This diagnostic only applies if you're using an earlier version of Aspire.
+ As of Aspire 13.6, and are no longer experimental and do not trigger `ASPIRECOSMOSDB001`. now defaults to the Linux-based (vNext) emulator, and `RunAsPreviewEmulator` is retained only as an obsolete compatibility alias that forwards to `RunAsEmulator`. Use if you need the classic (Windows-based) emulator instead. This diagnostic only applies if you're using an earlier version of Aspire.
> `RunAsPreviewEmulator` is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
diff --git a/src/frontend/src/content/docs/diagnostics/aspirecsharpapps001.mdx b/src/frontend/src/content/docs/diagnostics/aspirecsharpapps001.mdx
index 2289f091c..798ba5eeb 100644
--- a/src/frontend/src/content/docs/diagnostics/aspirecsharpapps001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspirecsharpapps001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler error ASPIRECSHARPAPPS001 and
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
-> `AddCSharpApp` is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
+> is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
Aspire provides a way to add C# app resources to the Aspire AppHost with the `AddCSharpApp` extension. This allows you to reference C# file-based app files (.cs), project files (.csproj), or project directories (directories containing a .csproj file) directly without needing a `ProjectReference` from the AppHost project to the C# application. Since the shape of this API is expected to change in the future, it's experimental.
diff --git a/src/frontend/src/content/docs/diagnostics/aspiredockerfilebuilder001.mdx b/src/frontend/src/content/docs/diagnostics/aspiredockerfilebuilder001.mdx
index 84f8a6ee1..909a39f8f 100644
--- a/src/frontend/src/content/docs/diagnostics/aspiredockerfilebuilder001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspiredockerfilebuilder001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIREDOCKERFILEBUILD
---
import { Badge, Tabs, TabItem } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
-The callback can also be applied to an existing container resource with `WithDockerfileBuilder`:
+The callback can also be applied to an existing container resource with :
diff --git a/src/frontend/src/content/docs/diagnostics/aspiredotnetproject001.mdx b/src/frontend/src/content/docs/diagnostics/aspiredotnetproject001.mdx
index 49889017c..362eba790 100644
--- a/src/frontend/src/content/docs/diagnostics/aspiredotnetproject001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspiredotnetproject001.mdx
@@ -5,6 +5,7 @@ description: Learn why Aspire 13.6 removed ASPIREDOTNETPROJECT001 from the prere
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
, `DotnetProjectResource`, and the related overloads no longer emit `ASPIREDOTNETPROJECT001`. You can remove suppressions for these APIs after upgrading.
-`AddDotnetProjectBlazorGateway` and the matching `WithBlazorClientApp` overload in `Aspire.Hosting.Blazor` also no longer emit this diagnostic. The separate [`ASPIREBLAZOR001`](/diagnostics/aspireblazor001/) diagnostic still applies to experimental Blazor hosting types.
+ and the matching `WithBlazorClientApp` overload in `Aspire.Hosting.Blazor` also no longer emit this diagnostic. The separate [`ASPIREBLAZOR001`](/diagnostics/aspireblazor001/) diagnostic still applies to experimental Blazor hosting types.
:::
> AddDotnetProject types and members are for evaluation purposes only and are subject to change or removal in future updates. Suppress this diagnostic to proceed.
diff --git a/src/frontend/src/content/docs/diagnostics/aspiredotnettool001.mdx b/src/frontend/src/content/docs/diagnostics/aspiredotnettool001.mdx
index fb93ed2fd..f3791fa3d 100644
--- a/src/frontend/src/content/docs/diagnostics/aspiredotnettool001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspiredotnettool001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIREDOTNETTOOL001 a
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
extension methods
:::note[Which ID do I suppress?]
Aspire emits this diagnostic as `ASPIREDOTNETTOOL`, without a numeric suffix. This documentation uses `ASPIREDOTNETTOOL001` as the canonical slug so it stays consistent with every other `ASPIRE*` diagnostic. Suppress the `ASPIREDOTNETTOOL` ID that appears in your build output; the examples below suppress both IDs so they keep working if the emitted ID ever changes.
diff --git a/src/frontend/src/content/docs/diagnostics/aspiredurabletask001.mdx b/src/frontend/src/content/docs/diagnostics/aspiredurabletask001.mdx
index 119a017d5..60eed059a 100644
--- a/src/frontend/src/content/docs/diagnostics/aspiredurabletask001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspiredurabletask001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIREDURABLETASK001
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
`
-- `RunAsEmulator` extension method on `IResourceBuilder`
-- `AddTaskHub` extension method on `IResourceBuilder`
-- `WithTaskHubName` extension methods on `IResourceBuilder`
+- extension method on `IDistributedApplicationBuilder`
+- extension methods on `IResourceBuilder`
+- extension method on `IResourceBuilder`
+- extension method on `IResourceBuilder`
+- extension methods on `IResourceBuilder`
- `DurableTaskSchedulerResource` class
- `DurableTaskHubResource` class
- `DurableTaskSchedulerEmulatorResource` class
diff --git a/src/frontend/src/content/docs/diagnostics/aspireextension001.mdx b/src/frontend/src/content/docs/diagnostics/aspireextension001.mdx
index b34745ecf..5e6df4170 100644
--- a/src/frontend/src/content/docs/diagnostics/aspireextension001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspireextension001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIREEXTENSION001 an
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
. This allows extensions and IDEs to vary host tool arguments as necessary to reach the desired execution mode of the program (e.g. running under debugger vs not, enabling or disabling profiling etc.) without affecting startup arguments the program sees itself.
## Example
diff --git a/src/frontend/src/content/docs/diagnostics/aspirehostingpython001.mdx b/src/frontend/src/content/docs/diagnostics/aspirehostingpython001.mdx
index 672db1622..78fe2b156 100644
--- a/src/frontend/src/content/docs/diagnostics/aspirehostingpython001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspirehostingpython001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler error ASPIREHOSTINGPYTHON001
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
-> `AddPythonApp` is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
+> is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
Aspire provides a way to add Python executables or applications to the Aspire AppHost with the `AddPythonApp` extension. Since the shape of this API is expected to change in the future, it's experimental.
diff --git a/src/frontend/src/content/docs/diagnostics/aspirejavascript001.mdx b/src/frontend/src/content/docs/diagnostics/aspirejavascript001.mdx
index ac3673fd4..b65cb952f 100644
--- a/src/frontend/src/content/docs/diagnostics/aspirejavascript001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspirejavascript001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIREJAVASCRIPT001 a
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
`
-- `PublishAsNodeServer`
-- `PublishAsPackageScript`
-- `AddNextJsApp`
-- `DisableBuildValidation`
+-
+-
+-
+-
+-
These APIs enable you to configure how JavaScript applications (Vite, Node.js, Next.js) are published and deployed via Aspire's pipeline infrastructure.
diff --git a/src/frontend/src/content/docs/diagnostics/aspiremcp001.mdx b/src/frontend/src/content/docs/diagnostics/aspiremcp001.mdx
index de390167a..77337607e 100644
--- a/src/frontend/src/content/docs/diagnostics/aspiremcp001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspiremcp001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIREMCP001 and how
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
MCP server types and members are for evaluation purposes only and are subject to change or removal in future updates. Suppress this diagnostic to proceed.
-This diagnostic warning is reported when using the experimental `WithMcpServer` extension method and related Model Context Protocol (MCP) server APIs. These APIs enable Aspire tooling to discover and proxy MCP servers exposed by resources.
+This diagnostic warning is reported when using the experimental extension method and related Model Context Protocol (MCP) server APIs. These APIs enable Aspire tooling to discover and proxy MCP servers exposed by resources.
The following APIs are protected by this diagnostic:
diff --git a/src/frontend/src/content/docs/diagnostics/aspirepersistence001.mdx b/src/frontend/src/content/docs/diagnostics/aspirepersistence001.mdx
index 5b5044e51..ebb0658a2 100644
--- a/src/frontend/src/content/docs/diagnostics/aspirepersistence001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspirepersistence001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler error ASPIREPERSISTENCE001 an
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
+-
+-
+-
- `PersistenceAnnotation`
- `PersistenceMode`
diff --git a/src/frontend/src/content/docs/diagnostics/aspirepipelines003.mdx b/src/frontend/src/content/docs/diagnostics/aspirepipelines003.mdx
index 32f07ac8b..22243a18c 100644
--- a/src/frontend/src/content/docs/diagnostics/aspirepipelines003.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspirepipelines003.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler error ASPIREPIPELINES003 and
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
- Extension methods for configuring compute resource builds
- Related annotations, options, and extension methods
## To correct this error
diff --git a/src/frontend/src/content/docs/diagnostics/aspirepostgres001.mdx b/src/frontend/src/content/docs/diagnostics/aspirepostgres001.mdx
index 2d9486bd5..3765e01fb 100644
--- a/src/frontend/src/content/docs/diagnostics/aspirepostgres001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspirepostgres001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIREPOSTGRES001 —
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
The PostgreSQL MCP integration APIs are experimental and subject to change or removal in future updates. Suppress this diagnostic to proceed.
-The `WithPostgresMcp` extension method for adding Model Context Protocol (MCP) support to PostgreSQL resources is an experimental feature. This API may change or be removed in future versions.
+The extension method for adding Model Context Protocol (MCP) support to PostgreSQL resources is an experimental feature. This API may change or be removed in future versions.
The following APIs are protected by this diagnostic:
- `WithPostgresMcp` on `IResourceBuilder` — adds a Postgres MCP server container to a PostgreSQL database resource.
-- `WithPostgresMcp` on `IResourceBuilder` — adds a Postgres MCP server container to an Azure PostgreSQL Flexible Server database resource running as a container.
+- on `IResourceBuilder` — adds a Postgres MCP server container to an Azure PostgreSQL Flexible Server database resource running as a container.
## Example
diff --git a/src/frontend/src/content/docs/diagnostics/aspireprobes001.mdx b/src/frontend/src/content/docs/diagnostics/aspireprobes001.mdx
index ed8c0fbf2..3d441c77d 100644
--- a/src/frontend/src/content/docs/diagnostics/aspireprobes001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspireprobes001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIREPROBES001 and h
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
extension methods
- `EndpointProbeAnnotation` class
These APIs enable configuring HTTP health probes for resources to monitor startup, readiness, and liveness states, similar to Kubernetes health check concepts.
diff --git a/src/frontend/src/content/docs/diagnostics/aspireprocesscommand001.mdx b/src/frontend/src/content/docs/diagnostics/aspireprocesscommand001.mdx
index ca1b2ac3c..e9dc7d287 100644
--- a/src/frontend/src/content/docs/diagnostics/aspireprocesscommand001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspireprocesscommand001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIREPROCESSCOMMAND0
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
Process command types and members are for evaluation purposes only and are subject to change or removal in future updates. Suppress this diagnostic to proceed.
-This diagnostic warning is reported when using the experimental `WithProcessCommand` extension method and related process command APIs. These APIs enable AppHost authors to expose custom resource commands backed by local processes (binaries, shell scripts, and other executables on the AppHost machine).
+This diagnostic warning is reported when using the experimental extension method and related process command APIs. These APIs enable AppHost authors to expose custom resource commands backed by local processes (binaries, shell scripts, and other executables on the AppHost machine).
The following APIs are protected by this diagnostic:
diff --git a/src/frontend/src/content/docs/diagnostics/aspireprojects001.mdx b/src/frontend/src/content/docs/diagnostics/aspireprojects001.mdx
index c0552d53c..342e5846d 100644
--- a/src/frontend/src/content/docs/diagnostics/aspireprojects001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspireprojects001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIREPROJECTS001 and
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
resources. The resource must carry `IProjectMetadata`. They exist primarily so language integration packages (such as `Aspire.Hosting.Dotnet`) can reuse this behavior for resources that are launched through the .NET SDK.
## Example
diff --git a/src/frontend/src/content/docs/diagnostics/aspireradius003.mdx b/src/frontend/src/content/docs/diagnostics/aspireradius003.mdx
index cb0d5e7d5..9c55d1114 100644
--- a/src/frontend/src/content/docs/diagnostics/aspireradius003.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspireradius003.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIRERADIUS003 and h
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
extension method
- `TerminalOptions`
In Aspire 13.6 preview, the same diagnostic also covers AppHost-owned terminals and terminal interactions, including `TerminalService`, `AspireTerminal`, `TerminalLaunchOptions`, `TerminalPlacement`, `AspireTerminalKey`, `PromptTerminalAsync`, `TerminalInteractionOptions`, and `TerminalContext`.
diff --git a/src/frontend/src/content/docs/diagnostics/aspireusersecrets001.mdx b/src/frontend/src/content/docs/diagnostics/aspireusersecrets001.mdx
index e9cc39d8e..ff3f072cf 100644
--- a/src/frontend/src/content/docs/diagnostics/aspireusersecrets001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspireusersecrets001.mdx
@@ -5,6 +5,7 @@ description: Learn what causes the Aspire compiler warning ASPIREUSERSECRETS001
---
import { Badge } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
**: Attempts to set a secret value in user secrets
+- ** **: Gets a secret from configuration or generates and saves a new value
- **`SaveStateAsync()`**: Saves deployment state to user secrets asynchronously
## To correct this warning
diff --git a/src/frontend/src/content/docs/diagnostics/overview.mdx b/src/frontend/src/content/docs/diagnostics/overview.mdx
index 9e0b41b8e..948812a0a 100644
--- a/src/frontend/src/content/docs/diagnostics/overview.mdx
+++ b/src/frontend/src/content/docs/diagnostics/overview.mdx
@@ -4,6 +4,8 @@ seoTitle: 'Aspire diagnostics overview: ASPIRE compiler diagnostics'
description: Learn about the diagnostics tools and features available in Aspire — analyzers, compiler errors, the dashboard, structured telemetry, and troubleshooting workflows.
---
+import ApiReference from '@components/ApiReference.astro';
+
The following table lists the possible MSBuild and analyzer warnings and errors you might encounter with Aspire:
| Diagnostic ID | Type | Description |
@@ -18,9 +20,9 @@ The following table lists the possible MSBuild and analyzer warnings and errors
| [ASPIRE009](/diagnostics/aspire009/) | Error | 'Project' is configured to use the Aspire CLI bundle, but the bundle could not be resolved. |
| [ASPIRE010](/diagnostics/aspire010/) | Warning | 'Project' is configured with AspireUseCliBundle=false. Some Aspire features require the Aspire CLI bundle. |
| [ASPIRE011](/diagnostics/aspire011/) | Error | 'Project' is configured to invoke the Aspire CLI through DNX, but the dnx command could not be found on PATH. |
-| [ASPIREACADOMAINS001](/diagnostics/aspireacadomains001/) | (Experimental) Error | `ConfigureCustomDomain` is for evaluation purposes only and is subject to change or removal in future updates. |
-| [ASPIREACAEXPRESS001](/diagnostics/aspireacaexpress001/) | (Experimental) Error | `AsExpress` is for evaluation purposes only and is subject to change or removal in future updates. |
-| [ASPIREACANAMING001](/diagnostics/aspireacanaming001/) | (Experimental) Warning | `WithCompactResourceNaming` is for evaluation purposes only and is subject to change or removal in future updates. |
+| [ASPIREACADOMAINS001](/diagnostics/aspireacadomains001/) | (Experimental) Error | is for evaluation purposes only and is subject to change or removal in future updates. |
+| [ASPIREACAEXPRESS001](/diagnostics/aspireacaexpress001/) | (Experimental) Error | is for evaluation purposes only and is subject to change or removal in future updates. |
+| [ASPIREACANAMING001](/diagnostics/aspireacanaming001/) | (Experimental) Warning | is for evaluation purposes only and is subject to change or removal in future updates. |
| [ASPIREEXPORT001](/diagnostics/aspireexport001/) | Error | `[AspireExport]` method must be static. |
| [ASPIREEXPORT002](/diagnostics/aspireexport002/) | Error | Invalid export ID format (must match `[a-zA-Z][a-zA-Z0-9.]*`). |
| [ASPIREEXPORT003](/diagnostics/aspireexport003/) | Error | Return type is not ATS-compatible. |
@@ -45,8 +47,8 @@ The following table lists the possible MSBuild and analyzer warnings and errors
| [ASPIRECOMPUTE003](/diagnostics/aspirecompute003/) | (Experimental) Warning | The ContainerRegistryResource type is for evaluation purposes only and is subject to change or removal in future updates. |
| [ASPIRECONTAINERRUNTIME001](/diagnostics/aspirecontainerruntime001/) | (Experimental) Warning | Type is for evaluation purposes only and is subject to change or removal in future updates. |
| [ASPIRECONTAINERSHELLEXECUTION001](/diagnostics/aspirecontainershellexecution001/) | (Experimental) Warning | Container shell execution property is for evaluation purposes only and is subject to change or removal in future updates. |
-| [ASPIRECOSMOSDB001](/diagnostics/aspirecosmosdb001/) | (Experimental) Error | `RunAsPreviewEmulator` is for evaluation purposes only and is subject to change or removal in future updates. |
-| [ASPIRECSHARPAPPS001](/diagnostics/aspirecsharpapps001/) | (Experimental) Error | `AddCSharpApp` is for evaluation purposes only and is subject to change or removal in future updates. |
+| [ASPIRECOSMOSDB001](/diagnostics/aspirecosmosdb001/) | (Experimental) Error | is for evaluation purposes only and is subject to change or removal in future updates. |
+| [ASPIRECSHARPAPPS001](/diagnostics/aspirecsharpapps001/) | (Experimental) Error | is for evaluation purposes only and is subject to change or removal in future updates. |
| [ASPIREDOCKERFILEBUILDER001](/diagnostics/aspiredockerfilebuilder001/) | (Experimental) Warning | Dockerfile builder types and members are for evaluation purposes only and are subject to change or removal in future updates. |
| [ASPIREDOTNETPROJECT001](/diagnostics/aspiredotnetproject001/) | (Experimental) Warning | Removed from the prerelease `Aspire.Hosting.Dotnet` and `Aspire.Hosting.Blazor` packages in Aspire 13.6. Their APIs remain unstable and may change. |
| [ASPIREDOTNETTOOL001](/diagnostics/aspiredotnettool001/) | (Experimental) Warning | .NET tool resource types and members are for evaluation purposes only and are subject to change or removal in future updates. |
@@ -54,7 +56,7 @@ The following table lists the possible MSBuild and analyzer warnings and errors
| [ASPIREFILESYSTEM001](/diagnostics/aspirefilesystem001/) | (Experimental) Warning | File system service types and members are for evaluation purposes only and are subject to change or removal in future updates. |
| [ASPIREINTERACTION001](/diagnostics/aspireinteraction001/) | (Experimental) Warning | Interaction service types and members are for evaluation purposes only and are subject to change or removal in future updates. |
| [ASPIREJAVASCRIPT001](/diagnostics/aspirejavascript001/) | (Experimental) Warning | JavaScript hosting and publishing APIs are for evaluation purposes only and are subject to change or removal in future updates. |
-| [ASPIREHOSTINGPYTHON001](/diagnostics/aspirehostingpython001/) | (Experimental) Error | `AddPythonApp` is for evaluation purposes only and is subject to change or removal in future updates. |
+| [ASPIREHOSTINGPYTHON001](/diagnostics/aspirehostingpython001/) | (Experimental) Error | is for evaluation purposes only and is subject to change or removal in future updates. |
| [ASPIREMCP001](/diagnostics/aspiremcp001/) | (Experimental) Warning | MCP server types and members are for evaluation purposes only and are subject to change or removal in future updates. |
| [ASPIREPERSISTENCE001](/diagnostics/aspirepersistence001/) | (Experimental) Error | Resource lifetime types and members are for evaluation purposes only and are subject to change or removal in future updates. |
| [ASPIREPIPELINES001](/diagnostics/aspirepipelines001/) | (Experimental) Error | Pipeline infrastructure APIs are for evaluation purposes only and are subject to change or removal in future updates. |
diff --git a/src/frontend/src/content/docs/extensibility/custom-resources.mdx b/src/frontend/src/content/docs/extensibility/custom-resources.mdx
index c0b7aba83..a73894aef 100644
--- a/src/frontend/src/content/docs/extensibility/custom-resources.mdx
+++ b/src/frontend/src/content/docs/extensibility/custom-resources.mdx
@@ -5,6 +5,7 @@ description: "Learn how to create custom resource types for the Aspire AppHost t
import { Aside } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
Creating custom resources allows you to extend Aspire to model components that aren't covered by built-in integrations. This guide covers the patterns and APIs for building your own resource types.
@@ -32,7 +33,7 @@ Aspire provides several interfaces that give resources specific capabilities:
| `IResourceWithEndpoints` | Resource has network endpoints |
| `IResourceWithEnvironment` | Resource can configure environment variables |
| `IResourceWithArgs` | Resource accepts command-line arguments |
-| `IResourceWithWaitSupport` | Resource supports `WaitFor` orchestration |
+| `IResourceWithWaitSupport` | Resource supports orchestration |
| `IResourceWithParent` | Resource has a parent resource (lifecycle binding) |
### Implementing IResourceWithConnectionString
@@ -273,7 +274,7 @@ For more on how the Aspire Dashboard displays resources, see [Dashboard overview
## Custom icons
-Use `WithIconName` to display a custom icon for your resource in the dashboard. Any [Fluent UI system icon](https://github.com/microsoft/fluentui-system-icons/blob/main/icons_filled.md) can be used:
+Use to display a custom icon for your resource in the dashboard. Any [Fluent UI system icon](https://github.com/microsoft/fluentui-system-icons/blob/main/icons_filled.md) can be used:
```csharp title="Setting custom dashboard icons"
return builder.AddResource(resource)
diff --git a/src/frontend/src/content/docs/extensibility/interaction-service.mdx b/src/frontend/src/content/docs/extensibility/interaction-service.mdx
index 482dc7eb7..1f9412577 100644
--- a/src/frontend/src/content/docs/extensibility/interaction-service.mdx
+++ b/src/frontend/src/content/docs/extensibility/interaction-service.mdx
@@ -18,6 +18,7 @@ import multipleInputFilled from '@assets/extensibility/interaction-service-multi
import multipleInputFilledLight from '@assets/extensibility/interaction-service-multiple-input-filled-light.png';
import multipleInputLogs from '@assets/extensibility/interaction-service-multiple-input-logs.png';
import multipleInputLogsLight from '@assets/extensibility/interaction-service-multiple-input-logs-light.png';
+import ApiReference from '@components/ApiReference.astro';
The interaction service (`Aspire.Hosting.IInteractionService`) allows you to prompt users for input, request confirmation, and display messages. It works in two different contexts:
@@ -109,7 +110,7 @@ Any of the available callback-based extension methods of `IResourceBuilder` c
- **Custom resource types**: Gather input from users or confirm actions when you create custom resource types. Resource types are free to define dashboard interactions, such as prompting for user input or displaying messages.
-- **Custom resource commands**: Add commands to resources in the Aspire dashboard or CLI. Use the interaction service to prompt users for input or confirmation when these commands run. When you chain a call to `WithCommand` on a target `IResourceBuilder`, your callback can use the interaction service to gather input or confirm actions. For more information, see [Custom resource commands](/fundamentals/custom-resource-commands/).
+- **Custom resource commands**: Add commands to resources in the Aspire dashboard or CLI. Use the interaction service to prompt users for input or confirmation when these commands run. When you chain a call to on a target `IResourceBuilder`, your callback can use the interaction service to gather input or confirm actions. For more information, see [Custom resource commands](/fundamentals/custom-resource-commands/).
Commands might not be interactive when triggered from the Aspire CLI. Always check `IInteractionService.IsAvailable` before prompting and provide a fallback path when it returns `false`. [Command arguments](/fundamentals/custom-resource-commands/#command-arguments) are the best way to collect input in commands because they work in both the dashboard and CLI.
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 2ea965cdc..0aeb653d2 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
@@ -5,6 +5,7 @@ description: Annotate Aspire hosting integrations so they work with TypeScript A
---
import { Aside, Steps } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
Aspire hosting integrations are C# libraries that extend the AppHost with new resource types. By default, these integrations are only available in C# AppHosts. To make them available in TypeScript AppHosts, you annotate your APIs with ATS (Aspire Type System) attributes.
@@ -651,7 +652,7 @@ Prefer getter-only properties (`=> value;` or `{ get; }` without a setter) when
## Callback context types and the ATS-first editor pattern
-When you export a method that accepts a callback (such as `withEnvironmentCallback`, `withArgsCallback`, or `withUrls`), the callback receives a _context_ object. For ATS compatibility, context types should follow the ATS-first design:
+When you export a method that accepts a callback (such as `withEnvironmentCallback`, `withArgsCallback`, or ), the callback receives a _context_ object. For ATS compatibility, context types should follow the ATS-first design:
1. Use `[AspireExport]` (not `ExposeProperties = true`) on the context class.
2. Annotate only the properties that generated SDK callers need with individual `[AspireExport]` attributes.
diff --git a/src/frontend/src/content/docs/fundamentals/annotations-overview.mdx b/src/frontend/src/content/docs/fundamentals/annotations-overview.mdx
index a656aeac9..6345d86b4 100644
--- a/src/frontend/src/content/docs/fundamentals/annotations-overview.mdx
+++ b/src/frontend/src/content/docs/fundamentals/annotations-overview.mdx
@@ -6,6 +6,7 @@ description: Learn how Aspire annotations work, how the AppHost composes built-i
import { Aside } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
Annotations are a key extensibility mechanism in Aspire that allow you to attach metadata and behavior to resources. They provide a way to customize how resources are configured, deployed, and managed throughout the application lifecycle. This article explains how annotations work and how to use them effectively in your Aspire applications.
@@ -39,8 +40,8 @@ builder.Build().Run();
In this example:
-- `WithCommand` adds a `ResourceCommandAnnotation` that defines a custom command.
-- `WithUrl` adds a `ResourceUrlAnnotation` that defines a custom URL.
+- adds a `ResourceCommandAnnotation` that defines a custom command.
+- adds a `ResourceUrlAnnotation` that defines a custom URL.
## Adding and managing annotations
@@ -123,7 +124,7 @@ var postgres = builder.AddPostgres("postgres")
### `HealthCheckAnnotation`
-The `HealthCheckAnnotation` associates health checks with a resource, used by `WaitFor()` to determine when a resource is ready:
+The `HealthCheckAnnotation` associates health checks with a resource, used by to determine when a resource is ready:
```csharp title="AppHost.cs"
var api = builder.AddProject("api")
@@ -136,7 +137,7 @@ Learn more about how Aspire uses health checks for orchestration in the [Health
### `WaitAnnotation`
-The `WaitAnnotation` declares a dependency on another resource and controls startup order. The `WaitFor`, `WaitForStart`, and `WaitForCompletion` methods add this annotation:
+The `WaitAnnotation` declares a dependency on another resource and controls startup order. The `WaitFor`, , and methods add this annotation:
```csharp title="AppHost.cs"
var cache = builder.AddRedis("cache");
diff --git a/src/frontend/src/content/docs/fundamentals/container-networking.mdx b/src/frontend/src/content/docs/fundamentals/container-networking.mdx
index 7c6255b89..8634e9ece 100644
--- a/src/frontend/src/content/docs/fundamentals/container-networking.mdx
+++ b/src/frontend/src/content/docs/fundamentals/container-networking.mdx
@@ -6,6 +6,7 @@ description: Learn how the Aspire DCP container tunnel enables reliable containe
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import OsAwareTabs from '@components/OsAwareTabs.astro';
+import ApiReference from '@components/ApiReference.astro';
During local development, your Aspire app model often includes a mix of container resources and host-based services (such as C#, Python, or TypeScript projects). Container-to-container communication works naturally over the bridge network, but containers that need to reach services running on the host require a different approach. Aspire solves this with the **container tunnel**, a [Developer Control Plane (DCP)](/architecture/overview/#developer-control-plane) capability that provides reliable, transparent container-to-host connectivity.
@@ -23,7 +24,7 @@ These inconsistencies make container-to-host communication fragile and error-pro
## How the container tunnel works
-The container tunnel is managed by DCP and operates transparently—you don't need to configure it directly. When a container resource references an endpoint on a host-based service (via `WithReference`), Aspire detects that the container needs to reach the host and sets up a tunnel automatically.
+The container tunnel is managed by DCP and operates transparently—you don't need to configure it directly. When a container resource references an endpoint on a host-based service (via ), Aspire detects that the container needs to reach the host and sets up a tunnel automatically.
At a high level, the tunnel works as follows:
diff --git a/src/frontend/src/content/docs/fundamentals/custom-resource-commands.mdx b/src/frontend/src/content/docs/fundamentals/custom-resource-commands.mdx
index 8a31fa12f..c09571403 100644
--- a/src/frontend/src/content/docs/fundamentals/custom-resource-commands.mdx
+++ b/src/frontend/src/content/docs/fundamentals/custom-resource-commands.mdx
@@ -10,6 +10,7 @@ import customClearCacheCommand from '@assets/fundamentals/custom-clear-cache-com
import customClearCacheCommandLight from '@assets/fundamentals/custom-clear-cache-command-light.png';
import customClearCacheCommandSucceeded from '@assets/fundamentals/custom-clear-cache-command-succeeded.png';
import customClearCacheCommandSucceededLight from '@assets/fundamentals/custom-clear-cache-command-succeeded-light.png';
+import ApiReference from '@components/ApiReference.astro';
Each resource in the Aspire app model is represented as an `IResource` and when added to the distributed application builder, it's the generic-type parameter of the `IResourceBuilder` interface. You use the _resource builder_ API to chain calls, configuring the underlying resource, and in some situations, you might want to add custom commands to the resource. Some common scenario for creating a custom command might be running database migrations or seeding/resetting a database. In this article, you learn how to add a custom command to a Redis resource that clears the cache.
@@ -152,7 +153,7 @@ The preceding code:
-The `WithCommand` API adds the appropriate annotations to the resource, which are consumed in the [Aspire dashboard](/dashboard/overview/). The dashboard uses these annotations to render the command in the UI. Before getting too far into those details, let's ensure that you first understand the parameters of the `WithCommand` method:
+The API adds the appropriate annotations to the resource, which are consumed in the [Aspire dashboard](/dashboard/overview/). The dashboard uses these annotations to render the command in the UI. Before getting too far into those details, let's ensure that you first understand the parameters of the `WithCommand` method:
- `name`: The name of the command to invoke.
- `displayName`: The name of the command to display in the dashboard.
@@ -1476,7 +1477,7 @@ For more control over progress behavior, including custom work callbacks and pro
## Process-backed resource commands
:::caution[Experimental API]
-`WithProcessCommand` is experimental and requires opting in to the [`ASPIREPROCESSCOMMAND001`](/diagnostics/aspireprocesscommand001/) diagnostic suppression. The API shape may change before it stabilizes.
+ is experimental and requires opting in to the [`ASPIREPROCESSCOMMAND001`](/diagnostics/aspireprocesscommand001/) diagnostic suppression. The API shape may change before it stabilizes.
:::
The `WithProcessCommand` API provides a reusable helper for the common pattern of exposing a local-tool invocation as a resource command. Instead of managing process start, stdout/stderr capture, and cancellation yourself inside a `WithCommand` callback, `WithProcessCommand` does that for you:
diff --git a/src/frontend/src/content/docs/fundamentals/custom-resource-urls.mdx b/src/frontend/src/content/docs/fundamentals/custom-resource-urls.mdx
index dc96ec135..304b54aab 100644
--- a/src/frontend/src/content/docs/fundamentals/custom-resource-urls.mdx
+++ b/src/frontend/src/content/docs/fundamentals/custom-resource-urls.mdx
@@ -5,6 +5,7 @@ description: Create custom resource URLs in Aspire so the dashboard, MCP server,
---
import { Aside } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
In Aspire, resources that expose endpoints only configure host and port, which aren't known until run time. If you need to access a specific path on one of these endpoints—especially from the [dashboard](/dashboard/overview/)—you can define custom resource URLs. You can also add custom URLs that aren't tied to any endpoint. All custom URLs are only available in "run" mode, since they're meant for dashboard use. This article demonstrates how to define custom URLs.
@@ -12,10 +13,10 @@ In Aspire, resources that expose endpoints only configure host and port, which a
By default, Aspire project resources rely on existing configurations such as Kestrel or launch profiles to determine the host and port of a resource for a configured endpoint—and the endpoints are always displayed on the dashboard.
-Likewise, you can explicitly expose endpoints using the `WithEndpoint` API. This API allows you to specify the host and port for a resource, which is then used to create the default URL for that resource. The default URL is typically in the format `://:`. To omit the host port, use one of the following methods:
+Likewise, you can explicitly expose endpoints using the API. This API allows you to specify the host and port for a resource, which is then used to create the default URL for that resource. The default URL is typically in the format `://:`. To omit the host port, use one of the following methods:
-- `WithHttpEndpoint`
-- `WithHttpsEndpoint`
+-
+-
For more information, see [Endpoint extension methods](/fundamentals/networking-overview/#endpoint-extension-methods).
@@ -29,7 +30,7 @@ Custom resource URLs are supported for the following resource types:
## Customize resource URLs
-Use the appropriate `WithUrl` overload, `WithUrls`, or `WithUrlForEndpoint` APIs on any supported resource builder to define custom URLs for a resource. The following example demonstrates how to set a custom URL for a project resource:
+Use the appropriate overload, , or APIs on any supported resource builder to define custom URLs for a resource. The following example demonstrates how to set a custom URL for a project resource:
```csharp title="AppHost.cs"
var builder = DistributedApplication.CreateBuilder(args);
@@ -101,7 +102,7 @@ The preceding code iterates through the URLs defined for the `api` project resou
The `ResourceUrlsCallbackContext` exposes an extension method that enables you
to easily access the underlying resource named endpoints. Call the
- `GetEndpoint` API on a context instance to achieve this.
+ API on a context instance to achieve this.
## URL customization lifecycle
diff --git a/src/frontend/src/content/docs/fundamentals/environment-variables.mdx b/src/frontend/src/content/docs/fundamentals/environment-variables.mdx
index ce93d7d59..576cab33e 100644
--- a/src/frontend/src/content/docs/fundamentals/environment-variables.mdx
+++ b/src/frontend/src/content/docs/fundamentals/environment-variables.mdx
@@ -5,8 +5,9 @@ description: Learn how Aspire generates environment variable names for connectio
---
import { Aside } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
-When you use `WithReference` to connect resources in the AppHost, Aspire automatically injects environment variables into the consuming resource. This process is called _configuration injection_.
+When you use to connect resources in the AppHost, Aspire automatically injects environment variables into the consuming resource. This process is called _configuration injection_.
These environment variable names follow specific conventions based on the referenced resource's name and type. Understanding the conventions is especially useful for applications that read environment variables directly instead of relying on typed Aspire client integrations.
@@ -235,7 +236,7 @@ In JavaScript, `process.env` is an object. If you read an original alias contain
## Custom environment variables
-If you need different variable names, use `WithEnvironment` to set custom environment variables:
+If you need different variable names, use to set custom environment variables:
```csharp title="C# — AppHost.cs"
var builder = DistributedApplication.CreateBuilder(args);
diff --git a/src/frontend/src/content/docs/fundamentals/external-parameters.mdx b/src/frontend/src/content/docs/fundamentals/external-parameters.mdx
index 303b18c24..5cbb44dad 100644
--- a/src/frontend/src/content/docs/fundamentals/external-parameters.mdx
+++ b/src/frontend/src/content/docs/fundamentals/external-parameters.mdx
@@ -10,6 +10,7 @@ import dashboardUnresolvedParams from '@assets/fundamentals/dashboard-unresolved
import dashboardUnresolvedParamsLight from '@assets/fundamentals/dashboard-unresolved-parameters-message-light.png';
import customizedParameterUi from '@assets/fundamentals/customized-parameter-ui.png';
import customizedParameterUiLight from '@assets/fundamentals/customized-parameter-ui-light.png';
+import ApiReference from '@components/ApiReference.astro';
Environments provide context for the application to run in. Parameters express the ability to ask for an external value when running the app. Parameters can be used to provide values to the app when running locally, or to prompt for values when deploying. They can be used to model a wide range of scenarios including secrets, connection strings, and other configuration values that might vary between environments.
@@ -203,8 +204,8 @@ When you select **Enter values**, Aspire displays a form that you can use to con
You can also control how the dashboard displays these parameters, by using these methods:
-- `WithDescription`: Use this method to provide a text description that helps users understand the purpose of the parameter. To provide a formatted description in [Markdown](https://www.markdownguide.org/basic-syntax/), use the `enableMarkdown: true` parameter.
-- `WithCustomInput`: Use this method to provide a callback method that customizes the parameter dialog. For example, in this callback you can customize the default value, input type, label, and placeholder text. When using `WithCustomInput`, you must copy the `EnableDescriptionMarkdown` property from the parameter to the `InteractionInput` object to preserve markdown rendering.
+- : Use this method to provide a text description that helps users understand the purpose of the parameter. To provide a formatted description in [Markdown](https://www.markdownguide.org/basic-syntax/), use the `enableMarkdown: true` parameter.
+- : Use this method to provide a callback method that customizes the parameter dialog. For example, in this callback you can customize the default value, input type, label, and placeholder text. When using `WithCustomInput`, you must copy the `EnableDescriptionMarkdown` property from the parameter to the `InteractionInput` object to preserve markdown rendering.
This code shows how to set a description and use the callback:
@@ -366,7 +367,7 @@ The manifest representation is as follows:
## Add parameters from configuration
-In some scenarios, you might want to read parameter values directly from a specific configuration key rather than following the standard `Parameters:*` pattern. The `AddParameterFromConfiguration` method allows you to specify a custom configuration key for a parameter.
+In some scenarios, you might want to read parameter values directly from a specific configuration key rather than following the standard `Parameters:*` pattern. The method allows you to specify a custom configuration key for a parameter.
The `addParameterFromConfiguration` API is not yet available in the TypeScript AppHost SDK.
@@ -458,7 +459,7 @@ This method is useful when:
Parameters can be used to model connection strings. When you publish the app, the value is prompted for and stored in a secure location. When you run the app locally, the value is read from the `ConnectionStrings` section of the AppHost configuration.
-Always use `AddParameter` to pass secrets to resources. Never include passwords or other sensitive data like connection strings in source code.
+Always use to pass secrets to resources. Never include passwords or other sensitive data like connection strings in source code.
If you're connecting to a local database, and want to use Integrated Security or passwordless authentication, you don't need to worry about securing your connection strings. If you're using a password, store the connection string securely using app secrets.
@@ -504,7 +505,7 @@ await builder.build().run();
- Using `WaitFor` with a connection string will implicitly wait for the resource
+ Using with a connection string will implicitly wait for the resource
that the connection string connects to. For connection strings backed only by
configuration, the dependency is still modeled but there isn't an
Aspire-managed resource to wait for.
@@ -522,7 +523,7 @@ Now consider the following AppHost configuration file _appsettings.json_:
### Build connection strings with reference expressions
-If you want to construct a connection string from parameters and ensure that it's handled correctly in both development and production, use `AddConnectionString` with a `ReferenceExpression`.
+If you want to construct a connection string from parameters and ensure that it's handled correctly in both development and production, use with a `ReferenceExpression`.
For example, if you have a secret parameter that stores a small part of a connection string, use this code to insert it:
diff --git a/src/frontend/src/content/docs/fundamentals/health-checks.mdx b/src/frontend/src/content/docs/fundamentals/health-checks.mdx
index 2a71e1d17..73cc2eb45 100644
--- a/src/frontend/src/content/docs/fundamentals/health-checks.mdx
+++ b/src/frontend/src/content/docs/fundamentals/health-checks.mdx
@@ -8,6 +8,7 @@ import ThemeImage from '@components/ThemeImage.astro';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import healthChecksDashboardStatus from '@assets/fundamentals/health-checks-dashboard-status.png';
import healthChecksDashboardStatusLight from '@assets/fundamentals/health-checks-dashboard-status-light.png';
+import ApiReference from '@components/ApiReference.astro';
Health checks provide availability and state information about an app. Health checks are often exposed as HTTP endpoints, but can also be used internally by the app to write logs or perform other tasks based on the current health. Health checks are typically used in combination with an external monitoring service or container orchestrator to check the status of an app.
@@ -17,7 +18,7 @@ Aspire uses health checks in two distinct contexts. Understanding the difference
| Health check type | Where it runs | What it checks | Used for |
| --------------------------- | ---------------- | ------------------------- | ---------------------------------- |
-| **AppHost resource checks** | AppHost project | "Is my dependency ready?" | Startup orchestration, `WaitFor()` |
+| **AppHost resource checks** | AppHost project | "Is my dependency ready?" | Startup orchestration, |
| **Service endpoint checks** | Your application | "Am I healthy?" | Load balancers, Kubernetes probes |
@@ -468,7 +469,7 @@ await webapp.waitFor(catalogApi); // Waits for /health to return HTTP 200
-The `WithHttpHealthCheck` method can also be applied to project resources:
+The method can also be applied to project resources:
@@ -537,7 +538,7 @@ builder.AddProject("myapp")
`builder.Services.AddHealthChecks()` is not yet available.
-The `AddCheck` method registers the health check, and `WithHealthCheck` associates it with specific resources. For more details about creating and registering custom health checks, see [Create health checks](https://learn.microsoft.com/aspnet/core/host-and-deploy/health-checks#create-health-checks).
+The `AddCheck` method registers the health check, and associates it with specific resources. For more details about creating and registering custom health checks, see [Create health checks](https://learn.microsoft.com/aspnet/core/host-and-deploy/health-checks#create-health-checks).
### Dashboard integration
diff --git a/src/frontend/src/content/docs/fundamentals/http-commands.mdx b/src/frontend/src/content/docs/fundamentals/http-commands.mdx
index 9d4f7fd01..3370607af 100644
--- a/src/frontend/src/content/docs/fundamentals/http-commands.mdx
+++ b/src/frontend/src/content/docs/fundamentals/http-commands.mdx
@@ -15,8 +15,9 @@ import customHttpCommandStarting from '@assets/fundamentals/custom-http-command-
import customHttpCommandStartingLight from '@assets/fundamentals/custom-http-command-starting-light.png';
import customHttpCommandSucceeded from '@assets/fundamentals/custom-http-command-succeeded.png';
import customHttpCommandSucceededLight from '@assets/fundamentals/custom-http-command-succeeded-light.png';
+import ApiReference from '@components/ApiReference.astro';
-In Aspire, you can add custom HTTP commands to resources using the `WithHttpCommand` API. This API extends existing functionality, where you provide [custom commands on resources](/fundamentals/custom-resource-commands/). This feature enables a command on a resource that sends an HTTP request to a specified endpoint and path. This is useful for scenarios such as triggering database migrations, clearing caches, or performing custom actions on resources through HTTP requests.
+In Aspire, you can add custom HTTP commands to resources using the API. This API extends existing functionality, where you provide [custom commands on resources](/fundamentals/custom-resource-commands/). This feature enables a command on a resource that sends an HTTP request to a specified endpoint and path. This is useful for scenarios such as triggering database migrations, clearing caches, or performing custom actions on resources through HTTP requests.
To implement custom HTTP commands, you define a command on a resource and a corresponding HTTP endpoint that handles the request. This article provides an overview of how to create and configure custom HTTP commands in Aspire.
diff --git a/src/frontend/src/content/docs/fundamentals/networking-overview.mdx b/src/frontend/src/content/docs/fundamentals/networking-overview.mdx
index 148806a87..768f21096 100644
--- a/src/frontend/src/content/docs/fundamentals/networking-overview.mdx
+++ b/src/frontend/src/content/docs/fundamentals/networking-overview.mdx
@@ -13,6 +13,7 @@ import proxyWithReplicas from '@assets/fundamentals/networking/proxy-with-replic
import proxyHostPortAndRandomPort from '@assets/fundamentals/networking/proxy-host-port-and-random-port-1x.png';
import proxyWithRandomPorts from '@assets/fundamentals/networking/proxy-with-random-ports-1x.png';
import proxyWithDockerPortMapping from '@assets/fundamentals/networking/proxy-with-docker-port-mapping-1x.png';
+import ApiReference from '@components/ApiReference.astro';
One of the advantages of developing with Aspire is that it enables you to develop, test, and debug cloud-native apps locally. Inner-loop networking is a key aspect of Aspire that allows your apps to communicate with each other in your development environment. In this article, you learn how Aspire handles various networking scenarios with proxies, endpoints, endpoint configurations, and container networking.
@@ -53,7 +54,7 @@ flowchart LR
The inner loop is the process of developing and testing your app locally before deploying it to a target environment. Aspire provides several tools and features to simplify and enhance the networking experience in the inner loop, such as:
-- **Endpoints/Endpoint configurations**: Endpoints are the connections between your app and the services it depends on, such as databases, message queues, or APIs. Endpoints provide information such as the service name, host port, scheme, and environment variable. Aspire can create endpoints automatically from resource configuration, and you can also add them explicitly by calling `WithEndpoint`.
+- **Endpoints/Endpoint configurations**: Endpoints are the connections between your app and the services it depends on, such as databases, message queues, or APIs. Endpoints provide information such as the service name, host port, scheme, and environment variable. Aspire can create endpoints automatically from resource configuration, and you can also add them explicitly by calling .
- **Proxies**: Aspire automatically launches a proxy for each proxied service binding you add to your app, and assigns a port for the proxy to listen on. The proxy then forwards the requests to the port that your app listens on, which might be different from the proxy port. This way, you can avoid port conflicts and access your app and services using consistent and predictable URLs.
- **Proxyless endpoints**: Endpoints with `IsProxied` set to `false` connect directly to the resource instead of routing through an Aspire-managed proxy. Starting in Aspire 13.4, endpoints on persistent executables and projects are proxyless by default. Persistent containers use proxied endpoints by default, the same as session containers.
- **Container networks**: Aspire creates and manages dedicated networks for container resources so containers can discover and communicate with each other during local development.
@@ -104,7 +105,7 @@ Containers register themselves on the network using their resource name. Aspire
By default, containers are accessible on the container network using their **resource name** as a DNS alias. For example, a container added with `AddContainer("mydb", ...)` is reachable at `mydb:5432` from other containers.
-Sometimes you need additional aliases—for example, when a third-party tool expects a specific hostname, or when migrating from an existing Docker Compose setup. Use `WithContainerNetworkAlias` to add custom DNS names:
+Sometimes you need additional aliases—for example, when a third-party tool expects a specific hostname, or when migrating from an existing Docker Compose setup. Use to add custom DNS names:
@@ -156,7 +157,7 @@ Some endpoint behavior depends on the resource type. Keep those details with the
## Ports and proxies
-When defining a proxied service binding, the host port is given to the proxy that sits in front of the service. This allows single or multiple replicas of a service to behave similarly. Additionally, resource dependencies that use the `WithReference` API rely on the proxied endpoint from the environment variable unless the endpoint is configured as proxyless.
+When defining a proxied service binding, the host port is given to the proxy that sits in front of the service. This allows single or multiple replicas of a service to behave similarly. Additionally, resource dependencies that use the API rely on the proxied endpoint from the environment variable unless the endpoint is configured as proxyless.
The same proxy pattern applies when a service runs multiple replicas. The browser still connects to one stable host port while the proxy fans out traffic to whichever replica is available:
@@ -576,7 +577,7 @@ The following built-in Aspire integrations already apply this pattern to their a
**Common causes**:
- The container hasn't finished starting
-- Missing `WaitFor()` dependency
+- Missing dependency
- Container is on the container network but you're connecting from the host
**Solutions**:
diff --git a/src/frontend/src/content/docs/fundamentals/persist-data-volumes.mdx b/src/frontend/src/content/docs/fundamentals/persist-data-volumes.mdx
index caf810d3f..cf5facb84 100644
--- a/src/frontend/src/content/docs/fundamentals/persist-data-volumes.mdx
+++ b/src/frontend/src/content/docs/fundamentals/persist-data-volumes.mdx
@@ -4,6 +4,7 @@ description: Configure Aspire resources to persist data across restarts using co
---
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
Every time you start and stop an Aspire project, the app also creates and destroys the app resource containers. Any data or files stored in those containers during a debugging session is lost for subsequent sessions. Many development teams prefer to keep this data across debugging sessions so that, for example, they don't have to repopulate a database with sample data for each run.
@@ -35,7 +36,7 @@ Volumes are more secure and portable than bind mounts. They also perform better
## Use volumes
-Volumes are the recommended way to persist data generated by containers and they're supported on both Windows and Linux. Volumes can store data from multiple containers at a time, offer high performance, and are easy to back up or migrate. With Aspire, you configure a volume for each resource container using the `WithVolume` method, which accepts three parameters:
+Volumes are the recommended way to persist data generated by containers and they're supported on both Windows and Linux. Volumes can store data from multiple containers at a time, offer high performance, and are easy to back up or migrate. With Aspire, you configure a volume for each resource container using the method, which accepts three parameters:
- **`name`**: An optional name for the volume.
- **`target`**: The target path in the container of the data you want to persist.
@@ -99,7 +100,7 @@ const sqldb = await sql.addDatabase("sqldb");
In this example `/var/opt/mssql` sets the path to the database files in the container.
-All Aspire container resources can utilize volumes, and some provide convenient APIs for adding named volumes derived from resources. Using the `WithDataVolume` method as an example, the following code is functionally equivalent to the previous example but more succinct:
+All Aspire container resources can utilize volumes, and some provide convenient APIs for adding named volumes derived from resources. Using the method as an example, the following code is functionally equivalent to the previous example but more succinct:
@@ -164,7 +165,7 @@ This convention also applies to Kubernetes persistent volumes bound with `WithPe
## Use bind mounts
-Bind mounts enable access to the data from both within the container and from processes on the host machine. For example, once a bind mount is established, you can copy a file into it on your host computer. The file is then available at the bound path within the container for your resource. With Aspire, you configure a bind mount for each resource container using the `WithBindMount` method, which accepts three parameters:
+Bind mounts enable access to the data from both within the container and from processes on the host machine. For example, once a bind mount is established, you can copy a file into it on your host computer. The file is then available at the bound path within the container for your resource. With Aspire, you configure a bind mount for each resource container using the method, which accepts three parameters:
- **`source`**: The path to the folder on the host machine to mount in the container.
- **`target`**: The target path in the container for the folder.
@@ -198,7 +199,7 @@ In this example:
- `source: @"C:\SqlServer\Data"` sets the folder on the host computer that will be bound.
- `target: "/var/opt/mssql"` sets the path to the database files in the container.
-As for volumes, some Aspire container resources provide convenient APIs for adding bind mounts. Using the `WithDataBindMount` method as an example, the following code is functionally equivalent to the previous example but more succinct:
+As for volumes, some Aspire container resources provide convenient APIs for adding bind mounts. Using the method as an example, the following code is functionally equivalent to the previous example but more succinct:
@@ -246,7 +247,7 @@ const sqldb = await sql.addDatabase("sqldb");
-Since the `password` parameter isn't provided when calling `AddSqlServer`, Aspire automatically generates a password for the SQL Server resource.
+Since the `password` parameter isn't provided when calling , Aspire automatically generates a password for the SQL Server resource.
This isn't a persistent password! Instead, it changes every time the AppHost
@@ -273,7 +274,7 @@ The same pattern applies to the other server-based resource types, such as those
| RabbitMQ | [📦 Aspire.Hosting.RabbitMq](https://www.nuget.org/packages/Aspire.Hosting.RabbitMq) | `rabbitmq` | `Parameters:rabbitmq-password` |
| SQL Server | [📦 Aspire.Hosting.SqlServer](https://www.nuget.org/packages/Aspire.Hosting.SqlServer) | `sql` | `Parameters:sql-password` |
-By overriding the generated password, you can ensure that the password remains consistent between app launches. An alternative approach is to use the `AddParameter` method to create a parameter that can be used as a password. The following code demonstrates how to create a persistent password for a SQL Server resource:
+By overriding the generated password, you can ensure that the password remains consistent between app launches. An alternative approach is to use the method to create a parameter that can be used as a password. The following code demonstrates how to create a persistent password for a SQL Server resource:
diff --git a/src/frontend/src/content/docs/fundamentals/service-discovery.mdx b/src/frontend/src/content/docs/fundamentals/service-discovery.mdx
index f44376910..79603f78e 100644
--- a/src/frontend/src/content/docs/fundamentals/service-discovery.mdx
+++ b/src/frontend/src/content/docs/fundamentals/service-discovery.mdx
@@ -5,12 +5,13 @@ description: Understand essential Aspire service discovery concepts — endpoint
---
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
Service discovery is how your services find each other. Instead of hardcoding URLs like `http://localhost:5001`, your frontend can simply reference the `catalog` service by name—and Aspire handles resolving the actual address.
## How service discovery works
-When you connect services using `WithReference()`, Aspire sets up automatic service discovery:
+When you connect services using , Aspire sets up automatic service discovery:
1. **AppHost declares resources** and allocates endpoints
2. **Configuration is injected** into each service via environment variables
@@ -365,7 +366,7 @@ const response = await fetch(`${dashboardUrl}/api/stats`);
**Common causes**:
1. **Missing `WithReference()`** - The calling service wasn't connected to the target service in AppHost
-2. **Wrong service name** - The name in your URI doesn't match the name in `AddProject()` or `AddContainer()`
+2. **Wrong service name** - The name in your URI doesn't match the name in or
3. **Service not started** - The target service failed to start or is still starting
**Solution**: Verify your AppHost connects the services:
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 b7820b0fd..0f48ebf52 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
@@ -179,7 +179,7 @@ After setup, a typical repo layout looks like this:
:::caution[AddCSharpApp is experimental]
-`AddCSharpApp` is currently experimental. If you want details on limitations or diagnostic suppression, see [C# file-based apps](/integrations/dotnet/csharp-file-based-apps/).
+ is currently experimental. If you want details on limitations or diagnostic suppression, see [C# file-based apps](/integrations/dotnet/csharp-file-based-apps/).
:::
#### Project-based AppHost (with a .sln)
diff --git a/src/frontend/src/content/docs/get-started/ai-coding-agents.mdx b/src/frontend/src/content/docs/get-started/ai-coding-agents.mdx
index 440b16f94..4139ee514 100644
--- a/src/frontend/src/content/docs/get-started/ai-coding-agents.mdx
+++ b/src/frontend/src/content/docs/get-started/ai-coding-agents.mdx
@@ -7,6 +7,7 @@ import { Aside, Steps, TabItem, Tabs } from '@astrojs/starlight/components';
import AsciinemaPlayer from '@components/AsciinemaPlayer.astro';
import LearnMore from '@components/LearnMore.astro';
import LoopingVideo from '@components/LoopingVideo.astro';
+import ApiReference from '@components/ApiReference.astro';
Give your AI coding agent access to application observability, not just source code. Run `aspire agent init` in your project to install skills that teach your assistant to use the Aspire CLI, inspect local services, and work with TypeScript or C# AppHosts. A runtime MCP server is optional.
diff --git a/src/frontend/src/content/docs/get-started/aspire-sdk.mdx b/src/frontend/src/content/docs/get-started/aspire-sdk.mdx
index 063e0ed3c..6016fdcff 100644
--- a/src/frontend/src/content/docs/get-started/aspire-sdk.mdx
+++ b/src/frontend/src/content/docs/get-started/aspire-sdk.mdx
@@ -5,6 +5,7 @@ description: Learn how the Aspire SDK simplifies orchestrating Aspire applicatio
import { Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
+import ApiReference from '@components/ApiReference.astro';
The Aspire SDK is intended for [AppHost projects](/get-started/app-host/), which serve as the orchestrator for Aspire applications. These projects are designated by their usage of the `Aspire.AppHost.Sdk` in the project file. The SDK provides features that simplify the development of Aspire apps.
@@ -54,7 +55,7 @@ The Aspire SDK provides several key features.
### Project references
-Each `ProjectReference` in the AppHost project isn't treated as standard project references. Instead, they enable the AppHost to execute these projects as part of its orchestration. Each project reference triggers a generator to create a `class` that represents the project as an `IProjectMetadata`. This metadata is used to populate the named projects in the generated `Projects` namespace. When you call the `AddProject` API, the `Projects` namespace is used to reference the project—passing the generated class as a generic-type parameter.
+Each `ProjectReference` in the AppHost project isn't treated as standard project references. Instead, they enable the AppHost to execute these projects as part of its orchestration. Each project reference triggers a generator to create a `class` that represents the project as an `IProjectMetadata`. This metadata is used to populate the named projects in the generated `Projects` namespace. When you call the API, the `Projects` namespace is used to reference the project—passing the generated class as a generic-type parameter.
:::tip
To prevent a project from being treated as an Aspire resource in the AppHost, set the `IsAspireProjectResource` attribute on the `ProjectReference` element to `false`, as shown in the following example:
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 1cbd7e140..f0128cd0f 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
@@ -13,6 +13,7 @@ import sidebarTreeLight from '@assets/get-started/code-extension-sidebar-light.p
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';
+import ApiReference from '@components/ApiReference.astro';
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 — including C#, TypeScript, Java, Python, browser apps, and Azure Functions — alongside the Aspire dashboard.
diff --git a/src/frontend/src/content/docs/integrations/ai/github-models/github-models-host.mdx b/src/frontend/src/content/docs/integrations/ai/github-models/github-models-host.mdx
index 5a5fc6273..286975d56 100644
--- a/src/frontend/src/content/docs/integrations/ai/github-models/github-models-host.mdx
+++ b/src/frontend/src/content/docs/integrations/ai/github-models/github-models-host.mdx
@@ -6,6 +6,7 @@ description: Learn how to use the Aspire GitHub Models hosting integration to or
import { Image } from 'astro:assets';
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import githubIcon from '@assets/icons/github-icon.png';
+import ApiReference from '@components/ApiReference.astro';
-1. Calling `AddGitHubModel` (or `addGitHubModel`) creates a `GitHubModelResource`. It registers a secret parameter for the API key that defaults to the `GITHUB_TOKEN` environment variable.
+1. Calling creates a `GitHubModelResource`. It registers a secret parameter for the API key that defaults to the `GITHUB_TOKEN` environment variable.
1. The model identifier selects which GitHub-hosted model to target. In C#, use the strongly-typed `GitHubModel` constants grouped by publisher; in TypeScript, use the `GitHubModelName` enum.
@@ -156,7 +157,7 @@ aspire secret set Parameters:chat-gh-apikey github_pat_YOUR_TOKEN_HERE
## Use a custom API key parameter
-Replace the default parameter by creating your own secret parameter and passing it to `WithApiKey` (or `withApiKey`):
+Replace the default parameter by creating your own secret parameter and passing it to :
diff --git a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-connect.mdx b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-connect.mdx
index 4b34f4d0f..a0c08086a 100644
--- a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-connect.mdx
@@ -9,6 +9,7 @@ import { Image } from 'astro:assets';
import { Aside, Badge, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import ollamaIcon from '@assets/icons/ollama-icon.png';
+import ApiReference from '@components/ApiReference.astro';
@@ -343,5 +344,5 @@ for await (const chunk of stream) {
- If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using `WithEnvironment`. See the Aspire AppHost documentation for details on custom environment variable injection.
+ If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using . See the Aspire AppHost documentation for details on custom environment variable injection.
diff --git a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-host.mdx b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-host.mdx
index 09690b2a5..b458ba2d0 100644
--- a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-host.mdx
+++ b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-host.mdx
@@ -8,6 +8,7 @@ import { Image } from 'astro:assets';
import { Aside, Badge, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import ollamaIcon from '@assets/icons/ollama-icon.png';
+import ApiReference from '@components/ApiReference.astro';
@@ -117,7 +118,7 @@ await builder.addNodeApp("api", "./api", "index.js")
1. When Aspire adds a container image to the AppHost, as shown in the preceding example with the `docker.io/ollama/ollama` image, it creates a new Ollama instance on your local machine.
-1. The resource name passed to `AddOllama` is used as the connection string name when referenced in a dependency. Model sub-resources are named by sanitizing the model name (for example, `"llama3"` produces the resource name `"ollama-llama3"`).
+1. The resource name passed to is used as the connection string name when referenced in a dependency. Model sub-resources are named by sanitizing the model name (for example, `"llama3"` produces the resource name `"ollama-llama3"`).
1. The AppHost reference call configures a connection in the consuming project named after the referenced model resource.
@@ -129,7 +130,7 @@ await builder.addNodeApp("api", "./api", "index.js")
## Add Ollama model resource
-Models are sub-resources of an Ollama server resource. You add them with the `AddModel` (or `addModel`) method. Each model is downloaded when the Ollama container first starts.
+Models are sub-resources of an Ollama server resource. You add them with the method. Each model is downloaded when the Ollama container first starts.
@@ -226,7 +227,7 @@ The data volume is mounted at `/root/.ollama` in the Ollama container. When a `n
## Use GPUs when available
-By default, the Ollama container runs on CPU. To enable GPU acceleration, use the `WithGPUSupport` (or `withGPUSupport`) extension method:
+By default, the Ollama container runs on CPU. To enable GPU acceleration, use the extension method:
@@ -301,7 +302,7 @@ For more information, see [GPU support in Docker Desktop](https://docs.docker.co
## Add a model from Hugging Face
-To use a model in GGUF format from [Hugging Face](https://huggingface.co/), use the `AddHuggingFaceModel` (or `addHuggingFaceModel`) extension method:
+To use a model in GGUF format from [Hugging Face](https://huggingface.co/), use the extension method:
diff --git a/src/frontend/src/content/docs/integrations/ai/openai/openai-host.mdx b/src/frontend/src/content/docs/integrations/ai/openai/openai-host.mdx
index 6fcfdab97..aeecdb7ba 100644
--- a/src/frontend/src/content/docs/integrations/ai/openai/openai-host.mdx
+++ b/src/frontend/src/content/docs/integrations/ai/openai/openai-host.mdx
@@ -8,6 +8,7 @@ import { Image } from 'astro:assets';
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import openaiIcon from '@assets/icons/openai-icon.png';
+import ApiReference from '@components/ApiReference.astro';
-1. Calling `AddOpenAI` (or `addOpenAI`) creates an `OpenAIResource` that models the OpenAI account. It registers a secret parameter for the API key that defaults to the `OPENAI_API_KEY` environment variable.
+1. Calling creates an `OpenAIResource` that models the OpenAI account. It registers a secret parameter for the API key that defaults to the `OPENAI_API_KEY` environment variable.
-1. Calling `AddModel` (or `addModel`) creates an `OpenAIModelResource` child whose connection string is composed from the parent endpoint, API key, and the model name you supply.
+1. Calling creates an `OpenAIModelResource` child whose connection string is composed from the parent endpoint, API key, and the model name you supply.
1. The AppHost reference call configures a connection in the consuming project named after the referenced model resource, such as `chat` in the preceding example. Multiple models can share the single API key and endpoint from the parent resource.
@@ -180,7 +181,7 @@ aspire secret set Parameters:openai-openai-apikey sk-your-api-key
## Use custom API key parameter
-Replace the default parameter by creating your own secret parameter and passing it to `WithApiKey` (or `withApiKey`) on the parent:
+Replace the default parameter by creating your own secret parameter and passing it to on the parent:
@@ -225,7 +226,7 @@ await builder.addNodeApp("api", "./api", "index.js")
## Add a custom endpoint
-Override the default `https://api.openai.com/v1` endpoint to use a proxy, an Azure OpenAI endpoint, or any OpenAI-compatible gateway. Call `WithEndpoint` (or `withEndpoint`) on the parent resource:
+Override the default `https://api.openai.com/v1` endpoint to use a proxy, an Azure OpenAI endpoint, or any OpenAI-compatible gateway. Call on the parent resource:
diff --git a/src/frontend/src/content/docs/integrations/caching/garnet/garnet-connect.mdx b/src/frontend/src/content/docs/integrations/caching/garnet/garnet-connect.mdx
index 359539b48..815cc226f 100644
--- a/src/frontend/src/content/docs/integrations/caching/garnet/garnet-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/caching/garnet/garnet-connect.mdx
@@ -8,6 +8,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import garnetIcon from '@assets/icons/garnet-icon.png';
+import ApiReference from '@components/ApiReference.astro';
With this approach, there are **no individual property variables** (`CACHE_HOST`, `CACHE_PORT`, etc.). Consuming apps must parse the connection string themselves or use client libraries that accept a connection string directly.
diff --git a/src/frontend/src/content/docs/integrations/caching/garnet/garnet-host.mdx b/src/frontend/src/content/docs/integrations/caching/garnet/garnet-host.mdx
index f4656b6fe..1dfe7d66d 100644
--- a/src/frontend/src/content/docs/integrations/caching/garnet/garnet-host.mdx
+++ b/src/frontend/src/content/docs/integrations/caching/garnet/garnet-host.mdx
@@ -9,6 +9,7 @@ import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import ContainerImages from '@components/ContainerImages.astro';
import LearnMore from '@components/LearnMore.astro';
import garnetIcon from '@assets/icons/garnet-icon.png';
+import ApiReference from '@components/ApiReference.astro';
-The data volume is used to persist Garnet data outside the lifecycle of its container. The data volume is mounted at the `/data` path in the Garnet container, and when a `name` parameter isn't provided, the name is generated at random. Calling `WithDataVolume` (or `withDataVolume`) also enables Garnet persistence so the in-memory state survives container restarts. For more information on data volumes and details on why they're preferred over [bind mounts](#add-garnet-resource-with-data-bind-mount), see [Docker docs: Volumes](https://docs.docker.com/engine/storage/volumes).
+The data volume is used to persist Garnet data outside the lifecycle of its container. The data volume is mounted at the `/data` path in the Garnet container, and when a `name` parameter isn't provided, the name is generated at random. Calling also enables Garnet persistence so the in-memory state survives container restarts. For more information on data volumes and details on why they're preferred over [bind mounts](#add-garnet-resource-with-data-bind-mount), see [Docker docs: Volumes](https://docs.docker.com/engine/storage/volumes).
## Add Garnet resource with data bind mount
@@ -203,7 +204,7 @@ Data bind mounts rely on the host machine's filesystem to persist Garnet data ac
## Add Garnet resource with persistence
-To configure Garnet snapshot persistence explicitly, call `WithPersistence` (or `withPersistence`) alongside a data volume or bind mount:
+To configure Garnet snapshot persistence explicitly, call alongside a data volume or bind mount:
@@ -334,7 +335,7 @@ await builder.build().run();
## Connect to an existing Garnet instance
-To reference an externally managed Garnet instance instead of running one as a container, use `AddConnectionString`:
+To reference an externally managed Garnet instance instead of running one as a container, use :
diff --git a/src/frontend/src/content/docs/integrations/caching/redis-distributed/redis-distributed-get-started.mdx b/src/frontend/src/content/docs/integrations/caching/redis-distributed/redis-distributed-get-started.mdx
index ab82c0353..bff4d7650 100644
--- a/src/frontend/src/content/docs/integrations/caching/redis-distributed/redis-distributed-get-started.mdx
+++ b/src/frontend/src/content/docs/integrations/caching/redis-distributed/redis-distributed-get-started.mdx
@@ -6,6 +6,7 @@ description: Understand why you use the Aspire Redis distributed caching integra
import { Image } from 'astro:assets';
import { LinkButton, Steps } from '@astrojs/starlight/components';
import redisIcon from '@assets/icons/redis-icon.png';
+import ApiReference from '@components/ApiReference.astro';
call. For the full AppHost API surface — data volumes, persistence, Redis Insight, Redis Commander, parameters, and more — see the [Redis Hosting integration](/integrations/caching/redis/redis-host/) reference.
', 'string?', 'bool']} /> — persist Redis data outside the container lifecycle.
+- ', 'string', 'bool']} /> — bind-mount a host directory into the container.
+- — configure snapshotting interval and key-change threshold.
+- / — attach management UIs.
+- for explicit port and password — override auto-generated values.
- Custom environment variables — map connection properties to app-specific variable names.
- `AsExisting` — connect to an externally managed Redis instance instead of starting a container.
- Hosting health checks — automatically verify the Redis container is reachable.
diff --git a/src/frontend/src/content/docs/integrations/caching/redis-extensions.mdx b/src/frontend/src/content/docs/integrations/caching/redis-extensions.mdx
index 63ab629f7..0e3de4ddb 100644
--- a/src/frontend/src/content/docs/integrations/caching/redis-extensions.mdx
+++ b/src/frontend/src/content/docs/integrations/caching/redis-extensions.mdx
@@ -8,6 +8,7 @@ import { Badge, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallPackage from '@components/InstallPackage.astro';
import { Image } from 'astro:assets';
import redisIcon from '@assets/icons/redis-icon.png';
+import ApiReference from '@components/ApiReference.astro';
@@ -61,7 +62,7 @@ This updates your `aspire.config.json` with the Redis extensions package:
### DbGate management UI
-To add the DbGate management UI, decorate the official Redis resource with `WithDbGate` / `withDbGate`:
+To add the DbGate management UI, decorate the official Redis resource with :
@@ -105,7 +106,7 @@ This adds a new DbGate resource to the app host which is available from the Aspi
### dbx management UI
-[dbx](https://github.com/t8y2/dbx) is a lightweight, web-based database client and an alternative management UI to DbGate and Adminer. Decorate the Redis resource with `WithDbx` / `withDbx` to add it:
+[dbx](https://github.com/t8y2/dbx) is a lightweight, web-based database client and an alternative management UI to DbGate and Adminer. Decorate the Redis resource with to add it:
diff --git a/src/frontend/src/content/docs/integrations/caching/redis/redis-connect.mdx b/src/frontend/src/content/docs/integrations/caching/redis/redis-connect.mdx
index df72e4414..df4d39dab 100644
--- a/src/frontend/src/content/docs/integrations/caching/redis/redis-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/caching/redis/redis-connect.mdx
@@ -8,6 +8,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import redisIcon from '@assets/icons/redis-icon.png';
+import ApiReference from '@components/ApiReference.astro';
With this approach, there are **no individual property variables** (`CACHE_HOST`, `CACHE_PORT`, etc.). Consuming apps must parse the connection string themselves or use client libraries that accept a connection string directly.
diff --git a/src/frontend/src/content/docs/integrations/caching/redis/redis-host.mdx b/src/frontend/src/content/docs/integrations/caching/redis/redis-host.mdx
index 4b18bffd6..5968e3d97 100644
--- a/src/frontend/src/content/docs/integrations/caching/redis/redis-host.mdx
+++ b/src/frontend/src/content/docs/integrations/caching/redis/redis-host.mdx
@@ -9,6 +9,7 @@ import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import ContainerImages from '@components/ContainerImages.astro';
import LearnMore from '@components/LearnMore.astro';
import redisIcon from '@assets/icons/redis-icon.png';
+import ApiReference from '@components/ApiReference.astro';
-The data volume is used to persist Redis data outside the lifecycle of its container. The data volume is mounted at the `/data` path in the Redis container, and when a `name` parameter isn't provided, the name is generated at random. Calling `WithDataVolume` (or `withDataVolume`) also enables Redis persistence so the in-memory state survives container restarts. For more information on data volumes and details on why they're preferred over [bind mounts](#add-redis-resource-with-data-bind-mount), see [Docker docs: Volumes](https://docs.docker.com/engine/storage/volumes).
+The data volume is used to persist Redis data outside the lifecycle of its container. The data volume is mounted at the `/data` path in the Redis container, and when a `name` parameter isn't provided, the name is generated at random. Calling ', 'string?', 'bool']} /> also enables Redis persistence so the in-memory state survives container restarts. For more information on data volumes and details on why they're preferred over [bind mounts](#add-redis-resource-with-data-bind-mount), see [Docker docs: Volumes](https://docs.docker.com/engine/storage/volumes).
## Add Redis resource with data bind mount
@@ -203,7 +204,7 @@ Data bind mounts rely on the host machine's filesystem to persist Redis data acr
## Add Redis resource with persistence
-To configure Redis snapshot persistence explicitly, call `WithPersistence` (or `withPersistence`) alongside a data volume or bind mount:
+To configure Redis snapshot persistence explicitly, call alongside a data volume or bind mount:
@@ -511,7 +512,7 @@ await builder.build().run();
## Connect to an existing Redis instance
-To reference an externally managed Redis instance instead of running one as a container, use `AddConnectionString`:
+To reference an externally managed Redis instance instead of running one as a container, use :
@@ -549,7 +550,7 @@ With `AddConnectionString` and `addConnectionString`, Aspire resolves `cache` fr
## Open an interactive REPL
-In Aspire 13.6 or later, add `WithRepl()` to the Redis resource to enable a **REPL** command that opens `redis-cli` in the [terminal dock](/dashboard/terminals/#use-the-terminal-dock).
+In Aspire 13.6 or later, add to the Redis resource to enable a **REPL** command that opens `redis-cli` in the [terminal dock](/dashboard/terminals/#use-the-terminal-dock).
diff --git a/src/frontend/src/content/docs/integrations/caching/valkey/valkey-connect.mdx b/src/frontend/src/content/docs/integrations/caching/valkey/valkey-connect.mdx
index d729010bd..7b2d2657a 100644
--- a/src/frontend/src/content/docs/integrations/caching/valkey/valkey-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/caching/valkey/valkey-connect.mdx
@@ -8,6 +8,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import valkeyIcon from '@assets/icons/valkey-icon.png';
+import ApiReference from '@components/ApiReference.astro';
With this approach, there are **no individual property variables** (`CACHE_HOST`, `CACHE_PORT`, etc.). Consuming apps must parse the connection string themselves or use client libraries that accept a connection string directly.
diff --git a/src/frontend/src/content/docs/integrations/caching/valkey/valkey-host.mdx b/src/frontend/src/content/docs/integrations/caching/valkey/valkey-host.mdx
index f3ee6ce8b..e53cab6cd 100644
--- a/src/frontend/src/content/docs/integrations/caching/valkey/valkey-host.mdx
+++ b/src/frontend/src/content/docs/integrations/caching/valkey/valkey-host.mdx
@@ -9,6 +9,7 @@ import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import ContainerImages from '@components/ContainerImages.astro';
import LearnMore from '@components/LearnMore.astro';
import valkeyIcon from '@assets/icons/valkey-icon.png';
+import ApiReference from '@components/ApiReference.astro';
-The data volume is used to persist Valkey data outside the lifecycle of its container. The data volume is mounted at the `/data` path in the Valkey container, and when a `name` parameter isn't provided, the name is generated at random. Calling `WithDataVolume` (or `withDataVolume`) also enables Valkey persistence so the in-memory state survives container restarts. For more information on data volumes and details on why they're preferred over [bind mounts](#add-valkey-resource-with-data-bind-mount), see [Docker docs: Volumes](https://docs.docker.com/engine/storage/volumes).
+The data volume is used to persist Valkey data outside the lifecycle of its container. The data volume is mounted at the `/data` path in the Valkey container, and when a `name` parameter isn't provided, the name is generated at random. Calling also enables Valkey persistence so the in-memory state survives container restarts. For more information on data volumes and details on why they're preferred over [bind mounts](#add-valkey-resource-with-data-bind-mount), see [Docker docs: Volumes](https://docs.docker.com/engine/storage/volumes).
## Add Valkey resource with data bind mount
@@ -203,7 +204,7 @@ Data bind mounts rely on the host machine's filesystem to persist Valkey data ac
## Add Valkey resource with persistence
-To configure Valkey snapshot persistence explicitly, call `WithPersistence` (or `withPersistence`) alongside a data volume or bind mount:
+To configure Valkey snapshot persistence explicitly, call alongside a data volume or bind mount:
@@ -331,7 +332,7 @@ await builder.build().run();
## Connect to an existing Valkey instance
-To reference an externally managed Valkey instance instead of running one as a container, use `AddConnectionString`:
+To reference an externally managed Valkey instance instead of running one as a container, use :
@@ -369,7 +370,7 @@ With `AddConnectionString` and `addConnectionString`, Aspire resolves `cache` fr
## Open an interactive REPL
-In Aspire 13.6 or later, add `WithRepl()` to the Valkey resource to enable a **REPL** command that opens `valkey-cli` in the [terminal dock](/dashboard/terminals/#use-the-terminal-dock).
+In Aspire 13.6 or later, add to the Valkey resource to enable a **REPL** command that opens `valkey-cli` in the [terminal dock](/dashboard/terminals/#use-the-terminal-dock).
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/aks/index.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/aks/index.mdx
index 91d997c1e..09e2c05ca 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/aks/index.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/aks/index.mdx
@@ -8,6 +8,7 @@ import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallPackage from '@components/InstallPackage.astro';
import LearnMore from '@components/LearnMore.astro';
import kubernetesIcon from '@assets/icons/kubernetes.svg';
+import ApiReference from '@components/ApiReference.astro';
:
@@ -66,7 +67,7 @@ When an AKS environment is present, all compute resources are automatically depl
## Configure the system node pool
-Customize the system node pool VM size and scaling using `WithSystemNodePool`:
+Customize the system node pool VM size and scaling using :
@@ -85,7 +86,7 @@ await aks.withSystemNodePool('Standard_D4s_v5', 1, 5);
## Add node pools
-Add additional node pools for workload isolation, GPU workloads, or specialized hardware requirements using `AddNodePool`:
+Add additional node pools for workload isolation, GPU workloads, or specialized hardware requirements using :
@@ -114,7 +115,7 @@ await worker.withNodePool(gpuPool);
Persistent volume APIs are experimental. In C#, suppress the `ASPIRECOMPUTE002` diagnostic to use them.
-Call `AddPersistentVolume` directly on the AKS environment to model durable storage without reaching through to the underlying Kubernetes integration. The call forwards to the AKS environment's Kubernetes publisher, so the same configuration methods and workload-binding APIs described in [Persistent volumes on Kubernetes](/deployment/kubernetes/persistent-volumes/) apply:
+Call directly on the AKS environment to model durable storage without reaching through to the underlying Kubernetes integration. The call forwards to the AKS environment's Kubernetes publisher, so the same configuration methods and workload-binding APIs described in [Persistent volumes on Kubernetes](/deployment/kubernetes/persistent-volumes/) apply:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-foundry/azure-ai-foundry-connect.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-foundry/azure-ai-foundry-connect.mdx
index c6d56e54c..ef97e7cfe 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-foundry/azure-ai-foundry-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-foundry/azure-ai-foundry-connect.mdx
@@ -9,6 +9,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import aiFoundryIcon from '@assets/icons/azure-ai-foundry-icon.png';
+import ApiReference from '@components/ApiReference.astro';
- By default, `AddFoundry(...)` provisions the Foundry account with `disableLocalAuth: true` and creates the role assignments consuming apps need, so apps authenticate via managed identity. Because Aspire only ever surfaces `Key` for Foundry Local, the examples below default to token-based authentication (`DefaultAzureCredential`) for every scenario except Foundry Local.
+ By default, provisions the Foundry account with `disableLocalAuth: true` and creates the role assignments consuming apps need, so apps authenticate via managed identity. Because Aspire only ever surfaces `Key` for Foundry Local, the examples below default to token-based authentication (`DefaultAzureCredential`) for every scenario except Foundry Local.
### Foundry deployment resource
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-foundry/azure-ai-foundry-get-started.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-foundry/azure-ai-foundry-get-started.mdx
index e6c504591..3bbed4c09 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-foundry/azure-ai-foundry-get-started.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-foundry/azure-ai-foundry-get-started.mdx
@@ -7,6 +7,7 @@ prev: false
import { Image } from 'astro:assets';
import { LinkButton, Steps } from '@astrojs/starlight/components';
import aiFoundryIcon from '@assets/icons/azure-ai-foundry-icon.png';
+import ApiReference from '@components/ApiReference.astro';
, attach model deployments, web-search tools, and hosted or prompt agents, and reference them from consuming services.
- **Consistent connection info across languages.** Once you reference a deployment from a consuming app, Aspire injects connection properties as environment variables in a predictable format that works from C#, TypeScript, Python, Go, or any other language.
-- **Foundry Local for offline development.** Use `RunAsFoundryLocal()` to run models locally without an Azure subscription.
+- **Foundry Local for offline development.** Use to run models locally without an Azure subscription.
- **An upgrade path to the cloud.** The same AppHost model provisions Azure Cognitive Services accounts and deployments when you publish.
## How the pieces fit together
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 73218eb65..e7a3836da 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
@@ -12,6 +12,7 @@ import agentSendMessage from '@assets/integrations/cloud/azure/azure-ai-foundry/
import agentSendMessageLight from '@assets/integrations/cloud/azure/azure-ai-foundry/agent-send-message-light.png';
import agentResponsesResult from '@assets/integrations/cloud/azure/azure-ai-foundry/agent-responses-result.png';
import agentResponsesResultLight from '@assets/integrations/cloud/azure/azure-ai-foundry/agent-responses-result-light.png';
+import ApiReference from '@components/ApiReference.astro';
. Resource and model types moved from
`Aspire.Hosting.Azure` to `Aspire.Hosting.Foundry`; add
`using Aspire.Hosting.Foundry;` for direct type references and remove
`using Aspire.Hosting.Azure;` only if your code no longer uses other types
@@ -129,10 +130,10 @@ await builder.build().run();
-The preceding code adds an Azure AI Foundry resource named `foundry` to the AppHost project. The `WithReference` method passes the connection information to the `ExampleProject` project.
+The preceding code adds an Azure AI Foundry resource named `foundry` to the AppHost project. The method passes the connection information to the `ExampleProject` project.
- When you call `AddFoundry`, it implicitly calls `AddAzureProvisioning`—which
+ When you call `AddFoundry`, it implicitly calls —which
adds support for generating Azure resources dynamically during app startup.
The app must configure the appropriate subscription and location. For more
information, see [Local provisioning:
@@ -141,7 +142,7 @@ The preceding code adds an Azure AI Foundry resource named `foundry` to the AppH
## Add a Foundry deployment resource
-To add a Foundry deployment resource, call the `AddDeployment` method with one of the generated `FoundryModel` entries:
+To add a Foundry deployment resource, call the method with one of the generated `FoundryModel` entries:
@@ -240,7 +241,7 @@ await builder.build().run();
## Configure deployment properties
-You can customize deployment properties using the `WithProperties` method:
+You can customize deployment properties using the method:
```csharp
var chat = foundry.AddDeployment("chat", FoundryModel.OpenAI.Gpt5Mini)
@@ -255,7 +256,7 @@ The preceding code sets the SKU name to `Standard` and capacity to `10` for the
## Add a Foundry project
-Use the `AddProject` method to create an Azure AI Foundry project for agents, project-scoped connections, and related Azure resources:
+Use the method to create an Azure AI Foundry project for agents, project-scoped connections, and related Azure resources:
@@ -305,7 +306,7 @@ await builder.build().run();
-The preceding code creates a Foundry project and adds a deployment through `AddModelDeployment`. When you call `WithReference(project)`, Aspire injects the standard connection string and project-specific connection properties such as the project endpoint and Application Insights connection string into the consuming resource.
+The preceding code creates a Foundry project and adds a deployment through . When you call `WithReference(project)`, Aspire injects the standard connection string and project-specific connection properties such as the project endpoint and Application Insights connection string into the consuming resource.
### Configure a Foundry project
@@ -351,11 +352,11 @@ await foundry
-`AddProject` creates a default Azure Container Registry for hosted agents only in publish mode (when deploying to Azure). In local run mode, no default registry is created. Use `WithContainerRegistry` when you want to point the project at a specific registry.
+`AddProject` creates a default Azure Container Registry for hosted agents only in publish mode (when deploying to Azure). In local run mode, no default registry is created. Use when you want to point the project at a specific registry.
## Add a Toolbox
-A [Toolbox](https://learn.microsoft.com/azure/foundry/agents/how-to/tools/toolbox) is a Foundry data-plane resource that bundles reusable tools behind a single MCP endpoint. Toolboxes don't have an ARM or Bicep representation — Aspire manages them directly through the Foundry data-plane API. Use `AddToolbox` on a Foundry project to declare one:
+A [Toolbox](https://learn.microsoft.com/azure/foundry/agents/how-to/tools/toolbox) is a Foundry data-plane resource that bundles reusable tools behind a single MCP endpoint. Toolboxes don't have an ARM or Bicep representation — Aspire manages them directly through the Foundry data-plane API. Use on a Foundry project to declare one:
@@ -432,14 +433,14 @@ builder.Build().Run();
Parameter details:
-The identity running `aspire run` or `aspire deploy` needs the **Foundry User** role on the project to manage Toolbox versions. Deployed compute resources that reference the Toolbox receive this role on the project automatically. The Search index named `docs` must already exist and contain data: neither `AddAzureSearch` nor `WithAISearchTool` creates or populates it. Toolbox availability depends on the Foundry service preview and its supported regions.
+The identity running `aspire run` or `aspire deploy` needs the **Foundry User** role on the project to manage Toolbox versions. Deployed compute resources that reference the Toolbox receive this role on the project automatically. The Search index named `docs` must already exist and contain data: neither nor creates or populates it. Toolbox availability depends on the Foundry service preview and its supported regions.
| API | Parameter | Description |
| --- | --- | --- |
| `AddToolbox(...)` | `name` | The Aspire resource name and the Toolbox name. |
-| `WithDescription(...)` | `description` | A description persisted with each Toolbox version. |
-| `WithWebSearchTool(...)` | `name`, `description` | Adds a web search tool definition to the Toolbox. |
-| `WithMcpTool(...)` | `name`, `endpoint`, `options` | Adds an MCP tool definition. `endpoint` accepts a string URI, an `EndpointReference`, or a `ReferenceExpression` for composed URLs. `options` configures the MCP server label, description, and approval policy. |
+| | `description` | A description persisted with each Toolbox version. |
+| | `name`, `description` | Adds a web search tool definition to the Toolbox. |
+| | `name`, `endpoint`, `options` | Adds an MCP tool definition. `endpoint` accepts a string URI, an `EndpointReference`, or a `ReferenceExpression` for composed URLs. `options` configures the MCP server label, description, and approval policy. |
| `WithAISearchTool(...)` | `name`, `search`, `indexName`, `description` | Adds an Azure AI Search tool backed by an `AddAzureSearch` resource and an existing search index. |
@@ -460,15 +461,15 @@ Use the existing-resource methods to validate a remote Toolbox without resolving
| Method | `aspire run` | `aspire deploy` |
| --- | --- | --- |
-| `RunAsExisting()` | Validate existing | Reconcile managed |
-| `PublishAsExisting()` | Reconcile managed | Validate existing |
-| `AsExisting()` | Validate existing | Validate existing |
+| | Validate existing | Reconcile managed |
+| | Reconcile managed | Validate existing |
+| | Validate existing | Validate existing |
These methods apply to the Toolbox resource itself. Existing mode validates the remote Toolbox, and a pinned version if supplied, without resolving local tools or promoting a version. See [Toolbox connection properties](../azure-ai-foundry-connect/#foundry-toolbox-resource) for the consumer's endpoint, authentication scope, and required request header.
## Add a hosted agent to Azure AI Foundry
-Use `AsHostedAgent` in C# or `asHostedAgent` in TypeScript to configure an executable or containerized app as a hosted agent in a Foundry project:
+Use to configure an executable or containerized app as a hosted agent in a Foundry project:
@@ -613,7 +614,7 @@ The defaulted `asHostedAgent` entry point and the explicit `asHostedAgentWithPro
### Add and publish a prompt agent
-For prompt-only scenarios, use `AddPromptAgent` on a Foundry project:
+For prompt-only scenarios, use on a Foundry project:
@@ -680,7 +681,7 @@ Parameter details:
| `AddPromptAgent(...)` | `model` | The Foundry model deployment resource the prompt agent uses, such as `chat` from `project.AddModelDeployment(...)`. |
| `AddPromptAgent(...)` | `name` | The Aspire resource name and Foundry agent name. This also drives generated environment variable prefixes, for example `web-researcher` becomes `WEB_RESEARCHER`. |
| `AddPromptAgent(...)` | `instructions` | Optional system instructions for the prompt agent. Use this to define behavior, tool-use guidance, and response style. |
-| `WithTool(...)` | `tool` | A Foundry tool resource created on the same Foundry project, such as `AddWebSearchTool(...)`, `AddCodeInterpreterTool(...)`, or `AddAISearchTool(...)`. |
+| | `tool` | A Foundry tool resource created on the same Foundry project, such as , , or . |
Prompt agents are deployed to Azure AI Foundry even during local development. Local apps call the cloud-provisioned agent through the injected project endpoint and agent name.
@@ -816,7 +817,7 @@ When the AppHost starts, Aspire automatically starts the Foundry Local service u
This requires the `foundry` CLI to be installed and available on `PATH`. For installation instructions, see [Foundry Local get started](https://learn.microsoft.com/azure/ai-foundry/foundry-local/get-started).
-The `RunAsFoundryLocal` method configures the resource to use the local service. It downloads and loads the specified models locally, provides health checks for the local service, and fully manages the Foundry Local lifecycle — including start and stop — through the `foundry` CLI.
+The method configures the resource to use the local service. It downloads and loads the specified models locally, provides health checks for the local service, and fully manages the Foundry Local lifecycle — including start and stop — through the `foundry` CLI.
Foundry Projects aren't supported when the parent Foundry resource uses
@@ -1006,7 +1007,7 @@ The generated Bicep is a starting point and is influenced by changes to the prov
### Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This enables customization of the generated Bicep by providing a fluent API to configure the Azure resources—using the `ConfigureInfrastructure` API:
+All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This enables customization of the generated Bicep by providing a fluent API to configure the Azure resources—using the API:
```csharp title="AppHost.cs"
builder.AddFoundry("foundry")
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-inference/azure-ai-inference-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-inference/azure-ai-inference-host.mdx
index 394711b51..9f5338ce2 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-inference/azure-ai-inference-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-inference/azure-ai-inference-host.mdx
@@ -6,6 +6,7 @@ description: Register an existing Azure AI Inference endpoint in your AppHost as
import { Image } from 'astro:assets';
import { Aside, Badge, Tabs, TabItem } from '@astrojs/starlight/components';
import aiFoundryIcon from '@assets/icons/azure-ai-foundry-icon.png';
+import ApiReference from '@components/ApiReference.astro';
to register an existing Azure AI Inference endpoint with your AppHost, then reference it from any consuming app:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-search/azure-ai-search-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-search/azure-ai-search-host.mdx
index 7c3d742ce..088b5cffa 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-search/azure-ai-search-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-ai-search/azure-ai-search-host.mdx
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import searchIcon from '@assets/icons/azure-search-icon.png';
+import ApiReference from '@components/ApiReference.astro';
-1. When Aspire adds an Azure AI Search resource, it implicitly calls `AddAzureProvisioning`, which adds support for generating Azure resources dynamically during app startup.
+1. When Aspire adds an Azure AI Search resource, it implicitly calls , which adds support for generating Azure resources dynamically during app startup.
1. The app must configure the appropriate Azure subscription and location. For more information, see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
-1. The `withReference` call configures a connection in the consuming project named after the referenced search resource, such as `search` in the preceding example.
+1. The call configures a connection in the consuming project named after the referenced search resource, such as `search` in the preceding example.
@@ -234,7 +235,7 @@ The generated Bicep is a starting point and is influenced by changes to the prov
## Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the `ConfigureInfrastructure` API:
+All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the API:
@@ -293,7 +294,7 @@ By default, the Azure AI Search hosting integration generates role assignments f
-Role assignments are generated automatically in the provisioned Bicep. To clear the default role assignments and assign custom ones, use `ClearDefaultRoleAssignments` and then configure via `ConfigureInfrastructure`:
+Role assignments are generated automatically in the provisioned Bicep. To clear the default role assignments and assign custom ones, use and then configure via `ConfigureInfrastructure`:
```csharp title="AppHost.cs"
var builder = DistributedApplication.CreateBuilder(args);
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-app-configuration/azure-app-configuration-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-app-configuration/azure-app-configuration-host.mdx
index 1d4058dd9..70a48ee33 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-app-configuration/azure-app-configuration-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-app-configuration/azure-app-configuration-host.mdx
@@ -8,6 +8,7 @@ import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import ContainerImages from '@components/ContainerImages.astro';
import LearnMore from '@components/LearnMore.astro';
import appConfigIcon from '@assets/icons/azure-appconfig-icon.png';
+import ApiReference from '@components/ApiReference.astro';
- When you call `AddAzureAppConfiguration` (or `addAzureAppConfiguration`), it implicitly calls
- `AddAzureProvisioning`—which adds support for generating Azure resources
+ When you call , it implicitly calls
+ —which adds support for generating Azure resources
dynamically during app startup. The app must configure the appropriate
subscription and location. For more information, see [Local provisioning:
Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -182,7 +183,7 @@ The generated Bicep is a starting point and is influenced by changes to the prov
## Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources — using the `ConfigureInfrastructure` API (or `configureInfrastructure` in TypeScript). For example, you can configure the SKU, enable purge protection, add tags, and more:
+All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources — using the API (or `configureInfrastructure` in TypeScript). For example, you can configure the SKU, enable purge protection, add tags, and more:
@@ -239,7 +240,7 @@ There are many more configuration options available to customize the Azure App C
## Add Azure App Configuration emulator resource
-Microsoft provides the Azure App Configuration emulator for developers who want a local, lightweight implementation of the Azure App Configuration service to code and test against. In Aspire, you can use this emulator by calling the `RunAsEmulator` method (or `runAsEmulator`) when you add your resource:
+Microsoft provides the Azure App Configuration emulator for developers who want a local, lightweight implementation of the Azure App Configuration service to code and test against. In Aspire, you can use this emulator by calling the method (or `runAsEmulator`) when you add your resource:
@@ -326,7 +327,7 @@ The preceding code configures the emulator container's endpoint to listen on por
#### Configure Azure App Configuration emulator with persistent lifetime
-To configure the emulator container with a persistent lifetime, call the `WithLifetime` method (or `withLifetime`) on the emulator container resource and pass `ContainerLifetime.Persistent`:
+To configure the emulator container with a persistent lifetime, call the method (or `withLifetime`) on the emulator container resource and pass `ContainerLifetime.Persistent`:
@@ -366,7 +367,7 @@ const appConfig = await builder.addAzureAppConfiguration("config")
#### Configure Azure App Configuration emulator with data volume
-By default, the Azure App Configuration emulator doesn't persist data between container restarts. To enable persistent storage using a Docker volume, call the `WithDataVolume` method (or `withDataVolume`) on the emulator resource:
+By default, the Azure App Configuration emulator doesn't persist data between container restarts. To enable persistent storage using a Docker volume, call the method (or `withDataVolume`) on the emulator resource:
@@ -408,7 +409,7 @@ The data volume is used to persist the emulator data outside the lifecycle of it
#### Configure Azure App Configuration emulator with data bind mount
-To persist emulator data to a specific directory on your host machine, call the `WithDataBindMount` method (or `withDataBindMount`). This is useful when you want direct access to the data files on your host system:
+To persist emulator data to a specific directory on your host machine, call the method (or `withDataBindMount`). This is useful when you want direct access to the data files on your host system:
@@ -454,7 +455,7 @@ Data bind mounts rely on the host machine's filesystem to persist the emulator d
## Use existing Azure App Configuration resource
-You might have an existing Azure App Configuration store that you want to connect to. Call the `AsExisting` method (or `asExisting`) with the config store name and resource group parameters to connect to an existing store:
+You might have an existing Azure App Configuration store that you want to connect to. Call the method (or `asExisting`) with the config store name and resource group parameters to connect to an existing store:
@@ -499,7 +500,7 @@ For more information, see [Use existing Azure resources](/integrations/cloud/azu
## Connect to existing Azure App Configuration store
-An alternative approach to using the `AsExisting` API enables the addition of a connection string instead, where the AppHost uses configuration to resolve the connection information. To add a connection to an existing Azure App Configuration store, call the `AddConnectionString` method:
+An alternative approach to using the `AsExisting` API enables the addition of a connection string instead, where the AppHost uses configuration to resolve the connection information. To add a connection to an existing Azure App Configuration store, call the method:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-app-service/azure-app-service-get-started.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-app-service/azure-app-service-get-started.mdx
index ca59ca23c..1b78e1947 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-app-service/azure-app-service-get-started.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-app-service/azure-app-service-get-started.mdx
@@ -7,6 +7,7 @@ prev: false
import { Image } from 'astro:assets';
import { Badge, LinkButton, Steps } from '@astrojs/starlight/components';
import appServiceIcon from '@assets/icons/azure-app-services.svg';
+import ApiReference from '@components/ApiReference.astro';
only when you need to customize the generated website — for example to add application settings, tags, or deployment slots.
- **Deployment slots.** Stage changes safely by configuring a named deployment slot for the environment so that new deployments land in staging before you swap them to production.
- **Bicep-backed provisioning.** The hosting integration generates all required Azure resources — App Service Plan, Azure Container Registry, and managed identity — from the same C# or TypeScript AppHost code. No hand-authored Bicep required.
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-app-service/azure-app-service-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-app-service/azure-app-service-host.mdx
index 4d36e9ea7..c79c2f70d 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-app-service/azure-app-service-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-app-service/azure-app-service-host.mdx
@@ -11,6 +11,7 @@ import {
Tabs,
TabItem,
} from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
import LearnMore from '@components/LearnMore.astro';
import InstallPackage from '@components/InstallPackage.astro';
import appServiceIcon from '@assets/icons/azure-app-services.svg';
@@ -120,7 +121,7 @@ await builder.build().run();
-1. When you call `addAzureAppServiceEnvironment` (or `AddAzureAppServiceEnvironment` in C#), Aspire implicitly enables Azure provisioning for the application.
+1. When you call , Aspire implicitly enables Azure provisioning for the application.
2. All project resources and Dockerfile-backed containers in the AppHost are **automatically targeted** to the App Service environment when it's present — no explicit wiring is required.
@@ -130,7 +131,7 @@ await builder.build().run();
Calling `AddAzureAppServiceEnvironment` (or `addAzureAppServiceEnvironment` in
- TypeScript) implicitly calls `AddAzureProvisioning`, which adds support for
+ TypeScript) implicitly calls , which adds support for
generating Azure resources dynamically during app startup. The app must
configure an Azure subscription and location. For more information, see [Local
provisioning:
@@ -207,7 +208,7 @@ For more information on treating Azure resources as existing resources, see [Use
## Customize App Service websites
-By default, Aspire generates an App Service website for each eligible resource without additional configuration. Use `PublishAsAzureAppServiceWebsite` (C#) or `publishAsAzureAppServiceWebsite` (TypeScript) when you need to customize the generated website — for example to add application settings or tags:
+By default, Aspire generates an App Service website for each eligible resource without additional configuration. Use when you need to customize the generated website — for example to add application settings or tags:
@@ -275,7 +276,7 @@ The preceding code:
## Deployment slots
-[Deployment slots](https://learn.microsoft.com/azure/app-service/deploy-staging-slots) let you deploy your app to a staging environment for testing before swapping it into production. The `WithDeploymentSlot` extension method (or `withDeploymentSlot` in TypeScript) configures a deployment slot for the App Service environment:
+[Deployment slots](https://learn.microsoft.com/azure/app-service/deploy-staging-slots) let you deploy your app to a staging environment for testing before swapping it into production. The extension method (or `withDeploymentSlot` in TypeScript) configures a deployment slot for the App Service environment:
@@ -388,7 +389,7 @@ With this configuration, provide a value for the `deploymentSlot` parameter when
slot when needed.
-When you customize App Service resources using `PublishAsAzureAppServiceWebsite` (or `publishAsAzureAppServiceWebsite`) or `ConfigureInfrastructure`, those customizations apply to the production slot by default. Apply them separately to each slot when needed using the `configureSlot` option:
+When you customize App Service resources using `PublishAsAzureAppServiceWebsite` (or `publishAsAzureAppServiceWebsite`) or , those customizations apply to the production slot by default. Apply them separately to each slot when needed using the `configureSlot` option:
@@ -421,7 +422,7 @@ await api.publishAsAzureAppServiceWebsite({
## Regional virtual network integration
-To configure [regional virtual network integration](https://learn.microsoft.com/azure/app-service/overview-vnet-integration) for the websites in an App Service environment, add the [📦 Aspire.Hosting.Azure.Network](https://www.nuget.org/packages/Aspire.Hosting.Azure.Network) integration and delegate a subnet to the environment with `WithDelegatedSubnet` (or `withDelegatedSubnet` in TypeScript):
+To configure [regional virtual network integration](https://learn.microsoft.com/azure/app-service/overview-vnet-integration) for the websites in an App Service environment, add the [📦 Aspire.Hosting.Azure.Network](https://www.nuget.org/packages/Aspire.Hosting.Azure.Network) integration and delegate a subnet to the environment with :
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-application-insights.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-application-insights.mdx
index 841b988c6..6b589b494 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-application-insights.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-application-insights.mdx
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import appInsightsIcon from '@assets/icons/azure-appinsights-icon.png';
+import ApiReference from '@components/ApiReference.astro';
to add and return an Azure Application Insights resource builder:
@@ -117,13 +118,13 @@ await builder.build().run();
1. A Log Analytics workspace is automatically created to store the telemetry data.
-1. The `WithReference` (or `withReference`) call configures a connection in the consuming project, making the Application Insights connection string available as the `APPLICATIONINSIGHTS_CONNECTION_STRING` environment variable.
+1. The call configures a connection in the consuming project, making the Application Insights connection string available as the `APPLICATIONINSIGHTS_CONNECTION_STRING` environment variable.
When you call `AddAzureApplicationInsights` (or `addAzureApplicationInsights`), it implicitly calls
- `AddAzureProvisioning` — which adds support for generating Azure resources
+ — which adds support for generating Azure resources
dynamically during app startup. The app must configure the appropriate
subscription and location. For more information, see [Local provisioning:
Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -257,7 +258,7 @@ The generated Bicep is a starting point that reflects the provisioning infrastru
### Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the `ConfigureInfrastructure` API:
+All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the API:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-cache-redis/azure-cache-redis-connect.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-cache-redis/azure-cache-redis-connect.mdx
index c985bbbbc..50d7ae89d 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-cache-redis/azure-cache-redis-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-cache-redis/azure-cache-redis-connect.mdx
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import cacheRedisIcon from '@assets/icons/azure-cacheredis-icon.png';
+import ApiReference from '@components/ApiReference.astro';
|
+| `Password` | The access key. Empty when using Entra ID authentication; populated when using or running as a local container |
| `Uri` | The connection URI. In Azure mode: `redis://{Host}`; when running as a local container: `redis://[:{Password}@]{Host}:{Port}` |
**Example connection strings:**
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-cache-redis/azure-cache-redis-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-cache-redis/azure-cache-redis-host.mdx
index 7cb1237b9..81582acbe 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-cache-redis/azure-cache-redis-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-cache-redis/azure-cache-redis-host.mdx
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import cacheRedisIcon from '@assets/icons/azure-cacheredis-icon.png';
+import ApiReference from '@components/ApiReference.astro';
call configures a connection in the consuming project named after the resource, such as `cache` in the preceding example.
- When you call `AddAzureManagedRedis` (or `addAzureManagedRedis`), it implicitly calls `AddAzureProvisioning` — which adds support for generating Azure resources dynamically during app startup. The app must configure the appropriate subscription and location. For more information, see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
+ When you call , it implicitly calls — which adds support for generating Azure resources dynamically during app startup. The app must configure the appropriate subscription and location. For more information, see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -127,7 +128,7 @@ await builder.build().run();
The Azure Cache for Redis hosting integration supports running a local Redis container during development. This lets you develop and test your app locally without provisioning an Azure resource or connecting to an existing Azure Cache for Redis instance.
-To run the resource as a container, chain a call to `RunAsContainer` (or `runAsContainer`):
+To run the resource as a container, chain a call to :
@@ -170,7 +171,7 @@ The `RunAsContainer` method accepts an optional delegate that lets you customize
## Connect to an existing Azure Cache for Redis instance
-If you already have an Azure Cache for Redis instance you want to use, call `AsExisting` (or `asExisting`) to annotate that the resource already exists rather than being provisioned:
+If you already have an Azure Cache for Redis instance you want to use, call to annotate that the resource already exists rather than being provisioned:
@@ -215,7 +216,7 @@ For more information on treating Azure resources as existing resources, see [Use
## Configure access key authentication
-By default, the Azure Managed Redis resource uses Microsoft Entra ID authentication. To switch to access key authentication (not recommended for production), call `WithAccessKeyAuthentication` (or `withAccessKeyAuthentication`):
+By default, the Azure Managed Redis resource uses Microsoft Entra ID authentication. To switch to access key authentication (not recommended for production), call :
@@ -325,7 +326,7 @@ The generated Bicep provisions the Azure Cache for Redis instance and creates an
## Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables Bicep customization through the `ConfigureInfrastructure` API:
+All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables Bicep customization through the API:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-connector-namespace.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-connector-namespace.mdx
index 822e77a35..f29360701 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-connector-namespace.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-connector-namespace.mdx
@@ -5,6 +5,7 @@ description: Model Azure Connector Namespace connections, managed MCP servers, o
import { Tabs, TabItem } from '@astrojs/starlight/components';
import InstallPackage from '@components/InstallPackage.astro';
+import ApiReference from '@components/ApiReference.astro';
Azure Connector Namespace connects applications to external services such as Office 365 and SharePoint. Aspire models the namespace, authenticated connections, managed MCP server configurations, and access policies together.
@@ -118,7 +119,7 @@ After provisioning, open `https://connectors.azure.com// for a user-assigned managed identity without hard-coding its principal ID.
- **MCP server policies** grant an Entra user or group access to the managed MCP endpoint. This preview doesn't support service principals or managed identities for MCP access policies.
- **Operation allow-lists** restrict the connector operations exposed as MCP tools. Expose only what your application needs; don't put credentials or tokens in descriptions or operation metadata.
@@ -128,7 +129,7 @@ Incremental ARM deployments don't delete child resources omitted from the next d
## Reference existing resources
-Use the standard Azure `PublishAsExisting` / `publishAsExisting` and `AsExisting` / `asExisting` workflows for a namespace. Existing connection and MCP configuration children support `AsExisting` / `asExisting` and are emitted as read-only Bicep references.
+Use the standard Azure and workflows for a namespace. Existing connection and MCP configuration children support `AsExisting` / `asExisting` and are emitted as read-only Bicep references.
When adding a new access policy beneath an existing namespace, set the Azure deployment location to the namespace's location. Bicep can't read the existing location early enough to assign the child resource location automatically.
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-container-registry/azure-container-registry-connect.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-container-registry/azure-container-registry-connect.mdx
index d3e6776f0..93ca1f223 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-container-registry/azure-container-registry-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-container-registry/azure-container-registry-connect.mdx
@@ -6,6 +6,7 @@ description: Learn how Azure Container Registry is consumed as a publish target
import { Image } from 'astro:assets';
import { Aside } from '@astrojs/starlight/components';
import containerRegistryIcon from '@assets/icons/azure-container-registry-icon.svg';
+import ApiReference from '@components/ApiReference.astro';
from your AppHost.
## Reference loginServer in your AppHost
-If you need to pass the registry's `loginServer` value to another resource in your AppHost — for example, to tag images before pushing — use `GetOutput` (or `getOutput`) to retrieve it as a Bicep output reference:
+If you need to pass the registry's `loginServer` value to another resource in your AppHost — for example, to tag images before pushing — use to retrieve it as a Bicep output reference:
```csharp title="AppHost.cs"
var acr = builder.AddAzureContainerRegistry("my-acr");
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-container-registry/azure-container-registry-get-started.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-container-registry/azure-container-registry-get-started.mdx
index 6f34a985c..085a20d2b 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-container-registry/azure-container-registry-get-started.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-container-registry/azure-container-registry-get-started.mdx
@@ -13,6 +13,7 @@ import {
Tabs,
TabItem,
} from '@astrojs/starlight/components';
+import ApiReference from '@components/ApiReference.astro';
import InstallPackage from '@components/InstallPackage.astro';
import containerRegistryIcon from '@assets/icons/azure-container-registry-icon.svg';
@@ -35,7 +36,7 @@ Modeling an Azure Container Registry through Aspire — rather than manually con
- **Declarative infrastructure.** The hosting integration generates the Azure Bicep that provisions the registry alongside the rest of your app's infrastructure, keeping everything version-controlled.
- **Fine-grained access control.** Use role assignments — such as `AcrPush` — to grant individual project resources permission to push images to the registry.
- **Automated image cleanup.** Schedule ACR purge tasks to remove old images and control storage costs without manual intervention.
-- **Reference existing registries.** Use a registry your team already manages by referencing it with `publishAsExisting` or `asExisting` rather than provisioning a new one.
+- **Reference existing registries.** Use a registry your team already manages by referencing it with or rather than provisioning a new one.
## How the pieces fit together
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-container-registry/azure-container-registry-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-container-registry/azure-container-registry-host.mdx
index 30d00fe39..f9f6d3680 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-container-registry/azure-container-registry-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-container-registry/azure-container-registry-host.mdx
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import containerRegistryIcon from '@assets/icons/azure-container-registry-icon.svg';
+import ApiReference from '@components/ApiReference.astro';
- When you call `AddAzureContainerRegistry` (or `addAzureContainerRegistry`), it implicitly calls
- `AddAzureProvisioning` — which adds support for generating Azure resources dynamically during app
+ When you call , it implicitly calls
+ — which adds support for generating Azure resources dynamically during app
startup. The app must configure the appropriate subscription and location. For more information,
see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -118,7 +119,7 @@ await builder.build().run();
1. The registry resource is modeled as an `AzureContainerRegistryResource` in the Aspire resource graph.
-1. Calling `WithAzureContainerRegistry` (or `withAzureContainerRegistry`) on the compute environment attaches the registry and provisions the necessary role assignments and managed-identity bindings so the environment can pull images securely.
+1. Calling on the compute environment attaches the registry and provisions the necessary role assignments and managed-identity bindings so the environment can pull images securely.
1. At deployment time, the generated Bicep provisions the registry and outputs its `name` and `loginServer` for use by the deployment pipeline.
@@ -130,7 +131,7 @@ await builder.build().run();
## Get the registry from a compute environment
-To retrieve the registry that is associated with a compute environment — for example, to add purge tasks to the auto-provisioned default registry — use `GetAzureContainerRegistry` (or `getAzureContainerRegistry`):
+To retrieve the registry that is associated with a compute environment — for example, to add purge tasks to the auto-provisioned default registry — use :
@@ -169,7 +170,7 @@ This returns an `AzureContainerRegistryResource` builder that you can use for fu
## Reference an existing container registry
-To reference a registry your team already manages rather than provisioning a new one, use `publishAsExisting`, `runAsExisting`, or `asExisting`:
+To reference a registry your team already manages rather than provisioning a new one, use , , or :
@@ -274,7 +275,7 @@ Available roles include: `AcrPull`, `AcrPush`, `AcrDelete`, `AcrImageSigner`, `A
## Schedule image cleanup with purge tasks
-Over time, container registries accumulate old images that consume storage. Use `WithPurgeTask` (or `withPurgeTask`) to add a scheduled [ACR purge task](https://learn.microsoft.com/azure/container-registry/container-registry-auto-purge) that automatically removes old or unused images:
+Over time, container registries accumulate old images that consume storage. Use to add a scheduled [ACR purge task](https://learn.microsoft.com/azure/container-registry/container-registry-auto-purge) that automatically removes old or unused images:
@@ -343,7 +344,7 @@ Each purge task is given a unique name automatically. Use the `taskName` option
## Customize the provisioning infrastructure
-To make changes that go beyond what the built-in APIs expose, configure the underlying Bicep infrastructure directly via `ConfigureInfrastructure` (or `configureInfrastructure`):
+To make changes that go beyond what the built-in APIs expose, configure the underlying Bicep infrastructure directly via :
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-cosmos-db/azure-cosmos-db-connect.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-cosmos-db/azure-cosmos-db-connect.mdx
index 752ed3bf9..b7c0aeb0f 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-cosmos-db/azure-cosmos-db-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-cosmos-db/azure-cosmos-db-connect.mdx
@@ -8,6 +8,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import cosmosDbIcon from '@assets/icons/azure-cosmosdb-icon.png';
+import ApiReference from '@components/ApiReference.astro';
). |
**Example (Entra ID / role-based access):**
@@ -355,5 +356,5 @@ const database = client.database(databaseName!);
- If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using `WithEnvironment`. See [Customize resources](/integrations/cloud/azure/customize-resources/) in the Azure integration reference.
+ If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using . See [Customize resources](/integrations/cloud/azure/customize-resources/) in the Azure integration reference.
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-cosmos-db/azure-cosmos-db-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-cosmos-db/azure-cosmos-db-host.mdx
index ea7610a0e..f4eb08f3e 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-cosmos-db/azure-cosmos-db-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-cosmos-db/azure-cosmos-db-host.mdx
@@ -11,6 +11,7 @@ import ThemeImage from '@components/ThemeImage.astro';
import cosmosDbIcon from '@assets/icons/azure-cosmosdb-icon.png';
import cosmosResourceRelationships from '@assets/integrations/cloud/azure/cosmos-db/cosmos-resource-relationships.svg';
import cosmosResourceRelationshipsLight from '@assets/integrations/cloud/azure/cosmos-db/cosmos-resource-relationships-light.svg';
+import ApiReference from '@components/ApiReference.astro';
- When you call `AddAzureCosmosDB` (or `addAzureCosmosDB`), it implicitly calls `AddAzureProvisioning` — which adds support for generating Azure resources dynamically during app startup. The app must configure the appropriate subscription and location. For more information, see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
+ When you call , it implicitly calls — which adds support for generating Azure resources dynamically during app startup. The app must configure the appropriate subscription and location. For more information, see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -117,7 +118,7 @@ await builder.addNodeApp("api", "./api", "index.js")
## Run as emulator
-For local development, use the Azure Cosmos DB Emulator instead of a live Azure account. Chain `RunAsEmulator` (or `runAsEmulator`) on the resource builder:
+For local development, use the Azure Cosmos DB Emulator instead of a live Azure account. Chain on the resource builder:
@@ -162,7 +163,7 @@ By default, the Cosmos DB emulator container exposes the following endpoint:
| -------- | -------------- | --------- |
| `https` | 8081 | dynamic |
-To configure a fixed host port, call `WithGatewayPort` (or `withGatewayPort`) inside the emulator callback:
+To configure a fixed host port, call inside the emulator callback:
@@ -204,7 +205,7 @@ The Cosmos DB emulator container's port is mapped to the host port as shown in t
### Configure classic emulator partition count
-To configure the partition count for the classic Cosmos DB emulator container, call `WithPartitionCount` (or `withPartitionCount`) inside the classic emulator callback. The default Linux-based (vNext) emulator doesn't support partition counts and throws a NotSupportedException if you call this API with `RunAsEmulator` (or `runAsEmulator`).
+To configure the partition count for the classic Cosmos DB emulator container, call inside the classic emulator callback. The default Linux-based (vNext) emulator doesn't support partition counts and throws a NotSupportedException if you call this API with `RunAsEmulator` (or `runAsEmulator`).
@@ -280,7 +281,7 @@ The data volume is mounted at `/tmp/cosmos/appdata` in the emulator container. W
### Configure emulator with persistent lifetime
-To configure the Cosmos DB emulator container with a persistent lifetime, call the `WithLifetime` method with `ContainerLifetime.Persistent`:
+To configure the Cosmos DB emulator container with a persistent lifetime, call the method with `ContainerLifetime.Persistent`:
```csharp title="AppHost.cs"
var builder = DistributedApplication.CreateBuilder(args);
@@ -300,7 +301,7 @@ var cosmos = builder.AddAzureCosmosDB("cosmos-db")
## Run as classic emulator
-Use the classic (Windows-based) Azure Cosmos DB emulator instead of the default Linux-based (vNext) emulator by calling `RunAsClassicEmulator` (or `runAsClassicEmulator`):
+Use the classic (Windows-based) Azure Cosmos DB emulator instead of the default Linux-based (vNext) emulator by calling :
@@ -330,12 +331,12 @@ await cosmos.runAsClassicEmulator();
`RunAsClassicEmulator` configures the Cosmos DB resource to use the `stable` tag of the [Azure Cosmos DB Emulator](https://learn.microsoft.com/azure/cosmos-db/emulator#authentication) container image. Unlike the default vNext emulator, the classic emulator requires a TLS/SSL certificate. For more information, see [Export the emulator's TLS/SSL certificate](https://learn.microsoft.com/azure/cosmos-db/how-to-develop-emulator?tabs=docker-linux#export-the-emulators-tlsssl-certificate).
- `RunAsPreviewEmulator` (or `runAsPreviewEmulator`) is still available but is now obsolete. It forwards to `RunAsEmulator` (the vNext emulator) so existing code keeps working, but new code should call `RunAsEmulator` directly.
+ is still available but is now obsolete. It forwards to `RunAsEmulator` (the vNext emulator) so existing code keeps working, but new code should call `RunAsEmulator` directly.
## Configure the Data Explorer
-The Linux-based (vNext) emulator used by `RunAsEmulator` includes a built-in **Data Explorer** web UI. Call `WithDataExplorer` (or `withDataExplorer`) inside the emulator callback to expose it:
+The Linux-based (vNext) emulator used by `RunAsEmulator` includes a built-in **Data Explorer** web UI. Call inside the emulator callback to expose it:
@@ -377,7 +378,7 @@ await cosmos.runAsEmulator({
## Connect to an existing Azure Cosmos DB account
-You might have an existing Azure Cosmos DB account you want to connect to. Chain a call to `AsExisting` (or `asExisting`) on the resource builder:
+You might have an existing Azure Cosmos DB account you want to connect to. Chain a call to on the resource builder:
@@ -428,7 +429,7 @@ Aspire models parent-child relationships between Azure Cosmos DB resources. An A
### Add a database
-To add an Azure Cosmos DB database resource, call `AddCosmosDatabase` (or `addCosmosDatabase`) on the Cosmos DB account resource builder:
+To add an Azure Cosmos DB database resource, call on the Cosmos DB account resource builder:
@@ -459,7 +460,7 @@ The `AddCosmosDatabase` call adds a logical database named `db` to your Cosmos D
### Add a container
-An Azure Cosmos DB container is where data is stored. When you create a container, you must supply a partition key path. To add an Azure Cosmos DB container resource, call `AddContainer` (or `addContainer`) on the database resource builder:
+An Azure Cosmos DB container is where data is stored. When you create a container, you must supply a partition key path. To add an Azure Cosmos DB container resource, call on the database resource builder:
@@ -556,7 +557,7 @@ When your AppHost code expresses parent-child relationships, consuming apps can
## Enable access key authentication
-By default, the Azure Cosmos DB hosting integration uses Microsoft Entra ID (role-based access). To enable access key authentication instead, call `WithAccessKeyAuthentication` (or `withAccessKeyAuthentication`):
+By default, the Azure Cosmos DB hosting integration uses Microsoft Entra ID (role-based access). To enable access key authentication instead, call :
@@ -659,7 +660,7 @@ The generated Bicep is a starting point and is influenced by changes to the prov
## Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables fluent customization of the generated Bicep using the `ConfigureInfrastructure` (or `configureInfrastructure`) API. For example, you can configure the `kind`, `consistencyPolicy`, `locations`, and more:
+All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables fluent customization of the generated Bicep using the API. For example, you can configure the `kind`, `consistencyPolicy`, `locations`, and more:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-data-explorer.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-data-explorer.mdx
index c32cab237..0cdbb13e3 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-data-explorer.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-data-explorer.mdx
@@ -8,6 +8,7 @@ import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import ContainerImages from '@components/ContainerImages.astro';
import LearnMore from '@components/LearnMore.astro';
import kustoIcon from '@assets/icons/azure-dataexplorer-icon.svg';
+import ApiReference from '@components/ApiReference.astro';
to declare a cluster, then call to declare one or more databases inside it:
@@ -112,10 +113,10 @@ await builder.addNodeApp("api", "./api", "index.js")
-The preceding code adds an Azure Data Explorer cluster named `kusto` with a read-write database named `analytics`. The `WithReference` (or `withReference`) method injects the connection information into the consuming project.
+The preceding code adds an Azure Data Explorer cluster named `kusto` with a read-write database named `analytics`. The method injects the connection information into the consuming project.
- When you call `AddAzureKustoCluster`, it implicitly calls `AddAzureProvisioning` —
+ When you call `AddAzureKustoCluster`, it implicitly calls —
which adds support for generating Azure resources dynamically during app startup.
The app must configure the appropriate subscription and location. For more
information, see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -168,7 +169,7 @@ When running as an emulator, databases are automatically created when the contai
### Configure the emulator host port
-By default, the emulator uses a dynamic host port. To fix the host port, pass a `configureContainer` callback and call `WithHostPort` (or `withHostPort`):
+By default, the emulator uses a dynamic host port. To fix the host port, pass a `configureContainer` callback and call :
@@ -316,7 +317,7 @@ The generated Bicep is a starting point — customise it through the C# provisio
### Customize provisioning infrastructure
-All Aspire Azure resources subclass `AzureProvisioningResource`. The `ConfigureInfrastructure` (or `configureInfrastructure`) API lets you customise the generated Bicep with a fluent callback:
+All Aspire Azure resources subclass `AzureProvisioningResource`. The API lets you customise the generated Bicep with a fluent callback:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-default-credential.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-default-credential.mdx
index bdadcb937..e1c4bdd98 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-default-credential.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-default-credential.mdx
@@ -6,6 +6,7 @@ description: Learn about the default credential behavior in Aspire Azure client
import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import azureIcon from '@assets/icons/azure-icon.png';
+import ApiReference from '@components/ApiReference.astro';
. Azure resource extension methods invoke `AddAzureProvisioning`, so using those methods registers the provider indirectly. The credential it exposes is configured by the same Azure provisioning options (tenant ID, credential source, and so on) and matched to the current run or publish execution context, as described in [Default credential behavior](#default-credential-behavior).
Treat the returned `TokenCredential` as opaque because its concrete type is an implementation detail that may change between releases; do not rely on casts or type checks.
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-event-hubs/azure-event-hubs-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-event-hubs/azure-event-hubs-host.mdx
index ac7d9619e..bc987f4d7 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-event-hubs/azure-event-hubs-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-event-hubs/azure-event-hubs-host.mdx
@@ -8,6 +8,7 @@ import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import ContainerImages from '@components/ContainerImages.astro';
import LearnMore from '@components/LearnMore.astro';
import eventHubsIcon from '@assets/icons/azure-eventhubs-icon.png';
+import ApiReference from '@components/ApiReference.astro';
to declare a namespace, then call to declare one or more hubs inside it:
@@ -113,10 +114,10 @@ await builder.addNodeApp("api", "./api", "index.js")
-The preceding code adds an Azure Event Hubs namespace named `event-hubs` with an Event Hub named `messages`. The `WithReference` (or `withReference`) method injects the connection information into the consuming project.
+The preceding code adds an Azure Event Hubs namespace named `event-hubs` with an Event Hub named `messages`. The method injects the connection information into the consuming project.
- When you call `AddAzureEventHubs`, it implicitly calls `AddAzureProvisioning` —
+ When you call `AddAzureEventHubs`, it implicitly calls —
which adds support for generating Azure resources dynamically during app startup.
The app must configure the appropriate subscription and location. For more
information, see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -131,7 +132,7 @@ The preceding code adds an Azure Event Hubs namespace named `event-hubs` with an
## Add an Event Hub consumer group
-To add a consumer group to a hub, call `AddConsumerGroup` (or `addConsumerGroup`) on the hub resource builder:
+To add a consumer group to a hub, call on the hub resource builder:
@@ -219,7 +220,7 @@ By default, the emulator container exposes port `5672` mapped to a random host p
| ---------- | -------------------------------------------------------------- | -------------- | --------- |
| `emulator` | `mcr.microsoft.com/azure-messaging/eventhubs-emulator` | 5672 | dynamic |
-To fix the host port, pass a `configureContainer` callback and call `WithHostPort` (or `withHostPort`):
+To fix the host port, pass a `configureContainer` callback and call :
@@ -319,7 +320,7 @@ builder.AddProject()
```
-The TypeScript AppHost doesn't currently expose `withDataBindMount` on the Event Hubs emulator resource. Use a data volume via the C# AppHost or pre-configure hubs with `withConfigurationFile` instead.
+The TypeScript AppHost doesn't currently expose `withDataBindMount` on the Event Hubs emulator resource. Use a data volume via the C# AppHost or pre-configure hubs with instead.
@@ -403,12 +404,12 @@ builder.AddProject()
```
- `WithConfiguration` is not available in the TypeScript AppHost. Use `withConfigurationFile` to supply a fully customized configuration file instead.
+ `withConfiguration` is not available in the TypeScript AppHost. Use `withConfigurationFile` to supply a fully customized configuration file instead.
## Connect to an existing Azure Event Hubs namespace
-If you already have an Azure Event Hubs namespace, call `AsExisting` (or `asExisting`) instead of provisioning a new one:
+If you already have an Azure Event Hubs namespace, call instead of provisioning a new one:
@@ -567,7 +568,7 @@ The generated Bicep is a starting point — customise it through the C# provisio
### Customize provisioning infrastructure
-All Aspire Azure resources subclass `AzureProvisioningResource`. The `ConfigureInfrastructure` (or `configureInfrastructure`) API lets you customise the generated Bicep with a fluent callback:
+All Aspire Azure resources subclass `AzureProvisioningResource`. The API lets you customise the generated Bicep with a fluent callback:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-front-door.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-front-door.mdx
index 29584742a..1c6725108 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-front-door.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-front-door.mdx
@@ -8,6 +8,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallPackage from '@components/InstallPackage.astro';
import azureIcon from '@assets/icons/azure-front-door-icon.png';
+import ApiReference from '@components/ApiReference.astro';
to add a Front Door profile, then call to attach a backend resource as an origin:
@@ -78,14 +79,14 @@ await builder.build().run();
The preceding code:
- Adds an Azure App Service environment (a compute environment is required so Front Door can resolve the origin's hostname).
-- Adds an `api` project and exposes it externally with `withExternalHttpEndpoints`. Front Door requires an origin to expose an external HTTP or HTTPS endpoint.
+- Adds an `api` project and exposes it externally with . Front Door requires an origin to expose an external HTTP or HTTPS endpoint.
- Adds a Front Door profile named `frontdoor` and configures the `api` project as an origin.
Each call to `withOrigin` creates a separate Front Door endpoint, origin group, origin, and route, so each backend is independently routable through its own `*.azurefd.net` hostname.
When you call `addAzureFrontDoor`, it implicitly calls
- `addAzureProvisioning`—which adds support for generating Azure resources
+ —which adds support for generating Azure resources
dynamically during app startup. The app must configure the appropriate
subscription and location. For more information, see [Local provisioning:
Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -146,14 +147,14 @@ Each origin must be added at most once per Front Door resource — adding the sa
### Health probes
-Front Door uses health probes to determine which origins are healthy. By default, the Aspire integration probes the origin's external endpoint at path `/` over HTTPS. If you have configured an HTTP probe on the origin (for example with `WithHttpProbe`), Front Door uses the path and protocol from the resource's liveness probe instead.
+Front Door uses health probes to determine which origins are healthy. By default, the Aspire integration probes the origin's external endpoint at path `/` over HTTPS. If you have configured an HTTP probe on the origin (for example with ), Front Door uses the path and protocol from the resource's liveness probe instead.
### Provisioning-generated Bicep
When you publish your app, Aspire generates Bicep alongside the manifest. A Front Door resource with a single origin generates Bicep similar to the following:
- **Upgrading from Aspire 13.3.0-preview:** The resource names generated for Front Door profiles, endpoints, origin groups, origins, and routes changed in Aspire 13.4. This can result in duplicate Azure resources (profiles, endpoints, origin groups, routes, and origins) during an upgrade. To avoid duplicates, either remove the existing Azure resources before redeploying, or set resource names explicitly using `ConfigureInfrastructure`.
+ **Upgrading from Aspire 13.3.0-preview:** The resource names generated for Front Door profiles, endpoints, origin groups, origins, and routes changed in Aspire 13.4. This can result in duplicate Azure resources (profiles, endpoints, origin groups, routes, and origins) during an upgrade. To avoid duplicates, either remove the existing Azure resources before redeploying, or set resource names explicitly using .
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-functions/azure-functions-connect.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-functions/azure-functions-connect.mdx
index b354da35e..dbdb76a10 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-functions/azure-functions-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-functions/azure-functions-connect.mdx
@@ -6,6 +6,7 @@ description: Learn how Azure Functions code reads Aspire-injected environment va
import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import functionsIcon from '@assets/icons/azure-functionapps-icon.png';
+import ApiReference from '@components/ApiReference.astro';
on the Functions project resource, Aspire writes the referenced resource connection properties as environment variables into the Functions host process. The variable names follow the standard Aspire pattern: `[RESOURCE]_[PROPERTY]` (uppercased).
For example, if the AppHost references a blob storage container named `blobs`, Aspire injects:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-functions/azure-functions-get-started.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-functions/azure-functions-get-started.mdx
index beb786fec..26806c26a 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-functions/azure-functions-get-started.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-functions/azure-functions-get-started.mdx
@@ -7,6 +7,7 @@ prev: false
import { Image } from 'astro:assets';
import { LinkButton, Steps } from '@astrojs/starlight/components';
import functionsIcon from '@assets/icons/azure-functionapps-icon.png';
+import ApiReference from '@components/ApiReference.astro';
and a named task hub.
## How the pieces fit together
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-functions/azure-functions-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-functions/azure-functions-host.mdx
index 13e4fb565..170ab7b5b 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-functions/azure-functions-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-functions/azure-functions-host.mdx
@@ -9,6 +9,7 @@ import ContainerImages from '@components/ContainerImages.astro';
import LearnMore from '@components/LearnMore.astro';
import functionsIcon from '@assets/icons/azure-functionapps-icon.png';
import vsAzureFunctionsOptions from '@assets/integrations/cloud/azure/functions/visual-studio-azure-functions-options.png';
+import ApiReference from '@components/ApiReference.astro';
on the `builder` instance to add an Azure Functions project resource to the app model.
There are two ways to add an Azure Functions project in C#, depending on whether the Functions project is referenced by the AppHost project. The TypeScript AppHost always uses the file path approach.
@@ -165,9 +166,9 @@ await builder.addNodeApp("api", "./api", "index.js")
1. The path to the Functions project file is relative to the AppHost project directory. If the path is not absolute, it is resolved relative to the AppHost directory.
-1. The `functions` resource can be referenced by other project resources. The `WithReference` (or `withReference`) method configures a connection named `"functions"` in the consuming project.
+1. The `functions` resource can be referenced by other project resources. The method configures a connection named `"functions"` in the consuming project.
-1. If the Functions project exposes an HTTP trigger and you call `WithExternalHttpEndpoints` (or `withExternalHttpEndpoints`), the trigger endpoint is publicly accessible when deployed.
+1. If the Functions project exposes an HTTP trigger and you call , the trigger endpoint is publicly accessible when deployed.
@@ -177,7 +178,7 @@ await builder.addNodeApp("api", "./api", "index.js")
## Add Azure Functions resource with host storage
-Azure Functions requires an Azure Storage account as host storage for checkpoints, leases, and other internal state. By default, Aspire creates an implicit host storage resource automatically. To use a specific storage account, call `WithHostStorage` (or `withHostStorage`) on the Azure Functions resource:
+Azure Functions requires an Azure Storage account as host storage for checkpoints, leases, and other internal state. By default, Aspire creates an implicit host storage resource automatically. To use a specific storage account, call on the Azure Functions resource:
@@ -341,7 +342,7 @@ The Durable Task scheduler and task hub APIs are experimental in this release. T
To use these APIs without compiler warnings, suppress the `ASPIREDURABLETASK001` diagnostic. For suppression options, see [ASPIREDURABLETASK001](/diagnostics/aspiredurabletask001/).
:::
-The `Aspire.Hosting.Azure.Functions` package includes support for [Azure Durable Task Scheduler](https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler), which provides a managed backend for Durable Functions orchestrations. Use `AddDurableTaskScheduler` to add a scheduler resource and `AddTaskHub` to associate a task hub with it.
+The `Aspire.Hosting.Azure.Functions` package includes support for [Azure Durable Task Scheduler](https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler), which provides a managed backend for Durable Functions orchestrations. Use to add a scheduler resource and to associate a task hub with it.
### Add a Durable Task scheduler and task hub
@@ -404,7 +405,7 @@ await functions.withReference(taskHub);
In the preceding example:
- `AddDurableTaskScheduler` (or `addDurableTaskScheduler`) adds a `DurableTaskSchedulerResource` to the app model.
-- `RunAsEmulator` (or `runAsEmulator`) configures the scheduler to use the local Durable Task emulator for development and testing.
+- configures the scheduler to use the local Durable Task emulator for development and testing.
- `AddTaskHub` (or `addTaskHub`) creates a `DurableTaskHubResource` associated with the scheduler.
- `WithReference(taskHub)` (or `withReference(taskHub)`) injects the task hub connection information into the Azure Functions project.
@@ -418,7 +419,7 @@ When using `RunAsEmulator()`, Aspire starts a local container running the DTS em
### Use an existing scheduler
-To connect to an already-deployed Durable Task Scheduler instance instead of provisioning a new one, use `RunAsExisting`. The overload accepts either a plain `string` connection string or an `IResourceBuilder` for securely supplying the value at runtime:
+To connect to an already-deployed Durable Task Scheduler instance instead of provisioning a new one, use . The overload accepts either a plain `string` connection string or an `IResourceBuilder` for securely supplying the value at runtime:
```csharp title="AppHost.cs"
#pragma warning disable ASPIREDURABLETASK001
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-key-vault/azure-key-vault-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-key-vault/azure-key-vault-host.mdx
index 8cb405db4..a912ce35f 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-key-vault/azure-key-vault-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-key-vault/azure-key-vault-host.mdx
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import keyVaultIcon from '@assets/icons/azure-keyvault-icon.png';
+import ApiReference from '@components/ApiReference.astro';
-The `WithReference` (or `withReference`) method configures a connection in the consuming project named after the referenced Key Vault resource.
+The method configures a connection in the consuming project named after the referenced Key Vault resource.
- When you call `AddAzureKeyVault` (or `addAzureKeyVault`), it implicitly calls
- `AddAzureProvisioning`, which adds support for generating Azure resources
+ When you call , it implicitly calls
+ , which adds support for generating Azure resources
dynamically during app startup. The app must configure the appropriate
subscription and location. For more information, see [Local provisioning:
Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -127,7 +128,7 @@ The `WithReference` (or `withReference`) method configures a connection in the c
## Connect to an existing Azure Key Vault instance
-You might have an existing Azure Key Vault instance that you want to connect to. Chain a call to `AsExisting` (or `asExisting`) to annotate that your resource already exists in Azure:
+You might have an existing Azure Key Vault instance that you want to connect to. Chain a call to to annotate that your resource already exists in Azure:
@@ -218,7 +219,7 @@ await builder.build().run();
-To clear the default role assignments and configure only specific roles, call `ClearDefaultRoleAssignments` (or `clearDefaultRoleAssignments`) before adding the roles you need.
+To clear the default role assignments and configure only specific roles, call before adding the roles you need.
## Secret references
@@ -226,7 +227,7 @@ You can reference secrets stored in an Azure Key Vault directly from your AppHos
### Add a secret to Key Vault
-To add a secret to the Key Vault resource from the AppHost, call `AddSecret` (or `addSecret`) providing a name and a parameter:
+To add a secret to the Key Vault resource from the AppHost, call providing a name and a parameter:
@@ -264,7 +265,7 @@ await builder.build().run();
### Reference an existing secret
-To reference an existing secret in the vault and pass it to a consuming resource, use `GetSecret` (or `getSecret`):
+To reference an existing secret in the vault and pass it to a consuming resource, use :
@@ -371,7 +372,7 @@ The generated Bicep is a starting point and is influenced by changes to the prov
## Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the `ConfigureInfrastructure` (or `configureInfrastructure`) API:
+All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the API:
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 f906a7c12..252f53e3b 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
@@ -8,6 +8,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import logAnalyticsIcon from '@assets/icons/azure-loganalytics-icon.png';
+import ApiReference from '@components/ApiReference.astro';
:
@@ -112,7 +113,7 @@ The preceding code adds an Azure Log Analytics workspace resource named `log-ana
When you call `AddAzureLogAnalyticsWorkspace` (or
`addAzureLogAnalyticsWorkspace`), it implicitly calls
- `AddAzureProvisioning`—which adds support for generating Azure resources
+ —which adds support for generating Azure resources
dynamically during app startup. The app must configure the appropriate
subscription and location. For more information, see [Local provisioning:
Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -207,7 +208,7 @@ The generated Bicep is a starting point and is influenced by changes to the prov
### Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the `ConfigureInfrastructure` API. For example, you can configure the SKU, retention period, and more. The following example demonstrates how to customize the Azure Log Analytics workspace:
+All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the API. For example, you can configure the SKU, retention period, and more. The following example demonstrates how to customize the Azure Log Analytics workspace:
```csharp title="AppHost.cs"
var builder = DistributedApplication.CreateBuilder(args);
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-openai/azure-openai-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-openai/azure-openai-host.mdx
index f235259af..510ae0d57 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-openai/azure-openai-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-openai/azure-openai-host.mdx
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import openaiIcon from '@assets/icons/azure-openai-icon.png';
+import ApiReference from '@components/ApiReference.astro';
-1. Calling `AddAzureOpenAI` (or `addAzureOpenAI`) creates an `AzureOpenAIResource` that models the Azure Cognitive Services account. It implicitly calls `AddAzureProvisioning`, which adds support for generating Azure resources dynamically during app startup.
+1. Calling creates an `AzureOpenAIResource` that models the Azure Cognitive Services account. It implicitly calls , which adds support for generating Azure resources dynamically during app startup.
-1. Calling `AddDeployment` (or `addDeployment`) creates an `AzureOpenAIDeploymentResource` child that represents a model deployment on the account. Specify the deployment name, model name, and model version. See [Azure OpenAI model versions](https://learn.microsoft.com/azure/ai-services/openai/concepts/models) for available models and versions.
+1. Calling creates an `AzureOpenAIDeploymentResource` child that represents a model deployment on the account. Specify the deployment name, model name, and model version. See [Azure OpenAI model versions](https://learn.microsoft.com/azure/ai-services/openai/concepts/models) for available models and versions.
1. The AppHost reference call configures a connection in the consuming project named after the referenced deployment resource, such as `chat` in the preceding example.
@@ -230,11 +231,11 @@ The available `AzureOpenAIRole` values are:
| Role | Description |
| ---- | ----------- |
-| `CognitiveServicesOpenAIUser` | Read access to models, deployments, and completions. Default when using `WithReference`. |
+| `CognitiveServicesOpenAIUser` | Read access to models, deployments, and completions. Default when using . |
| `CognitiveServicesOpenAIContributor` | Create and delete deployments in addition to user permissions. |
| `CognitiveServicesUser` | Broader Cognitive Services access. |
-To remove the default automatic role assignments and manage them entirely yourself, call `ClearDefaultRoleAssignments` (or `clearDefaultRoleAssignments`) on the Azure OpenAI resource:
+To remove the default automatic role assignments and manage them entirely yourself, call on the Azure OpenAI resource:
@@ -257,7 +258,7 @@ await openai.clearDefaultRoleAssignments();
## Connect to an existing Azure OpenAI service
-You might have an already-deployed Azure OpenAI account in your Azure subscription that you want to connect to. Use `AsExisting` (or `asExisting`) to point the resource at an existing account instead of provisioning a new one:
+You might have an already-deployed Azure OpenAI account in your Azure subscription that you want to connect to. Use to point the resource at an existing account instead of provisioning a new one:
@@ -385,7 +386,7 @@ The generated Bicep is a starting point and is influenced by changes to the prov
## Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of `AzureProvisioningResource`. This enables customization of the generated Bicep by providing a fluent API to configure Azure resources using the `ConfigureInfrastructure` API:
+All Aspire Azure resources are subclasses of `AzureProvisioningResource`. This enables customization of the generated Bicep by providing a fluent API to configure Azure resources using the API:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-postgresql/azure-postgresql-connect.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-postgresql/azure-postgresql-connect.mdx
index f75a57eca..e0c94a636 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-postgresql/azure-postgresql-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-postgresql/azure-postgresql-connect.mdx
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import postgresqlIcon from '@assets/icons/azure-postgresql-icon.png';
+import ApiReference from '@components/ApiReference.astro';
- If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost. See the [AppHost reference](/get-started/app-host/) for details on `WithEnvironment` and related APIs.
+ If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost. See the [AppHost reference](/get-started/app-host/) for details on and related APIs.
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-postgresql/azure-postgresql-get-started.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-postgresql/azure-postgresql-get-started.mdx
index 307561b7c..9447227a1 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-postgresql/azure-postgresql-get-started.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-postgresql/azure-postgresql-get-started.mdx
@@ -6,6 +6,7 @@ description: "Use the Aspire Azure Database for PostgreSQL hosting and client in
import { Image } from 'astro:assets';
import { LinkButton, Steps } from '@astrojs/starlight/components';
import postgresqlIcon from '@assets/icons/azure-postgresql-icon.png';
+import ApiReference from '@components/ApiReference.astro';
to run a local PostgreSQL container with auto-generated credentials instead of provisioning an Azure resource during development.
- **Consistent connection info across languages.** Once you reference the database from a consuming app, Aspire injects connection properties as environment variables in a predictable format that works from C#, TypeScript, Python, Go, or any other language.
- **Built-in health checks.** The hosting integration automatically registers a health check so the dashboard and your orchestrator can tell when the server is ready.
- **Dashboard observability.** The database resource shows up in the Aspire dashboard with logs, status, and telemetry alongside your other services.
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 81a2a9f68..21b52b343 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
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import postgresqlIcon from '@assets/icons/azure-postgresql-icon.png';
+import ApiReference from '@components/ApiReference.astro';
-The preceding code adds an Azure PostgreSQL flexible server resource named `postgres` with a database named `postgresdb`. The `withReference` / `WithReference` call injects the connection information into the consuming project.
+The preceding code adds an Azure PostgreSQL flexible server resource named `postgres` with a database named `postgresdb`. The call injects the connection information into the consuming project.
- When you call `AddAzurePostgresFlexibleServer` /
+ When you call /
`addAzurePostgresFlexibleServer`, it implicitly calls
- `AddAzureProvisioning`—which adds support for generating Azure resources
+ —which adds support for generating Azure resources
dynamically during app startup. The app must configure the appropriate
subscription and location. For more information, see [Local provisioning:
Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -241,7 +242,7 @@ await builder.addNodeApp("api", "./api", "index.js")
-When `RunAsContainer` / `runAsContainer` is called, Aspire uses the [`docker.io/library/postgres`](https://hub.docker.com/_/postgres) container image and generates credentials automatically. The same consuming app code and environment variable names work in both local-container and Azure modes.
+When is called, Aspire uses the [`docker.io/library/postgres`](https://hub.docker.com/_/postgres) container image and generates credentials automatically. The same consuming app code and environment variable names work in both local-container and Azure modes.
The `RunAsContainer` / `runAsContainer` API exposes an optional delegate
@@ -254,13 +255,13 @@ When `RunAsContainer` / `runAsContainer` is called, Aspire uses the [`docker.io/
### Cross-reference: local-container vs Azure PostgreSQL
-If you are developing against a local container and want to switch to Azure PostgreSQL for staging or production, change `AddPostgres` to `AddAzurePostgresFlexibleServer` in the AppHost. The connection information injected into consuming apps uses the same environment variable names, so no application code changes are required.
+If you are developing against a local container and want to switch to Azure PostgreSQL for staging or production, change to `AddAzurePostgresFlexibleServer` in the AppHost. The connection information injected into consuming apps uses the same environment variable names, so no application code changes are required.
For a comparison of the two hosting integrations, see [PostgreSQL Hosting integration](/integrations/databases/postgres/postgres-host/).
## Connect to an existing Azure PostgreSQL flexible server
-If you have an existing Azure Database for PostgreSQL Flexible Server that you want to connect to rather than provisioning a new one, use `AsExisting` / `asExisting`:
+If you have an existing Azure Database for PostgreSQL Flexible Server that you want to connect to rather than provisioning a new one, use :
@@ -307,7 +308,7 @@ For more information on treating Azure resources as existing, see [Use existing
## Configure password authentication
-By default, the Azure PostgreSQL flexible server is configured to use [Microsoft Entra ID](https://learn.microsoft.com/azure/postgresql/flexible-server/concepts-azure-ad-authentication) authentication — no username or password is stored in your app configuration. If you need password authentication (for example, to connect with a legacy client that doesn't support Entra tokens), call `WithPasswordAuthentication` / `withPasswordAuthentication`:
+By default, the Azure PostgreSQL flexible server is configured to use [Microsoft Entra ID](https://learn.microsoft.com/azure/postgresql/flexible-server/concepts-azure-ad-authentication) authentication — no username or password is stored in your app configuration. If you need password authentication (for example, to connect with a legacy client that doesn't support Entra tokens), call :
@@ -450,7 +451,7 @@ The generated Bicep is a starting point and is influenced by changes to the prov
## Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the `ConfigureInfrastructure` API:
+All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the API:
```csharp title="AppHost.cs"
var builder = DistributedApplication.CreateBuilder(args);
@@ -500,7 +501,7 @@ There are many more configuration options available to customize the PostgreSQL
## Database creation after initial deployment
-When you call `AddDatabase` / `addDatabase` on an Azure PostgreSQL resource, Aspire provisions the database during the **first** deployment. On subsequent deployments with `azd up`, only the server-level Bicep is redeployed — databases that already exist are not recreated or deleted.
+When you call on an Azure PostgreSQL resource, Aspire provisions the database during the **first** deployment. On subsequent deployments with `azd up`, only the server-level Bicep is redeployed — databases that already exist are not recreated or deleted.
If a database does not appear after redeployment, verify that the
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-service-bus/azure-service-bus-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-service-bus/azure-service-bus-host.mdx
index 81b0a1772..27560a583 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-service-bus/azure-service-bus-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-service-bus/azure-service-bus-host.mdx
@@ -8,6 +8,7 @@ import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import ContainerImages from '@components/ContainerImages.astro';
import LearnMore from '@components/LearnMore.astro';
import serviceBusIcon from '@assets/icons/azure-servicebus-icon.png';
+import ApiReference from '@components/ApiReference.astro';
- When you call `AddAzureServiceBus` (C#) or `addAzureServiceBus` (TypeScript),
- it implicitly calls `AddAzureProvisioning`—which adds support for generating
+ When you call ,
+ it implicitly calls —which adds support for generating
Azure resources dynamically during app startup. The app must configure the
appropriate subscription and location. For more information, see [Local
provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -129,7 +130,7 @@ await builder.build().run();
## Connect to an existing Azure Service Bus namespace
-If you have an existing Azure Service Bus namespace, chain a call to `AsExisting` (C#) or `asExisting` (TypeScript) to connect to it instead of provisioning a new one:
+If you have an existing Azure Service Bus namespace, chain a call to to connect to it instead of provisioning a new one:
@@ -185,7 +186,7 @@ For more information on treating Azure resources as existing resources, see [Use
## Add Azure Service Bus queue
-To add a queue to an Azure Service Bus namespace, call `AddServiceBusQueue` (C#) or `addServiceBusQueue` (TypeScript) on the Service Bus resource builder:
+To add a queue to an Azure Service Bus namespace, call on the Service Bus resource builder:
@@ -227,7 +228,7 @@ This expresses an explicit parent-child relationship between the `messaging` Ser
## Add Azure Service Bus topic
-To add a topic, call `AddServiceBusTopic` (C#) or `addServiceBusTopic` (TypeScript) on the Service Bus resource builder:
+To add a topic, call on the Service Bus resource builder:
@@ -263,7 +264,7 @@ The topic is created in the namespace that the `AzureServiceBusResource` represe
## Add Azure Service Bus subscription
-To add a subscription for a topic, call `AddServiceBusSubscription` (C#) or `addServiceBusSubscription` (TypeScript) on the topic resource builder:
+To add a subscription for a topic, call on the topic resource builder:
@@ -343,7 +344,7 @@ builder.Build().Run();
## Add Azure Service Bus emulator resource
-For local development, Aspire can run the [Azure Service Bus Emulator](https://learn.microsoft.com/azure/service-bus-messaging/overview-emulator) as a container. Chain a call to `RunAsEmulator` (C#) or `runAsEmulator` (TypeScript) on the Service Bus resource builder:
+For local development, Aspire can run the [Azure Service Bus Emulator](https://learn.microsoft.com/azure/service-bus-messaging/overview-emulator) as a container. Chain a call to on the Service Bus resource builder:
@@ -388,7 +389,7 @@ By default, the Service Bus emulator container exposes the following endpoints:
### Configure the emulator host port
-By default, the host port is assigned dynamically. To pin it to a specific port, pass the `configureContainer` callback and call `withHostPort`:
+By default, the host port is assigned dynamically. To pin it to a specific port, pass the `configureContainer` callback and call :
@@ -435,7 +436,7 @@ The preceding code maps the `emulator` endpoint to host port `7777`:
### Configure the emulator with a custom JSON file
-The Service Bus emulator generates its configuration automatically from the resources you've added. To provide a fully custom configuration file instead, call `WithConfigurationFile` (C#) or `withConfigurationFile` (TypeScript):
+The Service Bus emulator generates its configuration automatically from the resources you've added. To provide a fully custom configuration file instead, call :
@@ -569,7 +570,7 @@ For more information on the assigned role, see [Azure Service Bus Data Owner](ht
### Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables customization of the generated Bicep using the fluent `ConfigureInfrastructure` API. For example, you can configure the SKU, location, tags, and more:
+All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables customization of the generated Bicep using the fluent API. For example, you can configure the SKU, location, tags, and more:
```csharp title="AppHost.cs"
var builder = DistributedApplication.CreateBuilder(args);
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-signalr/azure-signalr-connect.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-signalr/azure-signalr-connect.mdx
index 808171ee5..e71eb0698 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-signalr/azure-signalr-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-signalr/azure-signalr-connect.mdx
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import signalrIcon from '@assets/icons/azure-signalr-icon.png';
+import ApiReference from '@components/ApiReference.astro';
` types are hosted) and **clients** (browser or mobile apps using the SignalR client). The architecture differs from a direct database connection: the server never receives connections from clients directly — Azure SignalR Service routes all traffic.
:::note
-Aspire integrates at the **hub server** level, not the end-client level. The `WithReference` call injects the service endpoint into the server-side project so it can connect to Azure SignalR Service. End clients (browser apps, mobile apps) connect to hubs through normal SignalR client negotiation, not through Aspire.
+Aspire integrates at the **hub server** level, not the end-client level. The call injects the service endpoint into the server-side project so it can connect to Azure SignalR Service. End clients (browser apps, mobile apps) connect to hubs through normal SignalR client negotiation, not through Aspire.
:::
## Connection properties
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-signalr/azure-signalr-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-signalr/azure-signalr-host.mdx
index d43b3c2aa..845a2be40 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-signalr/azure-signalr-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-signalr/azure-signalr-host.mdx
@@ -8,6 +8,7 @@ import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import ContainerImages from '@components/ContainerImages.astro';
import LearnMore from '@components/LearnMore.astro';
import signalrIcon from '@assets/icons/azure-signalr-icon.png';
+import ApiReference from '@components/ApiReference.astro';
- When you call `AddAzureSignalR` (or `addAzureSignalR`), it implicitly calls
- `AddAzureProvisioning` — which adds support for generating Azure resources
+ When you call , it implicitly calls
+ — which adds support for generating Azure resources
dynamically during app startup. The app must configure the appropriate
subscription and location. For more information, see [Local provisioning:
Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -183,7 +184,7 @@ await builder.build().run();
`AzureSignalRServiceMode` is not available as a TypeScript parameter. Full
service mode configuration requires modifying the Bicep object model through
- `configureInfrastructure`. See [Customize provisioning
+ . See [Customize provisioning
infrastructure](#customize-provisioning-infrastructure) for an example.
@@ -198,7 +199,7 @@ The Azure SignalR Service emulator only works in _Serverless_ mode. The `AddName
The Azure SignalR Service emulator allows local development and testing without requiring an Azure subscription. The emulator only supports [_Serverless_ mode](https://learn.microsoft.com/azure/azure-signalr/concept-service-mode#serverless-mode).
-To use the emulator, chain a call to `RunAsEmulator` (or `runAsEmulator`):
+To use the emulator, chain a call to :
@@ -243,7 +244,7 @@ The `RunAsEmulator` call configures the Azure SignalR Service resource to use th
## Connect to an existing Azure SignalR instance
-You might have an existing Azure SignalR Service that you want to connect to. Use `AsExisting` (or `asExisting`) to annotate that your `AzureSignalRResource` is an existing resource:
+You might have an existing Azure SignalR Service that you want to connect to. Use to annotate that your `AzureSignalRResource` is an existing resource:
@@ -413,7 +414,7 @@ For more information, see [Azure.Provisioning customization](/integrations/cloud
## Connection properties
-When you reference an Azure SignalR Service resource using `WithReference` (or `withReference`), the following connection property is made available to the consuming project:
+When you reference an Azure SignalR Service resource using , the following connection property is made available to the consuming project:
| Property Name | Description |
| ------------- | ----------- |
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-sql-database/azure-sql-database-connect.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-sql-database/azure-sql-database-connect.mdx
index e86722002..2673310ef 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-sql-database/azure-sql-database-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-sql-database/azure-sql-database-connect.mdx
@@ -8,6 +8,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import sqlServerIcon from '@assets/icons/azure-sqlserver-icon.png';
+import ApiReference from '@components/ApiReference.astro';
Azure SQL Database uses Azure Active Directory authentication (managed identity)
when deployed to Azure — no username or password is injected. When you use
- `RunAsContainer` for local development, the connection string includes SQL
+ for local development, the connection string includes SQL
authentication credentials instead. For JDBC connections, add the appropriate
authentication property such as `authentication=ActiveDirectoryDefault` or
`authentication=ActiveDirectoryManagedIdentity`.
@@ -370,5 +371,5 @@ const pool = await sql.connect(process.env.DATABASE_URI!);
- If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using `WithEnvironment` (C#) or `withEnvironment` (TypeScript).
+ If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using .
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-sql-database/azure-sql-database-get-started.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-sql-database/azure-sql-database-get-started.mdx
index 93af903c1..7948472d6 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-sql-database/azure-sql-database-get-started.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-sql-database/azure-sql-database-get-started.mdx
@@ -6,6 +6,7 @@ description: Understand why you use the Aspire Azure SQL Database integrations a
import { Image } from 'astro:assets';
import { LinkButton, Steps } from '@astrojs/starlight/components';
import sqlServerIcon from '@assets/icons/azure-sqlserver-icon.png';
+import ApiReference from '@components/ApiReference.astro';
to run SQL Server in a local container during development and testing, with the same connection story as the deployed Azure SQL Database.
- **Consistent connection info across languages.** Once you reference the database from a consuming app, Aspire injects connection properties as environment variables in a predictable format that works from C#, TypeScript, Python, Go, or any other language.
- **Managed identity and role-based access.** When deployed, Aspire automatically runs a deployment script that grants your app's managed identity access to the database — no passwords to rotate.
- **Built-in health checks.** The hosting integration automatically registers a health check so the dashboard and your orchestrator can tell when the server is ready.
- **Dashboard observability.** The database resource shows up in the Aspire dashboard with logs, status, and telemetry alongside your other services.
- **A first-class C# client integration.** C# apps can use the `Aspire.Microsoft.Data.SqlClient` package for dependency injection, health checks, and OpenTelemetry, all wired up from the same resource name.
-- **Infrastructure as code through Bicep.** Aspire generates Bicep for the Azure SQL Server resource automatically, and you can customize it through the `ConfigureInfrastructure` API.
+- **Infrastructure as code through Bicep.** Aspire generates Bicep for the Azure SQL Server resource automatically, and you can customize it through the API.
## How the pieces fit together
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 43dffaed5..417a9f6a0 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
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import sqlServerIcon from '@assets/icons/azure-sqlserver-icon.png';
+import ApiReference from '@components/ApiReference.astro';
-1. The `AddAzureSqlServer` (or `addAzureSqlServer`) call models an Azure SQL Server that is provisioned in Azure when you publish your app.
+1. The call models an Azure SQL Server that is provisioned in Azure when you publish your app.
-1. Calling `AddDatabase` (or `addDatabase`) on the returned resource builder models a named database within that server. The `WithReference` (or `withReference`) call configures a named connection in the consuming project that matches the database resource name.
+1. Calling on the returned resource builder models a named database within that server. The call configures a named connection in the consuming project that matches the database resource name.
-1. When you call `AddAzureSqlServer`, it implicitly calls `AddAzureProvisioning` — which adds support for generating Azure resources dynamically during app startup. The app must configure the appropriate subscription and location.
+1. When you call `AddAzureSqlServer`, it implicitly calls — which adds support for generating Azure resources dynamically during app startup. The app must configure the appropriate subscription and location.
@@ -139,7 +140,7 @@ await builder.build().run();
## Run Azure SQL server resource as a container
-During local development and testing, you can run an Azure SQL server as a local SQL Server container instead of provisioning an actual Azure resource. Call `RunAsContainer` (or `runAsContainer`) to switch to a local container:
+During local development and testing, you can run an Azure SQL server as a local SQL Server container instead of provisioning an actual Azure resource. Call to switch to a local container:
@@ -192,7 +193,7 @@ When `RunAsContainer` is active, Aspire pulls a SQL Server container image and r
## Connect to an existing Azure SQL server
-You might have an existing Azure SQL Database service that you want to connect to. Chain a call to `AsExisting` (or `asExisting`) to annotate that your resource already exists in Azure:
+You might have an existing Azure SQL Database service that you want to connect to. Chain a call to to annotate that your resource already exists in Azure:
@@ -311,7 +312,7 @@ The generated Bicep is a starting point and is influenced by changes to the prov
### Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables customization of the generated Bicep by providing a fluent API to configure the Azure resources using the `ConfigureInfrastructure` API. For example, you can configure the `sku`, `version`, and more. The following example demonstrates how to customize the Azure SQL Database resource:
+All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables customization of the generated Bicep by providing a fluent API to configure the Azure resources using the API. For example, you can configure the `sku`, `version`, and more. The following example demonstrates how to customize the Azure SQL Database resource:
```csharp title="AppHost.cs"
var builder = DistributedApplication.CreateBuilder(args);
@@ -371,7 +372,7 @@ You can modify the default behavior in the following ways:
#### Disable the deployment script
-Call `ClearDefaultRoleAssignments` (or `clearDefaultRoleAssignments`) to disable the deployment script entirely:
+Call to disable the deployment script entirely:
@@ -408,7 +409,7 @@ await builder.build().run();
#### Specify a custom subnet
-Call `WithAdminDeploymentScriptSubnet` (or `withAdminDeploymentScriptSubnet`) to provide your own subnet for the deployment script container:
+Call to provide your own subnet for the deployment script container:
@@ -453,7 +454,7 @@ await builder.build().run();
#### Specify a custom storage account
-Call `WithAdminDeploymentScriptStorage` (or `withAdminDeploymentScriptStorage`) to provide your own storage account for the deployment script:
+Call to provide your own storage account for the deployment script:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-blobs/azure-storage-blobs-connect.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-blobs/azure-storage-blobs-connect.mdx
index 008742ae0..a2c298b96 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-blobs/azure-storage-blobs-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-blobs/azure-storage-blobs-connect.mdx
@@ -8,6 +8,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import storageIcon from '@assets/icons/azure-storagecontainer-icon.png';
+import ApiReference from '@components/ApiReference.astro';
) exposes the following connection properties:
| Property Name | Description |
| ------------------ | ----------- |
@@ -43,7 +44,7 @@ Uri: https://mystorageaccount.blob.core.windows.net/
### Blob container resource
-The blob container resource (`AddBlobContainer` / `addBlobContainer`) inherits all properties from its parent blob storage resource and adds:
+The blob container resource ( ) inherits all properties from its parent blob storage resource and adds:
| Property Name | Description |
| ------------------- | ----------- |
@@ -363,5 +364,5 @@ const client = BlobServiceClient.fromConnectionString(connStr);
- If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using `WithEnvironment`. See [Customize Azure resources](/integrations/cloud/azure/customize-resources/) for more information.
+ If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using . See [Customize Azure resources](/integrations/cloud/azure/customize-resources/) for more information.
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-blobs/azure-storage-blobs-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-blobs/azure-storage-blobs-host.mdx
index fce6b33fd..b30699235 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-blobs/azure-storage-blobs-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-blobs/azure-storage-blobs-host.mdx
@@ -10,6 +10,7 @@ import LearnMore from '@components/LearnMore.astro';
import InstallPackage from '@components/InstallPackage.astro';
import storageIcon from '@assets/icons/azure-storagecontainer-icon.png';
import storageExplorerImage from '@assets/integrations/cloud/azure/storage/azure-storage-explorer.png';
+import ApiReference from '@components/ApiReference.astro';
-When you call `AddAzureStorage` (or `addAzureStorage`), it implicitly calls `AddAzureProvisioning`—which adds support for generating Azure resources dynamically during app startup. The app must configure the appropriate subscription and location. For more information, see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
+When you call , it implicitly calls —which adds support for generating Azure resources dynamically during app startup. The app must configure the appropriate subscription and location. For more information, see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -112,7 +113,7 @@ When you call `AddAzureStorage` (or `addAzureStorage`), it implicitly calls `Add
## Add blob resource
-After creating an Azure Storage resource, you can add a blob service resource to it using `AddBlobs` (or `addBlobs`):
+After creating an Azure Storage resource, you can add a blob service resource to it using :
@@ -157,7 +158,7 @@ The preceding code:
## Add blob container resource
-You can add a specific named blob container resource directly using `AddBlobContainer` (or `addBlobContainer`). This is useful when your app needs access to a specific container by name:
+You can add a specific named blob container resource directly using . This is useful when your app needs access to a specific container by name:
@@ -198,7 +199,7 @@ The `blobContainerName` option (or `options.blobContainerName` in TypeScript) se
## Configure Azurite emulator
-During local development, you can configure the Azure Storage resource to use [Azurite](https://learn.microsoft.com/azure/storage/common/storage-use-azurite) — the open-source Azure Storage emulator — instead of a real Azure subscription. Call `RunAsEmulator` (or `runAsEmulator`) on the storage resource:
+During local development, you can configure the Azure Storage resource to use [Azurite](https://learn.microsoft.com/azure/storage/common/storage-use-azurite) — the open-source Azure Storage emulator — instead of a real Azure subscription. Call on the storage resource:
@@ -291,7 +292,7 @@ await builder.build().run();
### Configure Azurite container with persistent lifetime
-To configure the Azurite container with a persistent lifetime, call `WithLifetime` (or `withLifetime`) with `ContainerLifetime.Persistent`:
+To configure the Azurite container with a persistent lifetime, call with `ContainerLifetime.Persistent`:
@@ -329,7 +330,7 @@ await builder.build().run();
### Configure Azurite container with data volume
-To add a data volume to the Azurite container, call `WithDataVolume` (or `withDataVolume`) on the emulator resource:
+To add a data volume to the Azurite container, call on the emulator resource:
@@ -369,7 +370,7 @@ The data volume is used to persist Azurite data outside the lifecycle of its con
### Configure Azurite container with data bind mount
-To add a data bind mount to the Azurite container, call `WithDataBindMount` (or `withDataBindMount`) on the emulator resource:
+To add a data bind mount to the Azurite container, call on the emulator resource:
@@ -413,7 +414,7 @@ Data bind mounts rely on the host machine's filesystem to persist the Azurite da
## Connect to an existing Azure Storage account
-You might have an existing Azure Storage account that you want to connect to instead of provisioning a new one. Chain a call to `AsExisting` (or `asExisting`) on the storage resource:
+You might have an existing Azure Storage account that you want to connect to instead of provisioning a new one. Chain a call to on the storage resource:
@@ -457,7 +458,7 @@ await builder.build().run();
:::caution
-When you call `RunAsExisting`, `PublishAsExisting`, or `AsExisting` to work with resources already present in your Azure subscription, you must add certain configuration values to your AppHost so that Aspire can locate them. The necessary configuration values include **SubscriptionId**, **AllowResourceGroupCreation**, **ResourceGroup**, and **Location**. If you don't set them, "Missing configuration" errors appear in the Aspire dashboard. For more information, see [Use existing Azure resources](/integrations/cloud/azure/overview/#use-existing-azure-resources).
+When you call , , or `AsExisting` to work with resources already present in your Azure subscription, you must add certain configuration values to your AppHost so that Aspire can locate them. The necessary configuration values include **SubscriptionId**, **AllowResourceGroupCreation**, **ResourceGroup**, and **Location**. If you don't set them, "Missing configuration" errors appear in the Aspire dashboard. For more information, see [Use existing Azure resources](/integrations/cloud/azure/overview/#use-existing-azure-resources).
:::
## Connect to storage resources
@@ -596,7 +597,7 @@ The generated Bicep is a starting point and is influenced by changes to the prov
### Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the `ConfigureInfrastructure` (or `configureInfrastructure`) API. For example, you can configure the `sku`, `accessTier`, and more:
+All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the API. For example, you can configure the `sku`, `accessTier`, and more:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-datalake.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-datalake.mdx
index e82b72e0f..b734ee45d 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-datalake.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-datalake.mdx
@@ -8,6 +8,7 @@ import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import dataLakeIcon from '@assets/icons/azure-datalake-icon.png';
+import ApiReference from '@components/ApiReference.astro';
on an Azure Storage resource builder to add a Data Lake resource:
@@ -120,7 +121,7 @@ Azure Data Lake Storage does **not** support the Azure Storage emulator. You mus
### Add Azure Data Lake file system resource
-You can also add a Data Lake file system resource directly from the storage resource using `AddDataLakeFileSystem` (or `addDataLakeFileSystem`):
+You can also add a Data Lake file system resource directly from the storage resource using :
@@ -171,7 +172,7 @@ Both `AddDataLake` and `AddDataLakeFileSystem` are called on the storage resourc
### Customize provisioning infrastructure
-The Data Lake resource is part of the Azure Storage resource, which is a subclass of `AzureProvisioningResource`. You can customize the generated Bicep using the `ConfigureInfrastructure` (or `configureInfrastructure`) API on the storage resource. For example, you can configure the storage SKU, access tier, and other properties:
+The Data Lake resource is part of the Azure Storage resource, which is a subclass of `AzureProvisioningResource`. You can customize the generated Bicep using the API on the storage resource. For example, you can configure the storage SKU, access tier, and other properties:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-queues/azure-storage-queues-connect.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-queues/azure-storage-queues-connect.mdx
index 208008a60..6155417f6 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-queues/azure-storage-queues-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-queues/azure-storage-queues-connect.mdx
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import queueIcon from '@assets/icons/azure-storagequeue-icon.png';
+import ApiReference from '@components/ApiReference.astro';
-If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using `WithEnvironment`. See [Set up Azure Queue Storage in the AppHost](../azure-storage-queues-host/) for details.
+If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using . See [Set up Azure Queue Storage in the AppHost](../azure-storage-queues-host/) for details.
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-queues/azure-storage-queues-get-started.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-queues/azure-storage-queues-get-started.mdx
index f8dc5c04f..a4224007a 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-queues/azure-storage-queues-get-started.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-queues/azure-storage-queues-get-started.mdx
@@ -6,6 +6,7 @@ description: Understand why you use the Aspire Azure Queue Storage integrations
import { Image } from 'astro:assets';
import { LinkButton, Steps } from '@astrojs/starlight/components';
import queueIcon from '@assets/icons/azure-storagequeue-icon.png';
+import ApiReference from '@components/ApiReference.astro';
in your AppHost.
## How the pieces fit together
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-queues/azure-storage-queues-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-queues/azure-storage-queues-host.mdx
index 0c01b6e94..57c3468b0 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-queues/azure-storage-queues-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-queues/azure-storage-queues-host.mdx
@@ -10,6 +10,7 @@ import LearnMore from '@components/LearnMore.astro';
import InstallPackage from '@components/InstallPackage.astro';
import queueIcon from '@assets/icons/azure-storagequeue-icon.png';
import storageExplorerImage from '@assets/integrations/cloud/azure/storage/azure-storage-explorer.png';
+import ApiReference from '@components/ApiReference.astro';
-When you call `AddAzureStorage` (or `addAzureStorage`), it implicitly calls `AddAzureProvisioning`—which adds support for generating Azure resources dynamically during app startup. The app must configure the appropriate subscription and location. For more information, see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
+When you call , it implicitly calls —which adds support for generating Azure resources dynamically during app startup. The app must configure the appropriate subscription and location. For more information, see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -128,7 +129,7 @@ When you reference the queue resource from the AppHost, Aspire makes several con
## Run as Azurite emulator
-For local development, Aspire can run the [Azurite](https://learn.microsoft.com/azure/storage/common/storage-use-azurite) emulator in a container to avoid requiring an Azure subscription. Call `RunAsEmulator` (C#) or `runAsEmulator` (TypeScript) on the storage resource:
+For local development, Aspire can run the [Azurite](https://learn.microsoft.com/azure/storage/common/storage-use-azurite) emulator in a container to avoid requiring an Azure subscription. Call on the storage resource:
@@ -239,7 +240,7 @@ The resulting port mappings (`container:host`) are:
## Configure Azurite container with persistent lifetime
-To keep the Azurite container alive across AppHost restarts, call `WithLifetime` with `ContainerLifetime.Persistent`:
+To keep the Azurite container alive across AppHost restarts, call with `ContainerLifetime.Persistent`:
@@ -325,7 +326,7 @@ The data volume is mounted at the `/data` path in the Azurite container. When a
## Configure Azurite container with data bind mount
-To use a bind mount instead of a volume, call `WithDataBindMount`:
+To use a bind mount instead of a volume, call :
@@ -373,7 +374,7 @@ Data bind mounts rely on the host machine's filesystem to persist Azurite data a
## Connect to an existing Azure Storage account
-You might have an existing Azure Storage account that you want to connect to. Call `AsExisting` (or `asExisting`) to annotate the resource as already provisioned:
+You might have an existing Azure Storage account that you want to connect to. Call to annotate the resource as already provisioned:
@@ -420,7 +421,7 @@ await builder.build().run();
-When you call `RunAsExisting`, `PublishAsExisting`, or `AsExisting` to work with resources that are already present in your Azure subscription, you must add certain configuration values to your AppHost so that Aspire can locate them. The necessary configuration values include **SubscriptionId**, **AllowResourceGroupCreation**, **ResourceGroup**, and **Location**. If you don't set them, "Missing configuration" errors appear in the Aspire dashboard. For more information about how to set them, see [Use existing Azure resources](/integrations/cloud/azure/overview/#use-existing-azure-resources).
+When you call , , or `AsExisting` to work with resources that are already present in your Azure subscription, you must add certain configuration values to your AppHost so that Aspire can locate them. The necessary configuration values include **SubscriptionId**, **AllowResourceGroupCreation**, **ResourceGroup**, and **Location**. If you don't set them, "Missing configuration" errors appear in the Aspire dashboard. For more information about how to set them, see [Use existing Azure resources](/integrations/cloud/azure/overview/#use-existing-azure-resources).
## Connect to storage resources from Azure Storage Explorer
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-tables/azure-storage-tables-connect.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-tables/azure-storage-tables-connect.mdx
index 75ef9023f..d8672a7c9 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-tables/azure-storage-tables-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-tables/azure-storage-tables-connect.mdx
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import tableIcon from '@assets/icons/azure-table-icon.png';
+import ApiReference from '@components/ApiReference.astro';
- If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using `WithEnvironment`. See the [AppHost reference](/get-started/app-host/) for details.
+ If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using . See the [AppHost reference](/get-started/app-host/) for details.
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-tables/azure-storage-tables-get-started.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-tables/azure-storage-tables-get-started.mdx
index 1e10b5bd6..fb0a2c3da 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-tables/azure-storage-tables-get-started.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-tables/azure-storage-tables-get-started.mdx
@@ -6,6 +6,7 @@ description: Understand why you use the Aspire Azure Table Storage integrations
import { Image } from 'astro:assets';
import { LinkButton, Steps } from '@astrojs/starlight/components';
import tableIcon from '@assets/icons/azure-table-icon.png';
+import ApiReference from '@components/ApiReference.astro';
implicitly enables , which generates Azure resources dynamically during app startup when you target a real Azure subscription.
- **Dashboard observability.** The storage resource shows up in the Aspire dashboard with logs, status, and telemetry alongside your other services.
- **A first-class C# client integration.** C# apps can use the `Aspire.Azure.Data.Tables` package for dependency injection, health checks, and OpenTelemetry, all wired up from the same resource name.
- **An emulator-to-cloud upgrade path.** The same AppHost model works in local emulator mode and against a real Azure Storage account — switch modes without changing consuming app code.
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-tables/azure-storage-tables-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-tables/azure-storage-tables-host.mdx
index f2ad3541f..7ec6e897c 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-tables/azure-storage-tables-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-storage-tables/azure-storage-tables-host.mdx
@@ -9,6 +9,7 @@ import ContainerImages from '@components/ContainerImages.astro';
import LearnMore from '@components/LearnMore.astro';
import tableIcon from '@assets/icons/azure-table-icon.png';
import storageExplorerImage from '@assets/integrations/cloud/azure/storage/azure-storage-explorer.png';
+import ApiReference from '@components/ApiReference.astro';
.
-1. The table storage resource is referenced from the consuming project with `WithReference` (or `withReference`), which injects connection properties as environment variables.
+1. The table storage resource is referenced from the consuming project with , which injects connection properties as environment variables.
-1. `WaitFor` (or `waitFor`) ensures the consuming project waits until the table storage resource is ready before starting.
+1. ensures the consuming project waits until the table storage resource is ready before starting.
-When you call `AddAzureStorage` (or `addAzureStorage`), it implicitly calls `AddAzureProvisioning` (or `addAzureProvisioning`) — which adds support for generating Azure resources dynamically during app startup. The app must configure the appropriate subscription and location. For more information, see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
+When you call , it implicitly calls — which adds support for generating Azure resources dynamically during app startup. The app must configure the appropriate subscription and location. For more information, see [Local provisioning: Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -133,7 +134,7 @@ When you reference an Azure Table Storage resource from the AppHost, Aspire inje
## Run as emulator (Azurite)
-For local development, configure the storage resource to use the [Azurite](https://learn.microsoft.com/azure/storage/common/storage-use-azurite) emulator instead of a real Azure Storage account. Call `RunAsEmulator` (or `runAsEmulator`) on the storage resource:
+For local development, configure the storage resource to use the [Azurite](https://learn.microsoft.com/azure/storage/common/storage-use-azurite) emulator instead of a real Azure Storage account. Call on the storage resource:
@@ -239,7 +240,7 @@ The preceding code configures the Azurite container ports as follows:
## Configure Azurite container with persistent lifetime
-To configure the Azurite container with a persistent lifetime so it survives app restarts, call `WithLifetime` (or `withLifetime`) with `ContainerLifetime.Persistent`:
+To configure the Azurite container with a persistent lifetime so it survives app restarts, call with `ContainerLifetime.Persistent`:
@@ -277,7 +278,7 @@ await builder.build().run();
## Configure Azurite container with data volume
-To persist Azurite data across container restarts with a data volume, call `WithDataVolume` (or `withDataVolume`) on the emulator resource:
+To persist Azurite data across container restarts with a data volume, call on the emulator resource:
@@ -317,7 +318,7 @@ The data volume is mounted at the `/data` path in the Azurite container and when
## Configure Azurite container with data bind mount
-To add a data bind mount to the Azurite container instead of a named volume, call `WithDataBindMount` (or `withDataBindMount`):
+To add a data bind mount to the Azurite container instead of a named volume, call :
@@ -389,7 +390,7 @@ For more information on using the Azure Storage Explorer, see [Get started with
## Connect to an existing Azure Storage account
-If you have an existing Azure Storage account, you can connect to it using the `AsExisting` (or `asExisting`) method instead of provisioning a new one:
+If you have an existing Azure Storage account, you can connect to it using the method instead of provisioning a new one:
@@ -435,7 +436,7 @@ await builder.build().run();
:::important
-When you call `RunAsExisting`, `PublishAsExisting`, or `AsExisting` methods to work with resources that are already present in your Azure subscription, you must add certain configuration values to your AppHost to ensure that Aspire can locate them. The necessary configuration values include **SubscriptionId**, **AllowResourceGroupCreation**, **ResourceGroup**, and **Location**. If you don't set them, "Missing configuration" errors appear in the Aspire dashboard. For more information, see [Use existing Azure resources](/integrations/cloud/azure/overview/#use-existing-azure-resources).
+When you call , , or `AsExisting` methods to work with resources that are already present in your Azure subscription, you must add certain configuration values to your AppHost to ensure that Aspire can locate them. The necessary configuration values include **SubscriptionId**, **AllowResourceGroupCreation**, **ResourceGroup**, and **Location**. If you don't set them, "Missing configuration" errors appear in the Aspire dashboard. For more information, see [Use existing Azure resources](/integrations/cloud/azure/overview/#use-existing-azure-resources).
:::
## Connection properties
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 8a080624a..19e6fe077 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
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import azureIcon from '@assets/icons/azure-icon.png';
+import ApiReference from '@components/ApiReference.astro';
When you call any of the Azure Virtual Network APIs, it implicitly calls
- `AddAzureProvisioning`—which adds support for generating Azure resources
+ —which adds support for generating Azure resources
dynamically during app startup. The app must configure the appropriate
subscription and location. For more information, see [Local provisioning:
Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -100,7 +101,7 @@ This updates your `aspire.config.json` with the Azure Network hosting integratio
### Add a virtual network
-To add a virtual network, call `AddAzureVirtualNetwork` (or `addAzureVirtualNetwork`) on the `builder` instance:
+To add a virtual network, call on the `builder` instance:
@@ -150,7 +151,7 @@ const vnet = await builder.addAzureVirtualNetwork('vnet', '10.1.0.0/16');
### Add subnets
-Call `AddSubnet` (or `addSubnet`) on the virtual network builder to add a subnet with a name and address prefix:
+Call on the virtual network builder to add a subnet with a name and address prefix:
@@ -175,7 +176,7 @@ You can add multiple subnets with different address ranges to a single virtual n
### Add NAT gateways
-A [NAT gateway](https://learn.microsoft.com/azure/nat-gateway/) provides deterministic outbound public IP addresses for subnet resources. Call `AddNatGateway` (or `addNatGateway`) to create a NAT gateway, then associate it with a subnet using `WithNatGateway` (or `withNatGateway`):
+A [NAT gateway](https://learn.microsoft.com/azure/nat-gateway/) provides deterministic outbound public IP addresses for subnet resources. Call to create a NAT gateway, then associate it with a subnet using :
@@ -200,7 +201,7 @@ const subnet = vnet.addSubnet("aca-subnet", "10.0.0.0/23")
-By default, a public IP address is automatically created for the NAT gateway. To provide an explicit public IP address for full control, call `AddPublicIPAddress` (or `addPublicIPAddress`) and associate it with `WithPublicIPAddress` (or `withPublicIPAddress`):
+By default, a public IP address is automatically created for the NAT gateway. To provide an explicit public IP address for full control, call and associate it with :
@@ -260,10 +261,10 @@ const subnet = vnet.addSubnet("web", "10.0.1.0/24")
The available shorthand methods are:
-- `AllowInbound` (or `allowInbound`) — Allow inbound traffic.
-- `DenyInbound` (or `denyInbound`) — Deny inbound traffic.
-- `AllowOutbound` (or `allowOutbound`) — Allow outbound traffic.
-- `DenyOutbound` (or `denyOutbound`) — Deny outbound traffic.
+- — Allow inbound traffic.
+- — Deny inbound traffic.
+- — Allow outbound traffic.
+- — Deny outbound traffic.
Priority auto-increments by 100 (100, 200, 300...) and rule names are auto-generated from the access, direction, port, and source (for example, `allow-inbound-443-AzureLoadBalancer`).
@@ -276,7 +277,7 @@ Priority auto-increments by 100 (100, 200, 300...) and rule names are auto-gener
#### Explicit API
-For full control over security rules, create a standalone NSG with `AddNetworkSecurityGroup` (or `addNetworkSecurityGroup`) on the `builder` and attach it to a subnet with `WithNetworkSecurityGroup` (or `withNetworkSecurityGroup`):
+For full control over security rules, create a standalone NSG with on the `builder` and attach it to a subnet with :
@@ -338,7 +339,7 @@ A single NSG can be shared across multiple subnets.
### Delegate subnets to compute environments
-Compute environment integrations that support regional virtual network integration expose a `WithDelegatedSubnet` (or `withDelegatedSubnet` in TypeScript) extension method that assigns a subnet to the environment, enabling subnet delegation so the environment can inject its infrastructure. For example, [Azure Container Apps](/integrations/cloud/azure/configure-container-apps/) and [Azure App Service](/integrations/cloud/azure/azure-app-service/azure-app-service-host/#regional-virtual-network-integration) both support `WithDelegatedSubnet`:
+Compute environment integrations that support regional virtual network integration expose a extension method that assigns a subnet to the environment, enabling subnet delegation so the environment can inject its infrastructure. For example, [Azure Container Apps](/integrations/cloud/azure/configure-container-apps/) and [Azure App Service](/integrations/cloud/azure/azure-app-service/azure-app-service-host/#regional-virtual-network-integration) both support `WithDelegatedSubnet`:
@@ -380,7 +381,7 @@ Each compute environment delegates the subnet to its own Azure service (for exam
### Delegate a subnet to an Azure service
-For scenarios that aren't covered by a compute environment's `WithDelegatedSubnet` helper, call `WithServiceDelegation` (or `withServiceDelegation` in TypeScript) directly on the subnet builder to delegate it to a supported Azure service. The delegation `name` defaults to `serviceName` so you don't have to repeat the value:
+For scenarios that aren't covered by a compute environment's `WithDelegatedSubnet` helper, call directly on the subnet builder to delegate it to a supported Azure service. The delegation `name` defaults to `serviceName` so you don't have to repeat the value:
@@ -426,7 +427,7 @@ You can also pass another supported Azure resource provider path as `serviceName
### Add private endpoints
-[Private endpoints](https://learn.microsoft.com/azure/private-link/) enable secure connectivity to Azure services over a private network. Call `AddPrivateEndpoint` (or `addPrivateEndpoint`) on a subnet builder and pass the Azure resource to connect to:
+[Private endpoints](https://learn.microsoft.com/azure/private-link/) enable secure connectivity to Azure services over a private network. Call on a subnet builder and pass the Azure resource to connect to:
@@ -462,7 +463,7 @@ When you add a private endpoint, the following resources are automatically creat
3. A **DNS Zone Group** on the private endpoint for automatic DNS registration.
4. The target resource is automatically configured to **deny public network access**.
-The private DNS zone ensures that services within the virtual network automatically resolve the target resource's hostname to its private IP address. Resources that reference the target (for example, via `WithReference`) use the same connection information—DNS resolution handles routing traffic over the private network.
+The private DNS zone ensures that services within the virtual network automatically resolve the target resource's hostname to its private IP address. Resources that reference the target (for example, via ) use the same connection information—DNS resolution handles routing traffic over the private network.
Adding a private endpoint automatically disables public network access on the
@@ -474,7 +475,7 @@ The private DNS zone ensures that services within the virtual network automatica
#### Override public network access
-To keep public access enabled on a resource that has a private endpoint, use `ConfigureInfrastructure` to override the automatic lockdown:
+To keep public access enabled on a resource that has a private endpoint, use to override the automatic lockdown:
```csharp title="AppHost.cs"
storage.ConfigureInfrastructure(infra =>
@@ -532,7 +533,7 @@ NSPs complement private endpoints with a higher-level grouping model. Instead of
#### Create a perimeter
-Call `AddNetworkSecurityPerimeter` (or `addNetworkSecurityPerimeter`) on the `builder` instance to create an NSP with a default profile:
+Call on the `builder` instance to create an NSP with a default profile:
@@ -563,7 +564,7 @@ await builder.build().run();
#### Add access rules
-Access rules control traffic flowing into and out of the perimeter. Call `WithAccessRule` (or `withAccessRule`) and pass an `AzureNspAccessRule` to define a rule:
+Access rules control traffic flowing into and out of the perimeter. Call and pass an `AzureNspAccessRule` to define a rule:
@@ -618,7 +619,7 @@ Each property also has a corresponding `*References` variant (for example, `Addr
#### Associate resources with a perimeter
-Call `WithNetworkSecurityPerimeter` (or `withNetworkSecurityPerimeter`) on a PaaS resource builder to associate it with an NSP:
+Call on a PaaS resource builder to associate it with an NSP:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-web-pubsub/azure-web-pubsub-connect.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-web-pubsub/azure-web-pubsub-connect.mdx
index 2a3a03638..80bd02d4b 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-web-pubsub/azure-web-pubsub-connect.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-web-pubsub/azure-web-pubsub-connect.mdx
@@ -8,6 +8,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import InstallDotNetPackage from '@components/InstallDotNetPackage.astro';
import webPubSubIcon from '@assets/icons/azure-webpubsub-icon.png';
+import ApiReference from '@components/ApiReference.astro';
- If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using `WithEnvironment`. See [Customize provisioning infrastructure](../azure-web-pubsub-host/#customize-provisioning-infrastructure) in the Hosting integration reference.
+ If your app expects specific environment variable names different from the Aspire defaults, you can pass individual connection properties from the AppHost using . See [Customize provisioning infrastructure](../azure-web-pubsub-host/#customize-provisioning-infrastructure) in the Hosting integration reference.
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/azure-web-pubsub/azure-web-pubsub-host.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/azure-web-pubsub/azure-web-pubsub-host.mdx
index a86f05409..b2b9cd4c6 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/azure-web-pubsub/azure-web-pubsub-host.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/azure-web-pubsub/azure-web-pubsub-host.mdx
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import webPubSubIcon from '@assets/icons/azure-webpubsub-icon.png';
+import ApiReference from '@components/ApiReference.astro';
-1. The `AddAzureWebPubSub` (or `addAzureWebPubSub`) call declares an Azure Web PubSub resource named `web-pubsub` in the AppHost.
+1. The call declares an Azure Web PubSub resource named `web-pubsub` in the AppHost.
1. The AppHost reference call configures a connection in the consuming project named after the referenced resource, such as `web-pubsub` in the preceding example.
@@ -113,7 +114,7 @@ await builder.addNodeApp("api", "./api", "index.js")
When you call `AddAzureWebPubSub`, it implicitly calls
- `AddAzureProvisioning`—which adds support for generating Azure resources
+ —which adds support for generating Azure resources
dynamically during app startup. The app must configure the appropriate
subscription and location. For more information, see [Local provisioning:
Configuration](/integrations/cloud/azure/local-provisioning/#configuration).
@@ -125,7 +126,7 @@ await builder.addNodeApp("api", "./api", "index.js")
## Add Azure Web PubSub hub resource
-A hub is a logical grouping of connections and event handlers in Azure Web PubSub. To add a hub to a Web PubSub resource, chain a call to `AddHub` (or `addHub`):
+A hub is a logical grouping of connections and event handlers in Azure Web PubSub. To add a hub to a Web PubSub resource, chain a call to :
@@ -156,7 +157,7 @@ The preceding code adds a hub resource named `messages` with a hub name of `mess
## Add event handler to a hub
-Event handlers allow your backend services to receive events from Azure Web PubSub. To add an event handler to a hub, chain a call to `AddEventHandler` (or `addEventHandler`):
+Event handlers allow your backend services to receive events from Azure Web PubSub. To add an event handler to a hub, chain a call to :
@@ -251,7 +252,7 @@ The available roles for Azure Web PubSub are:
## Connect to an existing Azure Web PubSub instance
-You might have an existing Azure Web PubSub service that you want to connect to. Chain a call to `AsExisting` (or `asExisting`) to annotate that your resource is externally managed:
+You might have an existing Azure Web PubSub service that you want to connect to. Chain a call to to annotate that your resource is externally managed:
@@ -379,7 +380,7 @@ The generated Bicep is a starting point and is influenced by changes to the prov
## Customize provisioning infrastructure
-All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the `ConfigureInfrastructure` API:
+All Aspire Azure resources are subclasses of the `AzureProvisioningResource` type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources using the API:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/configure-container-apps.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/configure-container-apps.mdx
index b6ae6a2ee..327a832d8 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/configure-container-apps.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/configure-container-apps.mdx
@@ -6,6 +6,7 @@ description: Learn how to configure Azure Container Apps environment settings, s
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import { Image } from 'astro:assets';
import containerAppsIcon from '@assets/icons/azure-container-apps-environments.svg';
+import ApiReference from '@components/ApiReference.astro';
. Use `PublishAsAzureContainerApp` only when you want to customize the generated Container App resource for a project, container, or executable — it does not create the ACA environment. Add an ACA environment first, then use the callback to customize the generated Container App resource.
By using the `Azure.Provisioning` APIs (explained in [Customize Azure resources](/integrations/cloud/azure/customize-resources/)), you can configure and customize ACA environments along with related resources, such as container registries and file share volumes. Any available deployment setting can be configured. For more information on the available settings, see [Microsoft.App managedEnvironments](https://learn.microsoft.com/azure/templates/microsoft.app/managedenvironments).
@@ -188,11 +189,11 @@ This module configures:
- A role assignment for the user principal ID to the ACA environment.
- Various outputs for the ACA environment.
-Using the `acaEnv` variable, you can chain a call to the `ConfigureInfrastructure` API to customize the ACA environment to your liking. For more information, see [Configure infrastructure](/integrations/cloud/azure/customize-resources/).
+Using the `acaEnv` variable, you can chain a call to the API to customize the ACA environment to your liking. For more information, see [Configure infrastructure](/integrations/cloud/azure/customize-resources/).
## Use an existing ACA environment
-If you've already provisioned an Azure Container Apps environment, chain `AsExisting` (or `asExisting`) on `AddAzureContainerAppEnvironment` to deploy your container apps into it instead of creating a new one:
+If you've already provisioned an Azure Container Apps environment, chain on `AddAzureContainerAppEnvironment` to deploy your container apps into it instead of creating a new one:
@@ -233,13 +234,13 @@ When the environment is marked as existing, Aspire generates a thin Bicep module
Some configurations are incompatible with an existing environment and are rejected at publish time:
-- `WithDelegatedSubnet` — VNet integration is a property of the managed environment and can't be reconfigured on an existing one.
-- `WithAzureLogAnalyticsWorkspace` — the existing environment already owns its workspace.
+- — VNet integration is a property of the managed environment and can't be reconfigured on an existing one.
+- — the existing environment already owns its workspace.
- Volume mounts on container apps targeting the environment — Azure Files storage attaches to the managed environment, which Aspire can't change on an existing environment.
### Bring your own ACR pull identity
-By default, even when the environment is existing, Aspire still emits a new user-assigned managed identity and an `AcrPull` role assignment on the container registry so that newly deployed container apps can pull their images. If your deployment principal can't create identities or role assignments, or if you have an existing identity that you want to reuse, supply a pre-existing identity with `WithAcrPullIdentity` (or `withAcrPullIdentity`):
+By default, even when the environment is existing, Aspire still emits a new user-assigned managed identity and an `AcrPull` role assignment on the container registry so that newly deployed container apps can pull their images. If your deployment principal can't create identities or role assignments, or if you have an existing identity that you want to reuse, supply a pre-existing identity with :
@@ -362,7 +363,7 @@ builder.Build().Run();
## Handle naming conventions
-By default, `AddAzureContainerAppEnvironment` uses a different Azure resource naming scheme than the [Azure Developer CLI (`azd`)](https://learn.microsoft.com/azure/developer/azure-developer-cli/). If you're upgrading an existing deployment that previously used `azd`, you might see duplicate Azure resources. To avoid this issue, call the `WithAzdResourceNaming` method to revert to the naming convention used by `azd`:
+By default, `AddAzureContainerAppEnvironment` uses a different Azure resource naming scheme than the [Azure Developer CLI (`azd`)](https://learn.microsoft.com/azure/developer/azure-developer-cli/). If you're upgrading an existing deployment that previously used `azd`, you might see duplicate Azure resources. To avoid this issue, call the method to revert to the naming convention used by `azd`:
@@ -397,7 +398,7 @@ Calling this API ensures your existing Azure resources remain consistent and pre
By default, the generated managed environment `name` keeps only lowercase letters from the resource name, so `AddAzureContainerAppEnvironment("cae1")` and `AddAzureContainerAppEnvironment("cae2")` both produce the same Bicep expression once digits are stripped. If you deploy both environments to the *same resource group*, they collapse onto a single physical Azure Container Apps environment and concurrent deployments can fail with `ManagedEnvironmentOperationInProgress`.
-Publish and deploy detect this collision up front and fail with guidance to call `WithUniqueResourceNaming` on the colliding environments:
+Publish and deploy detect this collision up front and fail with guidance to call on the colliding environments:
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/container-app-jobs.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/container-app-jobs.mdx
index 4e2ea6286..f9970eee9 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/container-app-jobs.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/container-app-jobs.mdx
@@ -6,6 +6,7 @@ description: Learn how to use the Aspire Azure Container App Jobs hosting integr
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import { Image } from 'astro:assets';
import containerAppsIcon from '@assets/icons/azure-container-apps-environments.svg';
+import ApiReference from '@components/ApiReference.astro';
-[Azure Container Apps jobs](https://learn.microsoft.com/azure/container-apps/jobs) let you run containerized tasks that execute for a finite duration and exit. Unlike continuously-running Container Apps, jobs are purpose-built for batch processing, scheduled tasks, and event-driven workloads. The Aspire Azure Container App Jobs hosting integration exposes `PublishAsAzureContainerAppJob` and `PublishAsScheduledAzureContainerAppJob` extension methods so you can declare any `ProjectResource`, `ContainerResource`, or `ExecutableResource` as an Azure Container App Job directly from your [`AppHost`](/get-started/app-host/).
+[Azure Container Apps jobs](https://learn.microsoft.com/azure/container-apps/jobs) let you run containerized tasks that execute for a finite duration and exit. Unlike continuously-running Container Apps, jobs are purpose-built for batch processing, scheduled tasks, and event-driven workloads. The Aspire Azure Container App Jobs hosting integration exposes and extension methods so you can declare any `ProjectResource`, `ContainerResource`, or `ExecutableResource` as an Azure Container App Job directly from your [`AppHost`](/get-started/app-host/).
## Supported resource types
@@ -24,9 +25,9 @@ The following resource types can be published as Azure Container App Jobs:
| Resource type | Description |
|---|---|
-| `ProjectResource` | A .NET project added via `AddProject`. |
-| `ContainerResource` | A container image added via `AddContainer`. |
-| `ExecutableResource` | An executable process added via `AddExecutable`. |
+| `ProjectResource` | A .NET project added via . |
+| `ContainerResource` | A container image added via . |
+| `ExecutableResource` | An executable process added via . |
## Publish a project as a Container App Job
diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/customize-resources.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/customize-resources.mdx
index 7161150a2..d10d64a2c 100644
--- a/src/frontend/src/content/docs/integrations/cloud/azure/customize-resources.mdx
+++ b/src/frontend/src/content/docs/integrations/cloud/azure/customize-resources.mdx
@@ -7,6 +7,7 @@ import { Image } from 'astro:assets';
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
import LearnMore from '@components/LearnMore.astro';
import azureIcon from '@assets/icons/azure-icon.png';
+import ApiReference from '@components/ApiReference.astro';
, , and when you want Aspire to reference an Azure resource that already exists instead of provisioning a new one.
@@ -74,7 +75,7 @@ Use `RunAsExisting` when only local run mode should use the existing resource, `
### Manage default role assignments
-Aspire automatically assigns Azure RBAC roles based on how resources reference one another. When you need to opt out of those defaults before applying different permissions, use `ClearDefaultRoleAssignments`.
+Aspire automatically assigns Azure RBAC roles based on how resources reference one another. When you need to opt out of those defaults before applying different permissions, use