From a2d5b95b4f5facf474f7b7d87b6c578b4f58f9d8 Mon Sep 17 00:00:00 2001 From: "aspire-repo-bot[bot]" <268009190+aspire-repo-bot[bot]@users.noreply.github.com> Date: Sat, 6 Jun 2026 05:34:36 +0000 Subject: [PATCH 1/5] [docs] Document timestamp search qualifier for telemetry filtering (#1181) * docs: document timestamp search qualifier for telemetry filtering Documents the new 'timestamp' search qualifier added in microsoft/aspire#17816. Users can now filter traces and structured logs by date/time using ISO 8601 strings with comparison operators (>, >=, <, <=) in the dashboard filter bar. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Move timestamp qualifier docs to shared CLI references Co-authored-by: JamesNK <303201+JamesNK@users.noreply.github.com> * Fix severity casing in timestamp search example Co-authored-by: JamesNK <303201+JamesNK@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: James Newton-King * Apply suggestion from @JamesNK * Apply suggestion from @JamesNK * docs: clarify date-only timestamp search values Co-authored-by: JamesNK <303201+JamesNK@users.noreply.github.com> * Apply suggestion from @JamesNK * Apply suggestion from @JamesNK * Update timestamp example dates to use 2026 --------- Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: JamesNK <303201+JamesNK@users.noreply.github.com> Co-authored-by: James Newton-King --- .../cli/commands/aspire-otel-logs.mdx | 9 +++++- .../cli/commands/aspire-otel-spans.mdx | 10 +++++-- .../cli/commands/aspire-otel-traces.mdx | 10 +++++-- .../docs/reference/cli/search-filter.mdx | 29 ++++++++++++++++--- 4 files changed, 49 insertions(+), 9 deletions(-) diff --git a/src/frontend/src/content/docs/reference/cli/commands/aspire-otel-logs.mdx b/src/frontend/src/content/docs/reference/cli/commands/aspire-otel-logs.mdx index 2971234ed..a3b0ba7df 100644 --- a/src/frontend/src/content/docs/reference/cli/commands/aspire-otel-logs.mdx +++ b/src/frontend/src/content/docs/reference/cli/commands/aspire-otel-logs.mdx @@ -73,9 +73,10 @@ The following options are available: | `"quoted phrase"` | Single fragment containing spaces | | `field:value` | Field qualifier — value must match the named field | | `-field:value` | Negated qualifier — excludes matches | + | `field:>value` / `field:>=value` / `field: @@ -133,6 +134,12 @@ The following options are available: aspire otel logs --search "scope:Microsoft.EntityFrameworkCore severity:Warning" ``` +- Filter logs by timestamp: + + ```bash title="Aspire CLI" + aspire otel logs --search "timestamp:>=2026-06-01T12:00:00 severity:error" + ``` + - View logs from a standalone dashboard using the login URL (token is automatically exchanged for an API key): ```bash title="Aspire CLI" diff --git a/src/frontend/src/content/docs/reference/cli/commands/aspire-otel-spans.mdx b/src/frontend/src/content/docs/reference/cli/commands/aspire-otel-spans.mdx index 595fa1c69..628a9c0ca 100644 --- a/src/frontend/src/content/docs/reference/cli/commands/aspire-otel-spans.mdx +++ b/src/frontend/src/content/docs/reference/cli/commands/aspire-otel-spans.mdx @@ -73,10 +73,10 @@ The following options are available: | `"quoted phrase"` | Single fragment containing spaces | | `field:value` | Field qualifier — value must match the named field | | `-field:value` | Negated qualifier — excludes matches | - | `field:>N` / `field:>=N` / `field:value` / `field:>=value` / `field: @@ -134,6 +134,12 @@ The following options are available: aspire otel spans --search "@db.system:postgresql" ``` +- Filter spans by timestamp: + + ```bash title="Aspire CLI" + aspire otel spans --search "timestamp:>=2026-03-01T08:30:00 kind:server" + ``` + - View spans from a standalone dashboard using the login URL (token is automatically exchanged for an API key): ```bash title="Aspire CLI" diff --git a/src/frontend/src/content/docs/reference/cli/commands/aspire-otel-traces.mdx b/src/frontend/src/content/docs/reference/cli/commands/aspire-otel-traces.mdx index 2e174409e..27c494276 100644 --- a/src/frontend/src/content/docs/reference/cli/commands/aspire-otel-traces.mdx +++ b/src/frontend/src/content/docs/reference/cli/commands/aspire-otel-traces.mdx @@ -71,10 +71,10 @@ The following options are available: | `"quoted phrase"` | Single fragment containing spaces | | `field:value` | Field qualifier — value must match the named field | | `-field:value` | Negated qualifier — excludes matches | - | `field:>N` / `field:>=N` / `field:value` / `field:>=value` / `field: @@ -132,6 +132,12 @@ The following options are available: aspire otel traces --search "@http.status_code:500" ``` +- Filter traces by timestamp: + + ```bash title="Aspire CLI" + aspire otel traces --search "timestamp:>2026-01-15T09:30:00 status:error" + ``` + - View traces from a standalone dashboard using the login URL (token is automatically exchanged for an API key): ```bash title="Aspire CLI" diff --git a/src/frontend/src/content/docs/reference/cli/search-filter.mdx b/src/frontend/src/content/docs/reference/cli/search-filter.mdx index a9f4f514a..3d667bb0d 100644 --- a/src/frontend/src/content/docs/reference/cli/search-filter.mdx +++ b/src/frontend/src/content/docs/reference/cli/search-filter.mdx @@ -28,10 +28,28 @@ Search queries support free-text fragments, field qualifiers, attribute qualifie | `field:"value with spaces"` | Quoted field qualifier value | `message:"connection failed"` | | `@attr:value` | Attribute qualifier — matches custom span/log attributes | `@http.method:GET` | | `-field:value` / `-@attr:value` | Negated qualifier — excludes matches | `-severity:debug` | -| `field:>N` / `field:>=N` / `field:100` | +| `field:>value` / `field:>=value` / `field:100` | All terms are AND'd: every fragment and qualifier must independently match. +## Timestamp qualifier + +Use the `timestamp` field qualifier to narrow structured logs, traces, and spans to a specific date/time range. The qualifier accepts ISO 8601 date or date/time strings together with a comparison operator: + +```bash title="Aspire CLI" +aspire otel logs --search "timestamp:>2026-01-15T09:30:00" +aspire otel traces --search "timestamp:<=2026-06-01T12:00:00Z" +aspire otel spans --search "timestamp:>=2026-01-01 timestamp:<2027-01-01" +``` + +The supported comparison operators are `>`, `>=`, `<`, and `<=`. + +Timestamp values are internally stored with UTC. The `timestamp` value is converted to UTC using these timezone rules: + +- A value with no timezone suffix (for example `2026-01-15` or `2026-01-15T09:30:00`) is treated as local time on the dashboard server and adjusted to UTC before comparison. +- A value with a UTC offset (for example `2026-06-01T12:00:00+05:00`) is adjusted to UTC before comparison. +- A value with the `Z` suffix is treated as UTC directly. + ## Console logs Matches against log line text content and resource name. Only free-text is supported (no structured qualifiers). @@ -45,36 +63,39 @@ aspire logs --follow --search "\"connection error\"" Supports free-text and structured qualifiers. Free-text matches against message, resource name, scope, trace/span IDs, severity, and all attribute keys/values. -Available field qualifiers: `severity`, `resource`, `scope`, `message`, `trace-id`, `span-id`, `event`. +Available field qualifiers: `severity`, `resource`, `scope`, `message`, `trace-id`, `span-id`, `event`, `timestamp`. ```bash title="Aspire CLI" aspire otel logs --search "severity:error \"connection failed\"" aspire otel logs --search "resource:api -severity:debug" aspire otel logs --search "scope:Microsoft.EntityFrameworkCore" +aspire otel logs --search "timestamp:>=2026-06-01T12:00:00 severity:error" ``` ## Traces Supports free-text and structured qualifiers. Free-text matches against trace name, resource name, and all span fields within the trace. -Available field qualifiers: `name`, `resource`, `trace-id`, `status`, `duration`. +Available field qualifiers: `name`, `resource`, `trace-id`, `status`, `duration`, `timestamp`. ```bash title="Aspire CLI" aspire otel traces --search "checkout" aspire otel traces --search "status:error duration:>500" aspire otel traces --search "@http.status_code:500" +aspire otel traces --search "timestamp:>2026-01-15T09:30:00 status:error" ``` ## Spans Supports free-text and structured qualifiers. Free-text matches against span name, resource name, scope, trace/span IDs, status, kind, and all attribute keys/values. -Available field qualifiers: `name`, `resource`, `scope`, `status`, `kind`, `trace-id`, `span-id`, `duration`. +Available field qualifiers: `name`, `resource`, `scope`, `status`, `kind`, `trace-id`, `span-id`, `duration`, `timestamp`. ```bash title="Aspire CLI" aspire otel spans --search "@http.method:GET duration:>100 status:error" aspire otel spans --search "@db.system:postgresql" aspire otel spans --search "-kind:internal" +aspire otel spans --search "timestamp:>=2026-03-01T08:30:00 kind:server" ``` ## See also From 05a46fd4656722a0cd11265a3175040782568bff Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 8 Jun 2026 07:32:14 -0500 Subject: [PATCH 2/5] [docs] Fix persistent container endpoint proxy default docs (#1227) * Fix persistent container endpoint proxy default docs Persistent containers use proxied endpoints by default (same as session containers), while persistent executables and projects default to proxyless endpoints. Also document that proxyless container endpoints with only a targetPort immediately allocate the targetPort as the host port. Corrects docs that previously stated all persistent resources default to proxyless endpoints. Documents changes from microsoft/aspire#17960. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: David Negstad <50252651+danegsta@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../src/content/docs/app-host/resource-lifetimes.mdx | 4 +++- .../content/docs/fundamentals/networking-overview.mdx | 8 +++++--- .../src/content/docs/whats-new/aspire-13-4.mdx | 11 ++++++----- 3 files changed, 14 insertions(+), 9 deletions(-) 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 3335e6aa7..183e8dabc 100644 --- a/src/frontend/src/content/docs/app-host/resource-lifetimes.mdx +++ b/src/frontend/src/content/docs/app-host/resource-lifetimes.mdx @@ -38,7 +38,9 @@ Use persistent lifetime for resources that are expensive to initialize, need sta Persistent resources are automatically recreated when the AppHost detects meaningful configuration changes. If the configuration differs, the resource is recreated with the new settings. ::: -Persistent resources default to proxyless endpoints so a stable local endpoint can remain reachable after the AppHost stops. You can still configure endpoint proxy behavior explicitly. For example, set `isProxied: true` or `IsProxied = true` when you need Aspire's proxy for a specific endpoint, or disable endpoint proxy support when you intentionally want every endpoint on a resource to be proxyless. Persistent executable endpoints must have a concrete `port` or `targetPort`; automatically persisted random executable ports aren't supported. +Persistent containers use proxied endpoints by default, just like session containers. The proxy runs only while the AppHost is running, so the proxy address isn't reachable after the AppHost stops. Persistent executables and projects default to proxyless endpoints so their direct addresses stay stable and reachable even after the AppHost stops. + +You can still configure endpoint proxy behavior explicitly on any persistent resource. Set `isProxied: false` on an individual endpoint, or call `WithEndpointProxySupport(false)` to make every endpoint on a resource proxyless. Persistent executable endpoints must have a concrete `port` or `targetPort`; automatically persisted random executable ports aren't supported. For proxyless container endpoints with only a `targetPort`, Aspire immediately uses the target port as the allocated host port. :::danger[Persistent container ≠ persistent data] Persistent container lifetime doesn't guarantee data durability. For details, see [Container lifetime vs. data durability](#container-lifetime-vs-data-durability). diff --git a/src/frontend/src/content/docs/fundamentals/networking-overview.mdx b/src/frontend/src/content/docs/fundamentals/networking-overview.mdx index b2fcaaf7f..5e7d3e6e3 100644 --- a/src/frontend/src/content/docs/fundamentals/networking-overview.mdx +++ b/src/frontend/src/content/docs/fundamentals/networking-overview.mdx @@ -55,7 +55,7 @@ The inner loop is the process of developing and testing your app locally before - **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`. - **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 resources are proxyless by default. Proxyless endpoints must specify a target port so Aspire knows which port the resource listens on. +- **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. Proxyless endpoints must specify a target port so Aspire knows which port the resource listens on. - **Container networks**: Aspire creates and manages dedicated networks for container resources so containers can discover and communicate with each other during local development. ## How endpoints work @@ -230,7 +230,9 @@ The underlying service still listens on its own port, and Aspire makes that allo Most endpoints are proxied by default. A proxyless endpoint skips the Aspire-managed proxy and exposes the resource's listener directly. Use a proxyless endpoint when a proxy would interfere with the resource's lifetime or networking behavior. -Starting in Aspire 13.4, endpoints on persistent resources are proxyless by default. This lets the persistent resource keep using its direct endpoint across AppHost runs instead of depending on a new proxy instance each time. This also ensures that the ports your service is reachable on stay stable whether the AppHost is running or not. +Starting in Aspire 13.4, endpoints on persistent executables and projects are proxyless by default. This lets the persistent resource keep using its direct endpoint across AppHost runs instead of depending on a new proxy instance each time. This also ensures that the ports your service is reachable on stay stable whether the AppHost is running or not. Persistent containers use proxied endpoints by default, the same as session containers, so integrations that depend on endpoint allocation before startup continue to work. + +For proxyless container endpoints, Aspire resolves the host port immediately when only a `targetPort` is specified — there is no deferred allocation. For example, `.WithEndpoint(targetPort: 6379, isProxied: false)` allocates host port `6379` right away. Because there's no proxy to listen on one port and forward to another, every proxyless endpoint must include a target port. The target port tells Aspire which port the resource listens on. You can also set `port` when you need a specific host port, but `targetPort` is still required for proxyless endpoints. @@ -405,7 +407,7 @@ The `AllocatedEndpoint` property allows you to get or set the endpoint for a ser on. -The `Name` property identifies the service, whereas the `Port` and `TargetPort` properties specify the desired and listening ports, respectively. `TargetPort` is required for proxyless endpoints, including endpoints with `IsProxied` set to `false` and, starting in Aspire 13.4, endpoints on persistent resources by default. +The `Name` property identifies the service, whereas the `Port` and `TargetPort` properties specify the desired and listening ports, respectively. `TargetPort` is required for proxyless endpoints, including endpoints with `IsProxied` set to `false` and, starting in Aspire 13.4, endpoints on persistent executables and projects by default. For network communication, the `Protocol` property supports **TCP** and **UDP**, with potential for more in the future, and the `Transport` property indicates the transport protocol (**HTTP**, **HTTP2**, **HTTP3**). Lastly, if the service is URI-addressable, the `UriScheme` property provides the URI scheme for constructing the service URI. diff --git a/src/frontend/src/content/docs/whats-new/aspire-13-4.mdx b/src/frontend/src/content/docs/whats-new/aspire-13-4.mdx index e74557761..da10fb7af 100644 --- a/src/frontend/src/content/docs/whats-new/aspire-13-4.mdx +++ b/src/frontend/src/content/docs/whats-new/aspire-13-4.mdx @@ -473,10 +473,11 @@ Persistent lifetimes now extend beyond containers to executables and projects. C @@ -779,7 +780,7 @@ Re-run `aspire run` (or your code-generation step) to regenerate references, and #### Persistent executable and project lifetimes -Support for persistent lifetimes on executables and projects updates the underlying DCP executable model (new `persistent`, `start`, and `stop` fields). Persistent resources default to proxyless endpoints, require concrete ports for executables, don't support replicas, and aren't compatible with Aspire IDE debugging sessions. +Support for persistent lifetimes on executables and projects updates the underlying DCP executable model (new `persistent`, `start`, and `stop` fields). Persistent executables and projects default to proxyless endpoints, require concrete ports for executables, don't support replicas, and aren't compatible with Aspire IDE debugging sessions. Persistent containers use proxied endpoints by default, matching session container behavior, so integrations that depend on endpoint allocation before startup work correctly without changes. If you adopt `WithPersistentLifetime()`, review endpoint and port configuration. Tooling pinned to the previous DCP executable schema may need to be updated. See [Configure resource lifetimes](/app-host/resource-lifetimes/). From 935ad6428b695ac2ae0f1e0c28ca8ad7e44dbda6 Mon Sep 17 00:00:00 2001 From: David Pine <7679720+IEvangelist@users.noreply.github.com> Date: Mon, 8 Jun 2026 07:39:42 -0500 Subject: [PATCH 3/5] Add Aspire 13.5 release scaffold Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/frontend/config/sidebar/docs.topics.ts | 4 + .../content/docs/whats-new/aspire-13-5.mdx | 83 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 src/frontend/src/content/docs/whats-new/aspire-13-5.mdx diff --git a/src/frontend/config/sidebar/docs.topics.ts b/src/frontend/config/sidebar/docs.topics.ts index 252aad6fe..2b87a829c 100644 --- a/src/frontend/config/sidebar/docs.topics.ts +++ b/src/frontend/config/sidebar/docs.topics.ts @@ -90,6 +90,10 @@ export const docsTopics: StarlightSidebarTopicsUserConfig = { label: "What's new", collapsed: true, items: [ + { + label: 'Aspire 13.5', + slug: 'whats-new/aspire-13-5', + }, { label: 'Aspire 13.4', slug: 'whats-new/aspire-13-4', diff --git a/src/frontend/src/content/docs/whats-new/aspire-13-5.mdx b/src/frontend/src/content/docs/whats-new/aspire-13-5.mdx new file mode 100644 index 000000000..a5d17d0cf --- /dev/null +++ b/src/frontend/src/content/docs/whats-new/aspire-13-5.mdx @@ -0,0 +1,83 @@ +--- +title: "What's new in Aspire 13.5" +description: 'Prepare for Aspire 13.5 with placeholder release notes, upgrade guidance, and links for final features, fixes, and breaking changes as they are finalized.' +sidebar: + label: Aspire 13.5 + order: 0 +tableOfContents: + minHeadingLevel: 2 + maxHeadingLevel: 2 +--- + +import { Steps, Aside } from '@astrojs/starlight/components'; +import LearnMore from '@components/LearnMore.astro'; +import OsAwareTabs from '@components/OsAwareTabs.astro'; + +Aspire 13.5 release notes are being prepared. This page is available early so release branch navigation, redirects, and documentation validation can target the Aspire 13.5 release while the final content is completed. + + + +## Upgrade to Aspire 13.5 + + +
+ +For general upgrade guidance, see [Upgrade Aspire](/whats-new/upgrade-aspire/). + +The standard upgrade flow is to update the Aspire CLI first, then update your projects from the root of your repository: + + + +1. Update the Aspire CLI itself: + + ```bash title="Aspire CLI - Update the CLI" + aspire update --self + ``` + +1. Update your projects: + + ```bash title="Aspire CLI - Update all Aspire packages" + aspire update + ``` + + + +Or install the CLI from scratch: + + + + + ```bash title="Aspire CLI - Install Aspire CLI" + curl -sSL https://aspire.dev/install.sh | bash + ``` + + + + + ```powershell title="Aspire CLI - Install Aspire CLI" + irm https://aspire.dev/install.ps1 | iex + ``` + + + + + + For more details on installing the Aspire CLI, see [Install the + CLI](/get-started/install-cli/). + + +## Release highlights + +Final Aspire 13.5 highlights will be added here as features, fixes, and documentation updates are finalized for the release. + +## Breaking changes + +No Aspire 13.5 breaking changes are documented yet. This section will be updated as release notes are finalized. + +## Known issues + +No Aspire 13.5 known issues are documented yet. This section will be updated if release validation identifies issues that users should know about. From 956a98e0221cb685c5dff8ca50acf81dd3507b72 Mon Sep 17 00:00:00 2001 From: "aspire-repo-bot[bot]" <268009190+aspire-repo-bot[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 21:26:38 -0500 Subject: [PATCH 4/5] [docs] Update Foundry Local docs to reflect CLI-based lifecycle (aspire#17889) (#1210) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: update Foundry Local section to reflect CLI-based lifecycle The Foundry Local integration now uses the installed 'foundry' CLI (foundry service start/stop/list and foundry model download/load) instead of the FoundryLocalManager in-proc APIs. Aspire manages the entire service lifecycle automatically. Update docs to: - Clarify users do not need to pre-start Foundry Local - State that the 'foundry' CLI must be on PATH - Describe the automatic start/stop lifecycle management Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Sébastien Ros Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../cloud/azure/azure-ai-foundry/azure-ai-foundry-host.mdx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 e2bcff7eb..923e74059 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 @@ -663,9 +663,11 @@ await builder.build().run(); -When the AppHost starts up, the local foundry service is also started. This requires the local machine to have [Foundry Local](https://learn.microsoft.com/azure/ai-foundry/foundry-local/get-started) installed and running. +When the AppHost starts, Aspire automatically starts the Foundry Local service using the `foundry` CLI (`foundry service start`). It then discovers the service endpoint, downloads and loads the specified models via CLI commands, and stops the service (`foundry service stop`) when the AppHost shuts down or is disposed. You do not need to pre-start Foundry Local manually. -The `RunAsFoundryLocal` method configures the resource to run as an emulator. It downloads and loads the specified models locally. The method provides health checks for the local service and automatically manages the Foundry Local lifecycle. +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.