From ec402fbc2ed470f568b9daf03bcb31c98dcf1976 Mon Sep 17 00:00:00 2001
From: "aspire-repo-bot[bot]"
<268009190+aspire-repo-bot[bot]@users.noreply.github.com>
Date: Mon, 11 May 2026 23:31:21 +0000
Subject: [PATCH 1/4] docs: add WithProcessCommand / process-backed resource
commands
Documents the new experimental WithProcessCommand API introduced in
microsoft/aspire#16923, which lets AppHost authors add custom commands
backed by external processes.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
.../fundamentals/custom-resource-commands.mdx | 162 ++++++++++++++++++
1 file changed, 162 insertions(+)
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 f04db1045..1b2fd5938 100644
--- a/src/frontend/src/content/docs/fundamentals/custom-resource-commands.mdx
+++ b/src/frontend/src/content/docs/fundamentals/custom-resource-commands.mdx
@@ -1174,3 +1174,165 @@ await builder.build().run();
+
+## Process-backed resource commands
+
+:::caution[Experimental API]
+`WithProcessCommand` is experimental and requires opting in to the `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:
+
+- Starts a local process from the AppHost machine using the provided executable path and arguments.
+- Passes arguments as an argument list (not through a shell), so no shell-quoting is needed.
+- Streams stdout and stderr to the command logger (visible in the [Aspire dashboard](/dashboard/explore/#console-logs-page) and via `aspire logs `).
+- Returns the captured output as bounded text (configurable via `MaxOutputLineCount`).
+- Maps non-zero exit codes and cancellation to appropriate `ExecuteCommandResult` values automatically.
+
+:::note
+`WithProcessCommand` runs processes on the **AppHost machine** — not inside a container. Use it for local tools such as `dotnet`, `node`, `docker`, custom CLIs, and scripts.
+:::
+
+### Static process command
+
+The simplest form takes the executable and an argument array directly:
+
+
+
+
+```csharp title="AppHost.cs"
+#pragma warning disable ASPIREPROCESSCOMMAND001
+
+var builder = DistributedApplication.CreateBuilder(args);
+
+builder.AddRedis("cache")
+ .WithProcessCommand(
+ name: "dotnet-version",
+ displayName: "Show .NET version",
+ executablePath: "dotnet",
+ arguments: ["--version"]);
+
+builder.Build().Run();
+```
+
+
+
+
+```typescript title="apphost.ts"
+import { createBuilder } from './.modules/aspire.js';
+
+const builder = await createBuilder();
+
+const cache = await builder.addRedis("cache");
+
+await cache.withProcessCommand(
+ "dotnet-version",
+ "Show .NET version",
+ {
+ executablePath: "dotnet",
+ arguments: ["--version"],
+ });
+
+await builder.build().run();
+```
+
+
+
+
+When the command runs in the dashboard or CLI, `dotnet --version` executes on the AppHost machine, and the version string is captured and displayed as the command output.
+
+### Dynamic process command
+
+When the command arguments depend on runtime context — for example, a dataset name supplied by the user through the dashboard's argument dialog — use the callback overload (C# only) to build the `ProcessCommandSpec` dynamically:
+
+```csharp title="AppHost.cs"
+#pragma warning disable ASPIREPROCESSCOMMAND001
+
+var builder = DistributedApplication.CreateBuilder(args);
+
+builder.AddRedis("cache")
+ .WithProcessCommand(
+ name: "seed-data",
+ displayName: "Seed data",
+ createProcessSpec: context => new ProcessCommandSpec("dotnet")
+ {
+ Arguments = ["run", "--project", "tools/SeedData", "--",
+ context.Arguments.GetString("dataset") ?? "small"],
+ EnvironmentVariables = { ["ConnectionStrings__db"] = "Host=localhost;Database=db" },
+ },
+ options: new ProcessCommandOptions { MaxOutputLineCount = 20 });
+
+builder.Build().Run();
+```
+
+The `context` parameter is an `ExecuteCommandContext`, so you can read user-supplied arguments via `context.Arguments.GetString(name)`, resolve services, and check the cancellation token.
+
+### `ProcessCommandSpec` properties
+
+| Property | Type | Description |
+|---|---|---|
+| `ExecutablePath` | `string` | The path to the executable. If not absolute, the AppHost's PATH is searched. |
+| `Arguments` | `IList` | Argument list passed to the process. Each entry is a separate argument — no shell quoting needed. |
+| `EnvironmentVariables` | `IDictionary` | Environment variables to set for the child process. |
+| `StandardInputContent` | `string?` | Optional text written to the process's stdin before it starts. |
+| `WorkingDirectory` | `string?` | Working directory for the child process. Defaults to the AppHost directory. |
+
+### `ProcessCommandOptions`
+
+| Property | Type | Default | Description |
+|---|---|---|---|
+| `MaxOutputLineCount` | `int` | 100 | Maximum number of stdout/stderr lines captured and returned as command output. Lines beyond this limit are discarded (oldest lines are dropped first). |
+
+### TypeScript `withProcessCommand` options
+
+In TypeScript AppHosts the options are supplied inline as a single object:
+
+| Field | Type | Description |
+|---|---|---|
+| `executablePath` | `string` | Path to the executable. |
+| `arguments` | `string[]?` | Argument list. |
+| `environmentVariables` | `Array<{ name: string; value: string }>?` | Environment variables for the child process. |
+| `standardInputContent` | `string?` | Text written to stdin. |
+| `maxOutputLineCount` | `number?` | Maximum captured output lines (default: 100). |
+
+### Executable path resolution
+
+`WithProcessCommand` resolves the executable using the following rules:
+
+1. If `ExecutablePath` is an absolute path or contains a path separator, it is used as-is.
+2. Otherwise, the AppHost process's `PATH` is searched for the named executable. On Windows, `PATHEXT` extensions are also tried.
+
+This means you can reference tools such as `dotnet`, `node`, or `docker` by short name as long as they are on the AppHost's PATH when the app starts.
+
+### Combining with command arguments
+
+`WithProcessCommand` uses `WithCommand` internally, so you can combine it with the [Command arguments](#command-arguments) feature to prompt the user for input before the process runs:
+
+```csharp title="AppHost.cs"
+#pragma warning disable ASPIREPROCESSCOMMAND001
+#pragma warning disable ASPIREINTERACTION001
+
+var builder = DistributedApplication.CreateBuilder(args);
+
+builder.AddPostgres("postgres")
+ .WithProcessCommand(
+ name: "run-migration",
+ displayName: "Run migration",
+ createProcessSpec: context => new ProcessCommandSpec("dotnet")
+ {
+ Arguments = ["run", "--project", "tools/Migrations", "--",
+ "--target", context.Arguments.GetString("target") ?? "latest"],
+ },
+ options: new ProcessCommandOptions
+ {
+ MaxOutputLineCount = 50,
+ Arguments =
+ [
+ new InteractionInput { Name = "target", Label = "Target migration", InputType = InputType.Text },
+ ],
+ });
+
+builder.Build().Run();
+```
+
+The dashboard renders the `Arguments` as a prompt dialog before starting the process, and the entered values are accessible via `context.Arguments`.
From 9e7c10da5372934cb1e77ea25cada34c611b3803 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 12 May 2026 01:39:49 +0000
Subject: [PATCH 2/4] docs: address review feedback - add
ASPIREPROCESSCOMMAND001 diagnostic article, update TS example, conceptualize
config sections, vertical array formatting
Agent-Logs-Url: https://github.com/microsoft/aspire.dev/sessions/91ac4d2c-f747-49d2-ade1-2220fd9c5d7b
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
---
.../config/sidebar/reference.topics.ts | 4 +
.../diagnostics/aspireprocesscommand001.mdx | 76 +++++++++++++++++++
.../src/content/docs/diagnostics/overview.mdx | 1 +
.../fundamentals/custom-resource-commands.mdx | 59 +++++++-------
4 files changed, 114 insertions(+), 26 deletions(-)
create mode 100644 src/frontend/src/content/docs/diagnostics/aspireprocesscommand001.mdx
diff --git a/src/frontend/config/sidebar/reference.topics.ts b/src/frontend/config/sidebar/reference.topics.ts
index 38c83f06a..7e6c0156f 100644
--- a/src/frontend/config/sidebar/reference.topics.ts
+++ b/src/frontend/config/sidebar/reference.topics.ts
@@ -644,6 +644,10 @@ export const referenceTopics: StarlightSidebarTopicsUserConfig[number] = {
label: 'ASPIREPOSTGRES001',
link: '/diagnostics/aspirepostgres001',
},
+ {
+ label: 'ASPIREPROCESSCOMMAND001',
+ link: '/diagnostics/aspireprocesscommand001',
+ },
{
label: 'ASPIREUSERSECRETS001',
link: '/diagnostics/aspireusersecrets001',
diff --git a/src/frontend/src/content/docs/diagnostics/aspireprocesscommand001.mdx b/src/frontend/src/content/docs/diagnostics/aspireprocesscommand001.mdx
new file mode 100644
index 000000000..06f844f5e
--- /dev/null
+++ b/src/frontend/src/content/docs/diagnostics/aspireprocesscommand001.mdx
@@ -0,0 +1,76 @@
+---
+title: Compiler Warning ASPIREPROCESSCOMMAND001
+description: Learn more about compiler Warning ASPIREPROCESSCOMMAND001. Process command types and members are for evaluation purposes only and are subject to change or removal in future updates.
+---
+
+import { Badge } from '@astrojs/starlight/components';
+
+
+
+> 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).
+
+The following APIs are protected by this diagnostic:
+
+- `WithProcessCommand` on `IResourceBuilder` — registers a command that starts a local process when invoked
+- `ProcessCommandSpec` — describes the process to start, including executable path, arguments, environment variables, working directory, and stdin content
+- `ProcessCommandOptions` — controls command behavior such as the maximum captured output line count, success exit codes, and how the result is displayed
+
+## Example
+
+The following code generates `ASPIREPROCESSCOMMAND001`:
+
+```csharp title="C# — AppHost.cs"
+var builder = DistributedApplication.CreateBuilder(args);
+
+var cache = builder.AddRedis("cache")
+ .WithProcessCommand(
+ name: "dotnet-version",
+ displayName: "Show .NET version",
+ executablePath: "dotnet",
+ arguments: ["--version"]);
+
+builder.Build().Run();
+```
+
+The diagnostic is triggered because `WithProcessCommand`, `ProcessCommandSpec`, and `ProcessCommandOptions` are all marked with the `[Experimental("ASPIREPROCESSCOMMAND001")]` attribute.
+
+## To correct this warning
+
+Suppress the warning with either of the following methods:
+
+- Set the severity of the rule in the _.editorconfig_ file.
+
+ ```ini title=".editorconfig"
+ [*.{cs,vb}]
+ dotnet_diagnostic.ASPIREPROCESSCOMMAND001.severity = none
+ ```
+
+ For more information about editor config files, see [Configuration files for code analysis rules](/diagnostics/overview/#suppress-in-the-editorconfig-file).
+
+- Add the following `PropertyGroup` to your project file:
+
+ ```xml title="C# project file"
+
+ $(NoWarn);ASPIREPROCESSCOMMAND001
+
+ ```
+
+- Suppress in code with the `#pragma warning disable ASPIREPROCESSCOMMAND001` directive:
+
+ ```csharp title="C# — Suppressing the warning"
+ #pragma warning disable ASPIREPROCESSCOMMAND001
+ var cache = builder.AddRedis("cache")
+ .WithProcessCommand("dotnet-version", "Show .NET version", "dotnet", ["--version"]);
+ #pragma warning restore ASPIREPROCESSCOMMAND001
+ ```
+
+## See also
+
+- [Process-backed resource commands](/fundamentals/custom-resource-commands/#process-backed-resource-commands) — Learn how to use `WithProcessCommand`
diff --git a/src/frontend/src/content/docs/diagnostics/overview.mdx b/src/frontend/src/content/docs/diagnostics/overview.mdx
index 9dd724a44..f25ef5f6b 100644
--- a/src/frontend/src/content/docs/diagnostics/overview.mdx
+++ b/src/frontend/src/content/docs/diagnostics/overview.mdx
@@ -52,6 +52,7 @@ The following table lists the possible MSBuild and analyzer warnings and errors
| [ASPIREPIPELINES004](/diagnostics/aspirepipelines004/) | (Experimental) Warning | Type is for evaluation purposes only and is subject to change or removal in future updates. |
| [ASPIREPOSTGRES001](/diagnostics/aspirepostgres001/) | (Experimental) Warning | PostgreSQL MCP integration is for evaluation purposes only and is subject to change or removal in future updates. |
| [ASPIREPROBES001](/diagnostics/aspireprobes001/) | (Experimental) Warning | Probe-related types and members are for evaluation purposes only and are subject to change or removal in future updates. |
+| [ASPIREPROCESSCOMMAND001](/diagnostics/aspireprocesscommand001/) | (Experimental) Warning | Process command types and members are for evaluation purposes only and are subject to change or removal in future updates. |
| [ASPIREPROXYENDPOINTS001](/diagnostics/aspireproxyendpoints001/) | (Experimental) Error | ProxyEndpoint members are for evaluation purposes only and are subject to change or removal in future updates. |
| [ASPIREPUBLISHERS001](/diagnostics/aspirepublishers001/) | Error | Publishers are for evaluation purposes only and are subject to change or removal in future updates. |
| [ASPIREUSERSECRETS001](/diagnostics/aspireusersecrets001/) | (Experimental) Warning | Type is for evaluation purposes only and is subject to change or removal in future updates. |
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 1b2fd5938..d1942b307 100644
--- a/src/frontend/src/content/docs/fundamentals/custom-resource-commands.mdx
+++ b/src/frontend/src/content/docs/fundamentals/custom-resource-commands.mdx
@@ -1178,7 +1178,7 @@ Use `ResourceCommandVisibility.Api` for automation-only commands (diagnostics, s
## Process-backed resource commands
:::caution[Experimental API]
-`WithProcessCommand` is experimental and requires opting in to the `ASPIREPROCESSCOMMAND001` diagnostic suppression. The API shape may change before it stabilizes.
+`WithProcessCommand` 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:
@@ -1231,6 +1231,10 @@ await cache.withProcessCommand(
{
executablePath: "dotnet",
arguments: ["--version"],
+ workingDirectory: "/tmp",
+ environmentVariables: { DOTNET_CLI_TELEMETRY_OPTOUT: "1" },
+ maxOutputLineCount: 20,
+ displayImmediately: true,
});
await builder.build().run();
@@ -1256,8 +1260,14 @@ builder.AddRedis("cache")
displayName: "Seed data",
createProcessSpec: context => new ProcessCommandSpec("dotnet")
{
- Arguments = ["run", "--project", "tools/SeedData", "--",
- context.Arguments.GetString("dataset") ?? "small"],
+ Arguments =
+ [
+ "run",
+ "--project",
+ "tools/SeedData",
+ "--",
+ context.Arguments.GetString("dataset") ?? "small",
+ ],
EnvironmentVariables = { ["ConnectionStrings__db"] = "Host=localhost;Database=db" },
},
options: new ProcessCommandOptions { MaxOutputLineCount = 20 });
@@ -1269,31 +1279,21 @@ The `context` parameter is an `ExecuteCommandContext`, so you can read user-supp
### `ProcessCommandSpec` properties
-| Property | Type | Description |
-|---|---|---|
-| `ExecutablePath` | `string` | The path to the executable. If not absolute, the AppHost's PATH is searched. |
-| `Arguments` | `IList` | Argument list passed to the process. Each entry is a separate argument — no shell quoting needed. |
-| `EnvironmentVariables` | `IDictionary` | Environment variables to set for the child process. |
-| `StandardInputContent` | `string?` | Optional text written to the process's stdin before it starts. |
-| `WorkingDirectory` | `string?` | Working directory for the child process. Defaults to the AppHost directory. |
+The following configuration options are available for the process to run. In C#, these map to `ProcessCommandSpec` properties. In TypeScript, they are provided as fields in the options object passed to `withProcessCommand`.
-### `ProcessCommandOptions`
+- **Executable path** — the path to the process to launch. Short names (no directory separator) are resolved from the AppHost's `PATH`.
+- **Arguments** — a list of arguments passed to the process. Each entry is treated as a separate argument, so no shell quoting or escaping is needed.
+- **Environment variables** — additional key/value pairs set in the child process's environment.
+- **Standard input content** — optional text written to the process's stdin immediately after it starts.
+- **Working directory** — the directory the process starts in. Defaults to the AppHost directory if not specified.
-| Property | Type | Default | Description |
-|---|---|---|---|
-| `MaxOutputLineCount` | `int` | 100 | Maximum number of stdout/stderr lines captured and returned as command output. Lines beyond this limit are discarded (oldest lines are dropped first). |
-
-### TypeScript `withProcessCommand` options
+### `ProcessCommandOptions`
-In TypeScript AppHosts the options are supplied inline as a single object:
+The following options control how `WithProcessCommand` handles the process result. In C#, they are set on `ProcessCommandOptions`. In TypeScript, they are fields in the same options object as the process configuration above.
-| Field | Type | Description |
-|---|---|---|
-| `executablePath` | `string` | Path to the executable. |
-| `arguments` | `string[]?` | Argument list. |
-| `environmentVariables` | `Array<{ name: string; value: string }>?` | Environment variables for the child process. |
-| `standardInputContent` | `string?` | Text written to stdin. |
-| `maxOutputLineCount` | `number?` | Maximum captured output lines (default: 100). |
+- **Max output line count** — the maximum number of combined stdout/stderr lines captured and returned as the command result. Defaults to 50. Lines beyond this limit are silently discarded (oldest lines first).
+- **Display immediately** — when `true` (the default), the captured output is automatically shown in the dashboard as soon as the command finishes.
+- **Success exit codes** — the list of process exit codes that are treated as a successful command invocation. Defaults to `[0]`.
### Executable path resolution
@@ -1320,8 +1320,15 @@ builder.AddPostgres("postgres")
displayName: "Run migration",
createProcessSpec: context => new ProcessCommandSpec("dotnet")
{
- Arguments = ["run", "--project", "tools/Migrations", "--",
- "--target", context.Arguments.GetString("target") ?? "latest"],
+ Arguments =
+ [
+ "run",
+ "--project",
+ "tools/Migrations",
+ "--",
+ "--target",
+ context.Arguments.GetString("target") ?? "latest",
+ ],
},
options: new ProcessCommandOptions
{
From c6fba7a002e3ff40d4d769078fb17774b63c587e Mon Sep 17 00:00:00 2001
From: David Fowler
Date: Mon, 11 May 2026 21:34:18 -0700
Subject: [PATCH 3/4] docs: refine process command documentation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
.../docs/diagnostics/aspireprocesscommand001.mdx | 6 +++---
.../docs/fundamentals/custom-resource-commands.mdx | 12 +++++++-----
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/src/frontend/src/content/docs/diagnostics/aspireprocesscommand001.mdx b/src/frontend/src/content/docs/diagnostics/aspireprocesscommand001.mdx
index 06f844f5e..bd8d511c2 100644
--- a/src/frontend/src/content/docs/diagnostics/aspireprocesscommand001.mdx
+++ b/src/frontend/src/content/docs/diagnostics/aspireprocesscommand001.mdx
@@ -29,7 +29,7 @@ The following code generates `ASPIREPROCESSCOMMAND001`:
```csharp title="C# — AppHost.cs"
var builder = DistributedApplication.CreateBuilder(args);
-var cache = builder.AddRedis("cache")
+builder.AddRedis("cache")
.WithProcessCommand(
name: "dotnet-version",
displayName: "Show .NET version",
@@ -43,7 +43,7 @@ The diagnostic is triggered because `WithProcessCommand`, `ProcessCommandSpec`,
## To correct this warning
-Suppress the warning with either of the following methods:
+Suppress the warning with one of the following methods:
- Set the severity of the rule in the _.editorconfig_ file.
@@ -66,7 +66,7 @@ Suppress the warning with either of the following methods:
```csharp title="C# — Suppressing the warning"
#pragma warning disable ASPIREPROCESSCOMMAND001
- var cache = builder.AddRedis("cache")
+ builder.AddRedis("cache")
.WithProcessCommand("dotnet-version", "Show .NET version", "dotnet", ["--version"]);
#pragma warning restore ASPIREPROCESSCOMMAND001
```
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 d1942b307..7b085d453 100644
--- a/src/frontend/src/content/docs/fundamentals/custom-resource-commands.mdx
+++ b/src/frontend/src/content/docs/fundamentals/custom-resource-commands.mdx
@@ -1231,10 +1231,6 @@ await cache.withProcessCommand(
{
executablePath: "dotnet",
arguments: ["--version"],
- workingDirectory: "/tmp",
- environmentVariables: { DOTNET_CLI_TELEMETRY_OPTOUT: "1" },
- maxOutputLineCount: 20,
- displayImmediately: true,
});
await builder.build().run();
@@ -1252,6 +1248,8 @@ When the command arguments depend on runtime context — for example, a dataset
```csharp title="AppHost.cs"
#pragma warning disable ASPIREPROCESSCOMMAND001
+using Aspire.Hosting.ApplicationModel;
+
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRedis("cache")
@@ -1284,8 +1282,10 @@ The following configuration options are available for the process to run. In C#,
- **Executable path** — the path to the process to launch. Short names (no directory separator) are resolved from the AppHost's `PATH`.
- **Arguments** — a list of arguments passed to the process. Each entry is treated as a separate argument, so no shell quoting or escaping is needed.
- **Environment variables** — additional key/value pairs set in the child process's environment.
+- **Inherit environment variables** — whether the child process inherits the AppHost process's environment variables. Defaults to `true`.
- **Standard input content** — optional text written to the process's stdin immediately after it starts.
- **Working directory** — the directory the process starts in. Defaults to the AppHost directory if not specified.
+- **Kill entire process tree** — whether cancellation and disposal should terminate the whole child process tree. Defaults to `true`.
### `ProcessCommandOptions`
@@ -1306,12 +1306,14 @@ This means you can reference tools such as `dotnet`, `node`, or `docker` by shor
### Combining with command arguments
-`WithProcessCommand` uses `WithCommand` internally, so you can combine it with the [Command arguments](#command-arguments) feature to prompt the user for input before the process runs:
+`WithProcessCommand` uses `WithCommand` internally. In C# dynamic process commands, you can combine it with the [Command arguments](#command-arguments) feature to prompt the user for input before the process runs:
```csharp title="AppHost.cs"
#pragma warning disable ASPIREPROCESSCOMMAND001
#pragma warning disable ASPIREINTERACTION001
+using Aspire.Hosting.ApplicationModel;
+
var builder = DistributedApplication.CreateBuilder(args);
builder.AddPostgres("postgres")
From b4fac5447eb3e6015866d2d8658aa72b057fe597 Mon Sep 17 00:00:00 2001
From: David Fowler
Date: Mon, 11 May 2026 21:46:21 -0700
Subject: [PATCH 4/4] docs: use node in TypeScript process command sample
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
.../docs/fundamentals/custom-resource-commands.mdx | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
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 7b085d453..6539d4679 100644
--- a/src/frontend/src/content/docs/fundamentals/custom-resource-commands.mdx
+++ b/src/frontend/src/content/docs/fundamentals/custom-resource-commands.mdx
@@ -1226,10 +1226,10 @@ const builder = await createBuilder();
const cache = await builder.addRedis("cache");
await cache.withProcessCommand(
- "dotnet-version",
- "Show .NET version",
+ "node-version",
+ "Show Node.js version",
{
- executablePath: "dotnet",
+ executablePath: "node",
arguments: ["--version"],
});
@@ -1239,7 +1239,7 @@ await builder.build().run();
-When the command runs in the dashboard or CLI, `dotnet --version` executes on the AppHost machine, and the version string is captured and displayed as the command output.
+When the command runs in the dashboard or CLI, `dotnet --version` (C#) or `node --version` (TypeScript) executes on the AppHost machine, and the version string is captured and displayed as the command output.
### Dynamic process command