---
schema_version: 1
route: /t/pulumi.md
tool: "pulumi"
---

# sincecutoff.com /t/pulumi — Pulumi

- name: Pulumi
- kind: cli
- children: none
- homepage: <https://github.com/pulumi/pulumi>

Changes to the tools coding agents drive, since a model's training cutoff, each linked to its first-party source. Check installed versions and limitations before acting; a cutoff date does not establish what a model knows.
Original editorial content: [Apache 2.0](https://sincecutoff.com/v1/data-license.txt), by [0xPatrick](https://0xpatrick.dev). Preserve applicable license and [NOTICE](https://sincecutoff.com/notice.txt) attribution when redistributing. Third-party source text and examples retain their own rights. [License scope and attribution](https://sincecutoff.com/v1/license.json).
To stay current, read the changes feed: [`/v1/changes.md?tool=pulumi`](https://sincecutoff.com/v1/changes.md?tool=pulumi) (or `.json`), adding `since=YYYY-MM-DD` for your training cutoff. Entries for registered children are included; the registry itself is `/v1/tools.json`. How to page and save your place: [llms.txt](https://sincecutoff.com/llms.txt).

### Pulumi Automation API adds `install` for NodeJS, Python, and Go (2026-10-07)
- slug: pulumi-automation-api-adds-install-for-nodejs-python-and-go-abe180072dec
- score: 0.96

How to use it:

When a NodeJS, Python, or Go Automation API workflow needs the Pulumi CLI at runtime, call that language’s `install` interface to download and install it. The default install uses the CLI version matching the SDK and places it under `~/.pulumi/versions/<version>`; pass the returned command to the workspace that runs the stack.

Examples:

```
const pulumiCommand = await PulumiCommand.install();
const stack = await LocalWorkspace.createOrSelectStack(args, { pulumiCommand });
```

```
const pulumi_command = auto.PulumiCommand.install()
stack = auto.create_or_select_stack(stack_name=stack_name,
                                    project_name=project_name,
                                    program=pulumi_program,
                                    opts=auto.LocalWorkspaceOptions(pulumi_command=pulumi_command))
```

```
ctx := context.Background()
pulumiCmd, err := auto.InstallPulumiCommand(ctx, &auto.PulumiCommandOptions{})
if err != nil {
    return err
}
s, err := auto.UpsertStackInlineSource(ctx, stackName, projectName, deployFunc, auto.Pulumi(pulumiCmd))
```

- why_it_matters: Install Pulumi through the generated Automation API in a NodeJS, Python, or Go workflow.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.268.0>, <https://www.pulumi.com/docs/iac/guides/building-extending/automation-api/>, <https://www.pulumi.com/docs/reference/pkg/nodejs/pulumi/pulumi/interfaces/automation.PulumiCommandOptions.html>, <https://www.pulumi.com/docs/reference/pkg/python/pulumi/>, <https://pkg.go.dev/github.com/pulumi/pulumi/sdk/v3%40v3.268.0/go/auto>, <https://pkg.go.dev/github.com/pulumi/pulumi/sdk/v3%40v3.267.0/go/auto>, <https://www.pulumi.com/docs/using-pulumi/automation-api/getting-started-automation-api/>
- gotchas: "Version: 3.268.0"; "NodeJS `opts` (optional): `root`: Directory to install the CLI in or find an existing installation; defaults to `$HOME/.pulumi/versions/$VERSION."; "NodeJS `opts` (optional): `version`: CLI version to use; defaults to the version matching the SDK."; "NodeJS `opts` (optional): `skipVersionCheck`: Skips the minimum CLI version check."; "Python `root`: Install directory; defaults to `~/.pulumi/versions/<version>`."; "Python `version`: CLI version to install; defaults to the version matching the SDK."; "Python `skip_version_check`: Skips version validation; `PULUMI_AUTOMATION_API_SKIP_VERSION_CHECK` also disables the check and takes precedence."; "Go `ctx` (required): Context passed to `InstallPulumiCommand`."; "Go `opts` (required): Pointer to `PulumiCommandOptions`; documented fields are `Root` (install directory), `Version` (CLI version), and `SkipVersionCheck` (disable version validation). Defaults install the CLI version matching the SDK under `$HOME/.pulumi/versions/$VERSION`."; "Prerequisite: Automation API requires the chosen language runtime. The getting-started guide lists Node.js, Python, or Go as applicable runtime prerequisites."; "Prerequisite: The Automation API guide says to configure a Pulumi access token or another state backend; deployment examples may also require target cloud credentials."; "The generated Automation APIs named in the release are for NodeJS, Python, and Go."

### pulumi api list accepts --filter (2026-09-10)
- slug: pulumi-api-list-accepts-filter-c87ac9dc5d32
- score: 0.96

How to use it:

When inspecting a Pulumi API, find endpoints by keyword with `pulumi api list --filter <keyword>`; matching is case-insensitive across operation ID, path, tag, summary, and description.

Examples:

```
pulumi api list --filter graph
```

- why_it_matters: Find API endpoints by keyword while inspecting a Pulumi API.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.262.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_api_list/>
- gotchas: "Version: v3.262.0"; "--filter <string>: Show only operations whose ID, path, tag, summary, or description contains the text, case-insensitively."

### pulumi state promote converts stateful snippets into Pulumi program code (2026-08-28)
- slug: pulumi-state-promote-converts-stateful-snippets-into-pulumi-program-code-cce967d1b9f8
- score: 0.94

How to use it:

When promoting a stateful snippet, run `pulumi state promote <snippet-name>` from a real Pulumi project; it generates program code, prints the files, and removes the snippet while retaining its resources in stack state.

Examples:

```
pulumi state promote <snippet-name>
```

- why_it_matters: Convert a stateful snippet into Pulumi program code.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.260.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_state_promote/>
- gotchas: "Version: v3.260.0"; "<snippet-name> (required): The snippet’s logical name."; "-s, --stack <string>: Stack to operate on; defaults to the current stack."; "-y, --yes: Skip confirmation prompts."; "Prerequisite: Run from a real Pulumi project so the generated code has a backing project runtime."

### pulumi plugin install adds --parallel with improved progress rendering (2026-08-19)
- slug: pulumi-plugin-install-adds-parallel-with-improved-progress-rendering-3097935306ab
- score: 0.96

How to use it:

When you need to preinstall the plugins required by the current Pulumi project, run `pulumi plugin install --parallel <N>` from that project. It installs concurrently, with a default maximum of 4; the release note reports improved rendering for simultaneous progress bars.

Examples:

```
pulumi plugin install --parallel <N>
```

- why_it_matters: Install Pulumi plugins for a repository's development environment while tracking concurrent installation progress.
- before: Without a specific plugin selector, Pulumi computes the set of plugins required by the current project. The release note says parallel installs previously had flickering progress rendering.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.259.0>, <https://github.com/pulumi/pulumi/pull/24372>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_plugin_install/>, <https://github.com/pulumi/pulumi/blob/v3.259.0/pkg/cmd/pulumi/plugin/plugin_install.go>
- gotchas: "Version: v3.259.0"; "--parallel <int>: Maximum concurrent installs; default 4. Values less than 1 mean unbounded parallelism."; "[kind name [version]]: Optional specific plugin selector. Omitting it lets Pulumi compute plugins required by the current project; a specified version must be an exact version, not a range."

### pulumi do assigns identifiers to existing stack resources (2026-08-13)
- slug: pulumi-do-assigns-identifiers-to-existing-stack-resources-f1e8b8e5637b
- score: 0.97

How to use it:

When an input expression needs to refer to a resource in the current stack, use its auto-assigned identifier in place of its URN. Run `pulumi do show-resources` to inspect those identifiers.

Examples:

```
pulumi do show-resources
```

```
pulumi do <package:module:type> <operation> <name> --input-file <input-file>
```

- why_it_matters: Use existing stack resources in a `pulumi do` input expression and inspect the identifiers assigned to them.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.257.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_do_show-resources/>, <https://www.pulumi.com/docs/iac/cli/direct-resource-operations/get-started/>, <https://www.pulumi.com/docs/iac/cli/direct-resource-operations/>
- gotchas: "Version: v3.257.0"; "<input-file> (required): Path to the input file; resource references use `${<identifier>}` syntax in YAML examples."; "--input-file: Supplies function or resource inputs from a file; optional for resource operations generally, but used by the documented reference example."; "--output: For `show-resources`, selects `text` or `json`; default is `text`."; "Prerequisite: Pulumi CLI version 3.257.0 or later."; "Docs conflict: Current command reference is generated for Pulumi CLI v3.261.0, later than the card’s v3.257.0. The official docs describe `pulumi do` as research preview; a later Pulumi announcement says it became generally available in v3.258.0."

### pulumi state get shows an individual resource (2026-08-13)
- slug: pulumi-state-get-shows-an-individual-resource-6570464ef614
- score: 0.93

How to use it:

When reviewing or debugging a stack, run `pulumi state get` with a resource URN or auto-assigned identifier to display that resource’s tracked state, including its URN, ID, inputs, and outputs.

Examples:

```
pulumi state get <resource>
```

```
pulumi state get <resource> --output json
```

- why_it_matters: Inspect one resource in Pulumi state while debugging or reviewing a stack.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.257.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_state_get/>
- gotchas: "Version: v3.257.0"; "resource: Resource URN or auto-assigned identifier. Omit it to be prompted for one."; "--output: Output format: `default` or `json`; default is `default`."; "--show-secrets: Show secret values in plaintext instead of `[secret]`."; "-s, --stack: Stack to operate on; defaults to the current stack."

### pulumi env provider login commands can export SDK environment variables (2026-08-04)
- slug: pulumi-env-provider-login-commands-can-export-sdk-environment-variables-d7d973b88a41
- score: 0.93

How to use it:

When logging in to an AWS, Azure, or GCP provider, add `--export-env-vars` to set standard SDK environment variables from the login outputs.

- why_it_matters: Log in to an AWS, Azure, or GCP provider and make the login outputs available through standard SDK environment variables.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.256.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_env_provider_azure-login/>
- gotchas: "Version: 3.256.0"; "--export-env-vars: Also set standard SDK environment variables referencing the login outputs."; "Prerequisite: Pulumi CLI; these provider commands are marked experimental."; "The `--export-env-vars` flag is optional."; "Docs conflict: The available CLI reference is generated for v3.270.0 and does not document `--export-env-vars`; the v3.256.0 release note states the flag was added in that version."

### pulumi up, preview, and destroy accept --ignore-protect (2026-08-04)
- slug: pulumi-up-preview-and-destroy-accept-ignore-protect-9c66b527bae7
- score: 0.98

How to use it:

When an update, preview, or destroy must delete a protected resource, add `--ignore-protect` to that Pulumi command. It allows the operation to proceed without first unprotecting the resource in state.

Examples:

```
pulumi up --ignore-protect
```

```
pulumi preview --ignore-protect
```

```
pulumi destroy --ignore-protect
```

- why_it_matters: Delete a protected resource during an update, preview, or destroy operation.
- before: Unprotect the resource first, either by setting `protect: false` and running `pulumi up`, or with `pulumi state unprotect`; then delete it in a subsequent update.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.256.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_up/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_preview/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_destroy/>, <https://www.pulumi.com/docs/iac/concepts/resources/options/protect/>
- gotchas: "Version: 3.256.0"; "--ignore-protect: Ignore the protect resource option for this operation, allowing protected resources to be deleted. The current docs warn deleted resources cannot be recovered."; "Docs conflict: The CLI reference is generated for v3.268.0, newer than the card’s v3.256.0; its flag descriptions also mention replacement in `up` and `preview`."

### Pulumi policy packs can use executable binaries (2026-07-28)
- slug: pulumi-policy-packs-can-use-executable-binaries-437c7c7bbdf1
- score: 0.96

How to use it:

When running a Pulumi preview with an executable policy pack, pass the executable’s path to `--policy-pack`. A neighboring `PulumiPolicy.yaml` may provide the pack’s `version` and `description`.

Examples:

```
pulumi preview --policy-pack <path-to-executable>
```

- why_it_matters: Run a policy pack implemented as an executable binary.
- before: Policy-pack paths that were not files went through language-runtime lookup; the change runs a file path directly as an executable.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.255.0>, <https://github.com/pulumi/pulumi/pull/24052>, <https://www.pulumi.com/docs/discovery-governance/policy/cli/>
- gotchas: "Version: 3.255.0"; "--policy-pack <path> (required): Path to the local policy pack; for this task, use the executable binary’s path."; "PulumiPolicy.yaml: version: Sets the policy pack version."; "PulumiPolicy.yaml: description: Sets the policy pack description."; "Prerequisite: The policy pack must be present on disk where Pulumi is run."; "Prerequisite: For an executable pack, the path passed must be a file; Pulumi runs that executable directly."; "The executable binary must be the policy pack path."

### pulumi stack history events adds --summary (2026-07-28)
- slug: pulumi-stack-history-events-adds-summary-eedb1a4db96a
- score: 0.94

How to use it:

When reviewing a past update, run `pulumi stack history events <update-id> --summary --output json` to get a compact summary with error diagnostics and failed-resource markers.

Examples:

```
pulumi stack history events <update-id> --summary --output json
```

- why_it_matters: Review a past stack update's events in the same summary shape used by live JSON output.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.255.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_history_events/>
- gotchas: "Version: 3.255.0"; "<update-id> (required): ID of the stack update whose events to retrieve."; "--summary: Reduce the update’s events to one summary document with error diagnostics; implies `--all`."; "--output: Output format; supported values are `default` and `json` (default `default`)."; "Prerequisite: Requires the Pulumi Cloud backend."

### Import files can declare and reference explicit providers (2026-07-23)
- slug: import-files-can-declare-and-reference-explicit-providers-19e699de2703
- score: 0.96

How to use it:

When importing resources that need an explicit provider, declare the provider in `resources` and reference its name from each imported resource’s `provider` field. Run `pulumi import --file <path>` to import the JSON file.

Examples:

```
pulumi import --file <path-to-import.json>
```

```
{
  "resources": [
    { "type": "pulumi:providers:aws", "name": "my-prov" },
    { "type": "aws:s3/bucket:Bucket", "name": "thing", "id": "<resource-id>", "provider": "my-prov" }
  ],
  "providerInputs": { "my-prov": { "region": "eu-west-1" } }
}
```

- why_it_matters: Import resources with explicit providers from an import file.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.254.0>, <https://github.com/pulumi/pulumi/pull/23972>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_import/>, <https://www.pulumi.com/docs/iac/guides/migration/import/>
- gotchas: "Version: 3.254.0"; "resources (required): List of resources to import."; "resources[].provider: Name of the provider resource; the docs say the referenced name must be in `nameTable`."; "providerInputs: Release-note example maps a provider name to its inputs; official import schema documentation does not document this key or its sub-keys."; "--file (required): Path to the JSON-encoded file containing resources to import."; "Prerequisite: Use a Pulumi stack and have the provider configured so it can locate the target resource."; "Docs conflict: The current CLI reference is generated for Pulumi CLI v3.268.0, newer than the card’s v3.254.0. Its import-file schema does not document `providerInputs`; the release-note example is retained as the evidence for that key."

### Pulumi CLI redacts secrets in property values in logs (2026-07-23)
- slug: pulumi-cli-redacts-secrets-in-property-values-in-logs-eeb37e81003d
- score: 0.90

How to use it:

When inspecting Pulumi CLI logs, rely on default best-effort redaction of secrets in property values. To allow secrets through as before, run the Pulumi command with `--logsecrets` (redaction is not guaranteed to remove every secret).

Examples:

```
pulumi <command> --logsecrets
```

- why_it_matters: Inspect Pulumi logs that may contain secret property values.
- before: Pulumi logs allowed secrets through, without the new redaction behavior.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.254.0>, <https://github.com/pulumi/pulumi/pull/23931>
- gotchas: "Version: 3.254.0"; "--logsecrets: Disables secret redaction in logs and allows secrets through as before."; "Redaction is a best effort and does not guarantee that logs contain no secrets."

### Pulumi deployment commands accept --override-env (2026-07-23)
- slug: pulumi-deployment-commands-accept-override-env-e86614a8221a
- score: 0.96

How to use it:

When a Pulumi run needs different imported environments, use `--override-env` with `up`, `preview`, `destroy`, or `refresh`; the flag substitutes environments for one run without editing stack config. The official docs found do not document the flag’s syntax or value format.

- why_it_matters: Run an up, preview, destroy, or refresh with imported environments substituted for a single run.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.254.0>
- gotchas: "Version: 3.254.0"; "--override-env: Substitutes imported environments for a single run; the required value format is not documented on the official pages found."; "The substitution applies to a single run."; "Stack config is not edited."

### pulumi policy new accepts --runtime-options (2026-07-23)
- slug: pulumi-policy-new-accepts-runtime-options-d2dbcc180cfe
- score: 0.93

How to use it:

When creating a policy pack with runtime-specific settings, run `pulumi policy new` with `--runtime-options` and comma-separated `key=value` options.

Examples:

```
pulumi policy new aws-python --runtime-options toolchain=uv
```

```
pulumi policy new <template> --runtime-options <key1>=<value1>,<key2>=<value2>
```

- why_it_matters: Create a Pulumi policy pack with runtime options.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.254.0>, <https://github.com/pulumi/pulumi/pull/23992>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_policy_new/>
- gotchas: "Version: 3.254.0"; "template: Template name or URL; if omitted, suggested templates are shown interactively."; "--runtime-options: Additional language runtime options, formatted as comma-separated `key=value` pairs. The docs do not enumerate allowed keys or values."; "Prerequisite: Use Pulumi CLI v3.254.0 or later for this flag."

### Go Automation API refresh accepts --import-pending-creates (2026-07-14)
- slug: go-automation-api-refresh-accepts-import-pending-creates-0511244d2d82
- score: 0.93

How to use it:

When a Go Automation API refresh needs to resolve pending creates, pass `optrefresh.ImportPendingCreates` to `Stack.PreviewRefresh` or `Stack.Refresh`, mapping each resource URN to its provider-assigned physical ID.

Examples:

```
result, err := stack.PreviewRefresh(ctx, optrefresh.ImportPendingCreates([]optrefresh.PendingCreate{{URN: "<resource-urn>", ID: "<provider-id>"}}))
```

```
result, err := stack.Refresh(ctx, optrefresh.ImportPendingCreates([]optrefresh.PendingCreate{{URN: "<resource-urn>", ID: "<provider-id>"}}))
```

- why_it_matters: When previewing or running a refresh through the Go Automation API, pass the pending-creates import option when needed.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.253.0>, <https://pkg.go.dev/github.com/pulumi/pulumi/sdk/v3/go/auto/optrefresh>
- gotchas: "Version: 3.253.0"; "optrefresh.ImportPendingCreates(creates []PendingCreate): Imports the given pending creates into state, mapping each resource URN to its provider-assigned physical ID."; "PendingCreate.URN (required): Pulumi resource URN of the pending create."; "PendingCreate.ID (required): Provider-assigned physical ID of the created resource."; "Prerequisite: Use Pulumi Go SDK v3.253.0 or later; `ImportPendingCreates` and `PendingCreate` were added in v3.253.0."

### pulumi env open-request accepts --reason (2026-07-13)
- slug: pulumi-env-open-request-accepts-reason-26dd9b9bb7a9
- score: 0.91

How to use it:

When requesting access to a protected environment, include `--reason` to explain the request to approvers.

Examples:

```
pulumi env open-request <org-name>/<project-name>/<environment-name> --reason="<reason>"
```

- why_it_matters: Explain an environment open request to its approvers when requesting access for a coding workflow.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.252.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_env_open-request/>, <https://www.pulumi.com/docs/esc/administration/approvals/>
- gotchas: "Version: 3.252.0"; "<org-name>/<project-name>/<environment-name> (required): Environment name, optionally qualified with its organization and project."; "--reason <string>: Explains why the environment is being opened; shown to approvers."; "Prerequisite: The request is for a protected environment; it must be approved before access."; "Prerequisite: Open approvals require the organization’s Approvals feature; the requester must have `open` permission on the environment."

### PCL invokes multi-argument functions positionally (2026-07-08)
- slug: pcl-invokes-multi-argument-functions-positionally-e306fe759936
- score: 0.97

How to use it:

When invoking a function declared with `multiArgumentInputs`, pass one positional argument per input; put optional `invokeOptions` last. Use `null` for an omitted optional input when supplying options.

Examples:

```
invoke("pkg:index:fn", <arg1>, <arg2>)
```

```
invoke("pkg:index:fn", <arg1>, null, { provider = <provider> })
```

- why_it_matters: When writing PCL that invokes a function declared with `multiArgumentInputs`, pass each input positionally and place optional invoke options last.
- before: The release note states that these functions previously took a single object argument, such as `invoke("pkg:index:fn", { p1 = arg1, p2 = arg2 })`; this form is now rejected for functions declared with `multiArgumentInputs`.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.251.0>, <https://github.com/pulumi/pulumi/pull/23571>, <https://github.com/pulumi/pulumi/blob/v3.251.0/pkg/codegen/pcl/invoke_positional.go>, <https://github.com/pulumi/pulumi/blob/v3.251.0/pkg/codegen/pcl/invoke.go>
- gotchas: "Version: v3.251.0"; "function token (required): String token identifying the provider function."; "positional input arguments (required): Pass one argument for each declared input, in declaration order. Optional inputs can be `null`; requiredness and types depend on that function’s schema."; "invokeOptions: Optional final object after all input positions. Documented keys: `provider`, `parent`, `version`, `pluginDownloadUrl`, `dependsOn`. The source does not state that these keys are mutually exclusive."; "Prerequisite: Use Pulumi v3.251.0 or later for this PCL behavior."; "This positional invocation behavior applies to functions declared with `multiArgumentInputs`."; "The optional `invokeOptions` object follows one positional argument per input."; "Use `null` for an omitted optional input when supplying options."; "Calls with more than one argument per input plus the options object are rejected."; "PCL and program generators continue to observe the normalized object form."

### pulumi config env list supports --output (2026-07-01)
- slug: pulumi-config-env-list-supports-output-b76ff8b714d0
- score: 0.92

How to use it:

When a script lists environments imported into a stack’s configuration, run `pulumi config env list --output <format>` to select the output format.

Examples:

```
pulumi config env list --output json
```

- why_it_matters: When listing config environments in a script, request output in the needed format.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.249.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_config_env_list/>
- gotchas: "Version: 3.249.0"; "--output <format>: Select output format: `default` or `json`; defaults to `default`."; "Prerequisite: The `--output` flag was added in Pulumi CLI v3.249.0."

### pulumi plugin list supports --output (2026-07-01)
- slug: pulumi-plugin-list-supports-output-827097865185
- score: 0.94

How to use it:

When a script lists Pulumi plugins, pass `--output` with the required format. Supported formats are `default` and `json`.[Pulumi CLI docs](https://www.pulumi.com/docs/iac/cli/commands/pulumi_plugin_list/)

Examples:

```
pulumi plugin list --output json
```

- why_it_matters: When listing Pulumi plugins in a script, request output in the needed format.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.249.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_plugin_list/>
- gotchas: "Version: 3.249.0"; "--output <format>: Select output format: `default` or `json`; defaults to `default`."; "Prerequisite: Use Pulumi CLI v3.249.0 or later for the change announced in that release."

### pulumi policy analyze can analyze an exported state file (2026-07-01)
- slug: pulumi-policy-analyze-can-analyze-an-exported-state-file-65b0839b6801
- score: 0.96

How to use it:

When analyzing exported Pulumi state without a stack or backend login, run `pulumi policy analyze` with `--file` pointing to the state file and a local policy pack.

Examples:

```
pulumi policy analyze --file <state-file> --policy-pack <policy-pack-path>
```

- why_it_matters: When analyzing a repository's exported Pulumi state without a stack or backend login, pass the state file to policy analysis.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.249.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_policy_analyze/>
- gotchas: "Version: 3.249.0"; "--file <state-file> (required): Analyze a state file produced by `pulumi stack export` instead of a live stack; this file workflow does not require a stack or backend login."; "--policy-pack <policy-pack-path> (required): Path to a policy pack to run during analysis; command analyzes against one or more local policy packs."; "Prerequisite: Use a state file produced by `pulumi stack export` and provide a local policy pack."; "The file must be a state file produced by `pulumi stack export`."; "The stated workflow does not require a stack or backend login."

### pulumi policy list and policy group list support --output (2026-07-01)
- slug: pulumi-policy-list-and-policy-group-list-support-output-715fee39967c
- score: 0.95

How to use it:

When a script lists policy packs or policy groups, pass `--output <format>` to select the output format. The documented formats are `default` and `json`.

Examples:

```
pulumi policy list [<org-name>] --output json
```

```
pulumi policy group list [<org-name>] --output json
```

- why_it_matters: When listing policies or policy groups in a script, request output in the needed format.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.249.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_policy_list/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_policy_group_list/>
- gotchas: "Version: 3.249.0"; "--output <format>: Select output format: `default` or `json`; default is `default`."; "[org-name]: Organization whose policy packs or policy groups are listed."

### pulumi project list supports --output (2026-07-01)
- slug: pulumi-project-list-supports-output-9f8766039c1f
- score: 0.96

How to use it:

When a script needs a particular format for a Pulumi project listing, run `pulumi project list --output <format>`. The documented formats are `default` and `json`.

Examples:

```
pulumi project list --output json
```

- why_it_matters: When listing Pulumi projects in a script, request output in the needed format.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.249.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_project_list/>
- gotchas: "Version: 3.249.0"; "--output <format>: Selects the output format: `default` or `json`; default is `default`."; "Prerequisite: The command lists projects accessible to the current user."

### pulumi stack list, history, and tag list support --output (2026-07-01)
- slug: pulumi-stack-list-history-and-tag-list-support-output-c798c1c99044
- score: 0.93

How to use it:

When a script reviews stacks, stack history, or stack tags, pass `--output <format>` to the matching Pulumi command. The documented formats are `default` and `json` (default: `default`).

Examples:

```
pulumi stack list --output <format>
```

```
pulumi stack history --output <format>
```

```
pulumi stack tag list --output <format>
```

- why_it_matters: When reviewing stacks, stack history, or stack tags in a script, request output in the needed format.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.249.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_list/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_history/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_tag_list/>
- gotchas: "Version: 3.249.0"; "--output <format>: Selects output format: `default` or `json`; defaults to `default`."; "<format>: Allowed values are `default` and `json`; these values are alternatives."

### pulumi config set preserves piped newlines with --raw (2026-06-18)
- slug: pulumi-config-set-preserves-piped-newlines-with-raw-a03331edfe5d
- score: 0.94

How to use it:

When setting a value from stdin and preserving trailing newlines, pipe the input to `pulumi config set` with `--raw`.

Examples:

```
printf 'hello\n' | pulumi config set --raw <key>
```

- why_it_matters: Set a configuration value from stdin while preserving its newline characters.
- before: Without `--raw`, trailing newlines from stdin are stripped.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.247.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_config_set/>
- gotchas: "Version: v3.247.0"; "<key> (required): Configuration key to set."; "--raw (required): When setting the value through stdin, do not trim trailing newlines."; "The flag applies when input is piped through stdin."

### pulumi do accepts --provider to use existing provider state (2026-06-18)
- slug: pulumi-do-accepts-provider-to-use-existing-provider-state-19e07e0d90d2
- score: 0.91

How to use it:

When you want `pulumi do` to use configuration from an existing provider state, pass `--provider`.

- why_it_matters: Run `pulumi do` using provider configuration from an existing provider state.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.247.0>, <https://github.com/pulumi/pulumi/pull/23560>
- gotchas: "Version: v3.247.0"; "--provider: Selects an existing provider resource so `pulumi do` can use its configuration. The official source confirms the flag but does not document its argument syntax here."; "Provider configuration is pulled from existing provider state."

### pulumi logs ls lists automatic log files (2026-06-11)
- slug: pulumi-logs-ls-lists-automatic-log-files-11b9c54afd33
- score: 0.96

How to use it:

When you need to see the automatic log files available to the Pulumi CLI workflow, run `pulumi logs ls`.

Examples:

```
pulumi logs ls
```

- why_it_matters: List the automatic log files available for a Pulumi CLI workflow.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.246.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_logs_ls/>
- gotchas: "Version: v3.246.0"; "--output <format>: Select output format: `default` (the default) or `json`."; "Docs conflict: Pulumi’s later v3.247.0 CLI docs show `pulumi logs list [flags]` instead of `pulumi logs ls`; that newer syntax is not used here."

### Pulumi SDK customTimeouts adds read timeout (2026-06-11)
- slug: pulumi-sdk-customtimeouts-adds-read-timeout-caea36fc0e13
- score: 0.93

How to use it:

When setting a timeout for a custom resource’s read operation, pass `customTimeouts: { read: "<duration>" }` in its resource options. The provider must support custom timeouts for that resource.

Examples:

```
const resource = new <Resource>("<name>", <args>, { customTimeouts: { read: "5m" } });
```

- why_it_matters: Set a timeout for resource read operations in a Pulumi program.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.246.0>, <https://www.pulumi.com/docs/reference/pkg/nodejs/pulumi/pulumi/interfaces/CustomTimeouts.html>, <https://www.pulumi.com/docs/iac/concepts/resources/options/customtimeouts/>
- gotchas: "Version: v3.246.0"; "customTimeouts: Optional resource option containing custom operation timeouts."; "customTimeouts.read: Optional read timeout; a duration string such as `5m`, `40s`, or `1d`."; "customTimeouts.create: Optional create timeout, represented as a duration string."; "customTimeouts.update: Optional update timeout, represented as a duration string."; "customTimeouts.delete: Optional delete timeout, represented as a duration string."; "Prerequisite: Use on a custom resource; the option has no direct effect on component resources."; "Prerequisite: The particular resource’s provider implementation must support custom timeouts; otherwise the setting may be ignored with a warning."

### pulumi new aliases pulumi project new (2026-05-22)
- slug: pulumi-new-aliases-pulumi-project-new-684f170543ca
- score: 0.96

How to use it:

To start a new project, run `pulumi new`; in v3.243.0 it aliases `pulumi project new`.

Examples:

```
pulumi new [template|url]
```

- why_it_matters: Start a new Pulumi project using the short CLI command.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.243.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_new/>, <https://www.pulumi.com/docs/iac/cli/>
- gotchas: "Version: 3.243.0"; "template|url: Template name or source URL. If omitted, Pulumi presents suggested templates interactively."; "Prerequisite: Install the Pulumi CLI."; "Docs conflict: The CLI command reference is generated for v3.268.0, newer than the card’s v3.243.0. It documents `pulumi new`; the v3.243.0 release note states that it aliases `pulumi project new`."

### Pulumi CLI adds `pulumi deployment get` (2026-05-19)
- slug: pulumi-cli-adds-pulumi-deployment-get-14454869ef14
- score: 0.95

How to use it:

When debugging or reviewing a Pulumi deployment workflow, run `pulumi deployment get` with the deployment UUID or stack version to retrieve its details.

Examples:

```
pulumi deployment get <deployment-version> [flags]
```

- why_it_matters: Inspect a specific deployment while debugging or reviewing a Pulumi deployment workflow.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.242.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_deployment_get/>
- gotchas: "Version: v3.242.0"; "<deployment-version> (required): Deployment UUID or per-stack version number."; "--output: Output format: `default` or `json`; defaults to `default`."; "--stack, -s: Stack name; defaults to the current stack."; "Prerequisite: The command is marked experimental in the CLI documentation."; "Docs conflict: The command reference is generated for Pulumi CLI v3.249.0, later than the card’s v3.242.0; the page does not state whether its behavior differs."

### Pulumi Insights CLI adds account scan listing and retrieval (2026-05-19)
- slug: pulumi-insights-cli-adds-account-scan-listing-and-retrieval-552fa60c4097
- score: 0.92

How to use it:

When debugging an Insights scan, list recent scan IDs with `pulumi insights account scan list <account>`, then inspect one workflow run with `pulumi insights account scan get <account> <scan-id> --output json`.

Examples:

```
pulumi insights account scan list <account> --org <org> --count 5
```

```
pulumi insights account scan get <account> <scan-id> --org <org> --output json
```

- why_it_matters: Find a recent Insights scan and inspect its workflow run while debugging a scan.
- before: The CLI had no way to discover scan IDs; scan list was added to provide recent IDs that could be passed to `pulumi insights account scan log`.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.242.0>, <https://github.com/pulumi/pulumi/pull/23255>
- gotchas: "Version: v3.242.0"; "<account> (required): Insights account name; scan list on a parent account includes its child accounts."; "<scan-id> (required): ID of the scan to retrieve."; "--org <org>: Select the organization; accepted as a Cloud-Ready CLI global flag."; "--count <n>: Set the scan list pagination count; `0` means `--all`. `--count` and `--all` are mutually exclusive."; "--all: List all scans; mutually exclusive with `--count`."; "--output json: Emit JSON output containing full per-job and per-step structure."

### Pulumi Neo adds noninteractive single-prompt output (2026-05-19)
- slug: pulumi-neo-adds-noninteractive-single-prompt-output-aa0788777c06
- score: 0.95

How to use it:

When running one Pulumi Neo prompt in a noninteractive workflow, pass the prompt to `pulumi neo` with `--print` (or `-p`) to print the final response to stdout.

Examples:

```
pulumi neo --print "<prompt>"
```

- why_it_matters: Run one Pulumi Neo prompt in a noninteractive coding workflow and capture the final response from stdout.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.242.0>, <https://github.com/pulumi/pulumi/blob/v3.242.0/pkg/cmd/pulumi/neo/neo.go>, <https://github.com/pulumi/pulumi/pull/23245>, <https://www.pulumi.com/docs/ai/neo/pulumi-cli/>
- gotchas: "Version: v3.242.0"; "prompt (required): One prompt argument; required in noninteractive mode."; "--print, -p (required): Run a single prompt noninteractively, print the final response to stdout, and exit."; "--approval-mode: Controls tool-call approvals. In print mode, an unset value defaults to `auto`; explicit `manual` is incompatible because there is no UI to approve calls."; "Prerequisite: Authenticate to Pulumi Cloud with `pulumi login`."; "Prerequisite: Run from a directory containing `Pulumi.yaml`."; "Prerequisite: Use Pulumi CLI v3.242.0 or later for this option."; "The option runs a single prompt non-interactively."

### pulumi deployment cancel command (2026-05-18)
- slug: pulumi-deployment-cancel-command-ba50bab4616e
- score: 0.93

How to use it:

When a Pulumi Cloud deployment is in progress, cancel it with `pulumi deployment cancel <deployment-id> --yes`; queued deployments are removed from the queue. [Pulumi CLI docs](https://www.pulumi.com/docs/iac/cli/commands/pulumi_deployment_cancel/)

Examples:

```
pulumi deployment cancel <deployment-id> --yes
```

- why_it_matters: Stop an in-progress Pulumi Cloud deployment during a repository workflow.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.241.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_deployment_cancel/>
- gotchas: "Version: v3.241.0"; "<deployment-id> (required): Deployment identifier to cancel."; "--yes, -y: Skip confirmation prompts and proceed with cancellation."; "--stack, -s: Stack to operate on; defaults to the current stack."; "--output: Output format: `default` or `json`; defaults to `default`."

### pulumi destroy supports JSON operation summaries (2026-05-18)
- slug: pulumi-destroy-supports-json-operation-summaries-7684a7c048b2
- score: 0.97

How to use it:

When a script needs structured output from a Pulumi destroy, run `pulumi destroy --output json` to serialize the operation result as JSON.

Examples:

```
pulumi destroy --output json
```

- why_it_matters: Review a Pulumi destroy result in a script that needs structured output.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.241.0>, <https://github.com/pulumi/pulumi/pull/22875>
- gotchas: "Version: v3.241.0"; "--output json: Serialize the destroy diffs, operations, and overall output as JSON."; "Docs conflict: Pulumi’s current CLI reference, generated for v3.268.0, documents `--json` for JSON output rather than `--output json`; this differs from the v3.241.0 release note. https://www.pulumi.com/docs/iac/cli/commands/pulumi_destroy/"

### pulumi policy compliance list groups results by entity (2026-05-18)
- slug: pulumi-policy-compliance-list-groups-results-by-entity-e856fffe1a40
- score: 0.91

How to use it:

When reviewing policy compliance results, run `pulumi policy compliance list` to list results grouped by entity.

Examples:

```
pulumi policy compliance list
```

- why_it_matters: Review policy compliance results grouped by entity.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.241.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_policy_compliance_list/>
- gotchas: "Version: v3.241.0"; "Docs conflict: The current command reference is generated for Pulumi CLI v3.270.0, newer than the card's v3.241.0; no different behavior was found in the retrieved documentation."

### pulumi preview supports JSON operation summaries (2026-05-18)
- slug: pulumi-preview-supports-json-operation-summaries-dd300dd8e997
- score: 0.98

How to use it:

When a script needs structured output from a preview, run `pulumi preview --output json` to emit a JSON operation summary to stdout.

Examples:

```
pulumi preview --output json
```

- why_it_matters: Review a Pulumi preview result in a script that needs structured output.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.241.0>, <https://github.com/pulumi/pulumi/pull/22927>
- gotchas: "Version: v3.241.0"; "--output (required): Select the output format; use `json` for the operation summary. Mutually exclusive with `--json`."; "json (value for --output) (required): Emit an object containing `result`, `duration`, and per-operation-kind counts in `summary`."; "Docs conflict: The current Pulumi CLI reference is generated for v3.268.0 and documents `--json` for serialized preview diffs, operations, and overall output; it does not document `--output`. This differs from the v3.241.0 release note, so that newer reference was not used to describe the new flag."

### pulumi refresh supports JSON operation summaries (2026-05-18)
- slug: pulumi-refresh-supports-json-operation-summaries-8b1feba73c5c
- score: 0.96

How to use it:

When a script needs structured output from a Pulumi refresh, run `pulumi refresh --output json` to get a JSON summary of the operation result.

Examples:

```
pulumi refresh --output json
```

- why_it_matters: Review a Pulumi refresh result in a script that needs structured output.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.241.0>
- gotchas: "Version: v3.241.0"; "--output json (required): The v3.241.0 release note says this option makes `pulumi refresh` emit a structured JSON summary of the operation result."; "Docs conflict: The current Pulumi CLI reference is generated for v3.268.0 and documents `-j, --json` for JSON refresh output, rather than the `--output json` syntax stated in the v3.241.0 release note. Its documented behavior is to serialize refresh diffs, operations, and overall output as JSON: https://www.pulumi.com/docs/iac/cli/commands/pulumi_refresh/"

### pulumi stack drift commands inspect detection runs and status (2026-05-18)
- slug: pulumi-stack-drift-commands-inspect-detection-runs-and-status-de9d5477ac48
- score: 0.94

How to use it:

When checking drift runs and status for a Pulumi stack, run `pulumi stack drift list` to list runs and `pulumi stack drift status` to show current status. Both default to the current stack; pass `--stack` to select one explicitly.

Examples:

```
pulumi stack drift list [--stack <stack>] [--count <number> | --all] [--output default|json]
```

```
pulumi stack drift status [--stack <stack>] [--output default|json]
```

- why_it_matters: Check drift detection runs and status for a Pulumi stack.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.241.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_drift_list/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_drift_status/>
- gotchas: "Version: v3.241.0"; "--stack <stack>: Stack name to operate on; defaults to the current stack."; "--count <number>: Number of drift runs to display; fetches multiple pages if needed. Mutually exclusive with `--all`."; "--all: Fetch every drift run; mutually exclusive with `--count`."; "--output default|json: Output format; supported values are `default` and `json`, with `default` as the default."; "Docs conflict: Current CLI command pages are generated for v3.260.0, newer than the card’s v3.241.0; version-specific differences were not established."

### pulumi stack history events retrieves update engine events (2026-05-18)
- slug: pulumi-stack-history-events-retrieves-update-engine-events-64dc696a8d24
- score: 0.96

How to use it:

When debugging an update stored in Pulumi Cloud, retrieve its engine events with `pulumi stack history events <update-id>`. Use `--all` for every event or `--count <N>` for at least N; those options are mutually exclusive.

Examples:

```
pulumi stack history events <update-id>
```

```
pulumi stack history events <update-id> --all --output json
```

```
pulumi stack history events <update-id> --urn <resource-urn> --event-type <numeric-code>
```

- why_it_matters: Debug a Pulumi Cloud update by inspecting its engine events.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.241.0>, <https://github.com/pulumi/pulumi/pull/23109>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_history_events/>
- gotchas: "Version: v3.241.0"; "<update-id> (required): Identifies the update whose engine events to retrieve."; "--all: Return every event for the update; mutually exclusive with `--count`."; "--count <N>: Fetch enough pages to return at least N events; mutually exclusive with `--all`."; "--event-type <code>: Filter by numeric Pulumi Cloud engine-event type code; repeatable."; "--urn <resource-urn>: Filter events to one resource URN."; "--include-non-activated: Include events not yet marked activated."; "--output <format>: Select `default` or `json` output; JSON emits raw engine event payloads."; "--stack <stack>: Select the stack to operate on; defaults to the current stack."; "Prerequisite: The command requires the Pulumi Cloud backend."; "Docs conflict: The current CLI reference is generated for v3.268.0 and includes `--summary`, which is absent from the v3.241.0 implementation description. Do not rely on that newer option for this card."

### pulumi stack schedule commands manage deployment schedules (2026-05-18)
- slug: pulumi-stack-schedule-commands-manage-deployment-schedules-bf462e353a39
- score: 0.98

How to use it:

When inspecting or maintaining a Pulumi stack’s scheduled deployment actions, use `pulumi stack schedule get|list|new|edit|remove` with the schedule ID and schedule-kind-specific options as needed.

Examples:

```
pulumi stack schedule get <schedule-id> [--stack <stack>] [--output default|json]
pulumi stack schedule list [--stack <stack>] [--count <N>] [--output default|json]
```

```
pulumi stack schedule new --kind raw --operation refresh --cron '0 */4 * * *'
pulumi stack schedule new --kind drift --cron '0 */4 * * *' --auto-remediate
pulumi stack schedule new --kind ttl --once 2027-01-01T00:00:00Z --delete-after-destroy
```

```
pulumi stack schedule edit <schedule-id> --cron '0 */6 * * *'
pulumi stack schedule remove <schedule-id> --yes
```

- why_it_matters: Inspect or maintain scheduled deployment actions for a Pulumi stack.
- before: Before v3.241.0, these five schedule subcommands had not yet been added to the CLI, according to the release note.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.241.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_get/ ; https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_list/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_new/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_edit/ ; https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_remove/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_get/ ; https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_edit/ ; https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_remove/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_new/ ; https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_edit/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_get/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_list/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_new/ ; https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_remove/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_schedule_edit/>
- gotchas: "Version: v3.241.0"; "<schedule-id> (required): Schedule identifier used by `get`, `edit`, and `remove`."; "--kind (required): Schedule kind: `raw`, `drift`, or `ttl`."; "--cron (required): UTC cron expression; required for drift and one of `--cron` or `--once` for raw. Mutually exclusive with `--once` for raw. On edit, valid for raw and drift."; "--once (required): ISO 8601 one-time execution timestamp; required for TTL and one of `--once` or `--cron` for raw. Mutually exclusive with `--cron` for raw. On edit, valid for raw and TTL."; "--operation (required): Raw-only Pulumi operation: `update`, `preview`, `refresh`, or `destroy`."; "--auto-remediate: Drift-only; automatically run a remediation update when drift is detected."; "--delete-after-destroy: TTL-only; delete the stack from Pulumi Cloud after successfully destroying its resources."; "--stack: Stack name; defaults to the current stack."; "--count: List at most the first N schedules; 0 (default) shows all."; "--output: Output format: `default` or `json`; defaults to `default`."; "--yes: For `new`, skip prompts and fail if required values are missing. For `remove`, skip confirmation prompts."; "--schedule-id argument to `edit` (required): Identifies the schedule to edit; only passed fields change, and other fields are preserved."; "Prerequisite: The stack must have deployment settings configured before creating a schedule."; "Docs conflict: The official CLI pages read are generated for Pulumi CLI v3.270.0, newer than the card’s v3.241.0 version. The pages document the same five subcommands; no differing behavior was established."

### pulumi deployment list lists stack deployment executions (2026-05-14)
- slug: pulumi-deployment-list-lists-stack-deployment-executions-ceeb7d7540f3
- score: 0.95

How to use it:

When reviewing deployment executions for a stack, run `pulumi deployment list`; specify `--stack` to select a stack, or omit it to use the current stack.

Examples:

```
pulumi deployment list --stack <organization>/<project>/<stack>
```

```
pulumi deployment list --stack <organization>/<project>/<stack> --output json
```

- why_it_matters: Review deployment executions associated with a stack.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.239.0>, <https://github.com/pulumi/pulumi/pull/23114>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_login/>
- gotchas: "Version: v3.239.0"; "--stack, -s <stack-ref>: Stack to list deployments for; defaults to the current stack."; "--page <n>: Page number; defaults to 1 and must be at least 1."; "--page-size <n>: Results per page; defaults to 10 and accepts 1–100."; "--sort <field>: Server-side sort field."; "--asc: Sort ascending; default is descending."; "--output <format>: Output format: `default` (table) or `json`; defaults to `default`."; "Prerequisite: Use the Pulumi CLI with a Pulumi Cloud backend and authenticate with `pulumi login`; this command lists stack deployments from Pulumi Cloud."; "Docs conflict: The current Pulumi CLI reference is generated for v3.268.0 and documents `--count` and `--all` (mutually exclusive) instead of the v3.239.0 release implementation's `--page` and `--page-size`. Use the release implementation's flags for this card's stated version: https://www.pulumi.com/docs/iac/cli/commands/pulumi_deployment_list/"

### pulumi import supports structured JSON output (2026-05-14)
- slug: pulumi-import-supports-structured-json-output-6a2bb80f04d3
- score: 0.96

How to use it:

When importing an existing resource and you need a programmatically consumable result, run `pulumi import` with `--output json` and the resource’s type token, name, and ID. The JSON output summarizes the operation result.

Examples:

```
pulumi import <type-token> <name> <id> --output json
```

- why_it_matters: When importing resources and consuming the result programmatically, request a structured JSON summary.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.239.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_import/>, <https://www.pulumi.com/docs/iac/guides/migration/import/>
- gotchas: "Version: v3.239.0"; "<type-token> (required): Pulumi resource type token; find it in the resource’s Import documentation."; "<name> (required): Name to assign to the imported resource."; "<id> (required): Cloud provider resource identifier used to look up the resource."; "--output json (required): For this task, requests the structured JSON summary of the import operation result."; "Prerequisite: Run the command for an existing Pulumi stack; the CLI imports resources into that stack."; "Docs conflict: The current Pulumi CLI reference is generated for v3.270.0 and documents `-j, --json` for JSON output, rather than the release note’s `--output json` syntax. This newer-version documentation does not establish the flag spelling for v3.239.0."

### pulumi stack get retrieves detailed stack information (2026-05-14)
- slug: pulumi-stack-get-retrieves-detailed-stack-information-3d19f7a1d473
- score: 0.93

How to use it:

When you need detailed information about a stack, run `pulumi stack get`; it shows stack state, including resources, outputs, and last update.

Examples:

```
pulumi stack get
```

```
pulumi stack get --stack <org>/<project>/<stack> --output json
```

- why_it_matters: Inspect detailed information for a stack from the CLI.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.239.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_get/>, <https://www.pulumi.com/blog/better-cli-interactions-for-agents-and-humans/>
- gotchas: "Version: v3.239.0"; "--stack <stack>: Select the stack to operate on; defaults to the current stack."; "--output <format>: Output format: `default` or `json`; defaults to `default`."; "--show-ids: Display each resource's provider-assigned unique ID."; "--show-name: Display only the stack name."; "--show-secrets: Display stack outputs marked secret in plaintext."; "--show-urns: Display each resource's Pulumi-assigned globally unique URN."; "Docs conflict: The available CLI reference is generated for Pulumi CLI v3.268.0, later than the card's v3.239.0; it does not establish whether command behavior or flags differ in v3.239.0."

### pulumi stack webhook ping sends a test ping (2026-05-14)
- slug: pulumi-stack-webhook-ping-sends-a-test-ping-f2005097d07e
- score: 0.96

How to use it:

When debugging a stack webhook’s configuration, run `pulumi stack webhook ping <webhook-id>` to send it a test ping. The ping is sent directly to the webhook endpoint, bypassing the message queue.

Examples:

```
pulumi stack webhook ping <webhook-id>
```

- why_it_matters: Send a test ping to a stack webhook while debugging its configuration.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.239.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_stack_webhook_ping/>, <https://www.pulumi.com/docs/deployments/concepts/webhooks/>
- gotchas: "Version: v3.239.0"; "<webhook-id> (required): ID of the stack webhook to ping."; "Prerequisite: Requires the Pulumi CLI; stack webhooks are an Essentials, Pro, or Enterprise feature."

### Pulumi deployment fails when an after hook fails (2026-05-13)
- slug: pulumi-deployment-fails-when-an-after-hook-fails-0dc435849d66
- score: 0.93

How to use it:

When a Pulumi after hook fails, the deployment fails by default after the provider operation succeeds and its result is recorded in state. Set the hook’s `ignoreErrors` option to log a warning and continue, or run `pulumi up --continue-on-error` to keep processing other resources.

Examples:

```
pulumi up --continue-on-error
```

- why_it_matters: Configure or run a deployment with after hooks and handle a hook failure.
- before: Before v3.238.0, an after hook that returned an error logged a warning and the deployment continued.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.238.0>, <https://github.com/pulumi/pulumi/pull/22935>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_up>, <https://www.pulumi.com/docs/iac/concepts/resources/options/hooks/>
- gotchas: "Version: 3.238.0"; "ignoreErrors: Set on a hook to log a warning and continue instead of failing the deployment when the hook returns an error."; "--continue-on-error: Continue updating resources when an error is encountered; can also be set with `PULUMI_CONTINUE_ON_ERROR`. Applies to the whole deployment."; "Prerequisite: Use Pulumi CLI v3.238.0 or later for the documented after-hook failure behavior."; "When an after hook runs, the provider operation has succeeded and its result is recorded in state before the deployment is canceled."; "With `--continue-on-error`, the deployment keeps going."

### pulumi template list lists registry-backed templates (2026-05-13)
- slug: pulumi-template-list-lists-registry-backed-templates-f3d9aab16c93
- score: 0.95

How to use it:

To inspect templates available from the registry, run `pulumi template list`; it lists templates from the Pulumi Cloud registry. The command is experimental, and without a Pulumi Cloud session it returns only publicly visible templates.

Examples:

```
pulumi template list
```

- why_it_matters: Inspect templates available from a Pulumi registry.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.238.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_template_list/>
- gotchas: "Version: 3.238.0"; "--name <value>: Filter to templates whose name matches the given value."; "--org <organization>: Filter to templates owned by the given organization."; "--search <text>: Free-text search across name, display name, description, metadata values, and runtime."; "--output <format>: Output format: `default` or `json`; default is `default`."; "Prerequisite: No authentication is required. Without a Pulumi Cloud session, only publicly visible templates are returned."; "The command lists registry-backed templates."

### pulumi up outputs a JSON operation summary (2026-05-13)
- slug: pulumi-up-outputs-a-json-operation-summary-c18b73dad768
- score: 0.91

How to use it:

When you need a structured summary of a Pulumi update, run `pulumi up --output json`; it prints a one-line JSON result when the operation completes.

Examples:

```
pulumi up --output json
```

- why_it_matters: Capture a structured summary while running a Pulumi update.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.238.0>, <https://github.com/pulumi/pulumi/pull/22870>
- gotchas: "Version: 3.238.0"; "--output <default|json>: Selects the output format; `json` emits the operation summary. Mutually exclusive with `--json`."

### `pulumi package new` bootstraps a Pulumi package from a template (2026-05-08)
- slug: pulumi-package-new-bootstraps-a-pulumi-package-from-a-template-d3a373caf3da
- score: 0.96

How to use it:

When starting a Pulumi package from a template, run `pulumi package new` with the template name; add `--name`, `--description`, and `--dir` to set package details and destination, and `--yes` to skip prompts.

Examples:

```
pulumi package new <template> --name <name> --description <description> --dir <directory> --yes
```

- why_it_matters: When starting a Pulumi package from a template, bootstrap it with `pulumi package new`.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.237.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_package_new/>, <https://www.pulumi.com/docs/install/>
- gotchas: "Version: 3.237.0"; "template|url: Optional positional argument: a template name, local template directory, or Git URL. Without it, suggested templates are presented for interactive selection."; "--name, -n: Package name; prompts if omitted."; "--description, -d: Package description; prompts if omitted."; "--dir: Directory for the generated package; defaults to the current directory."; "--yes, -y: Skip prompts and proceed with default values."; "--force, -f: Allow generation in a non-empty directory."; "--generate-only, -g: Generate the package without installing dependencies."; "--offline, -o: Use locally cached templates without network requests."; "Prerequisite: Install the Pulumi CLI."; "Docs conflict: The command reference is generated for Pulumi CLI v3.257.0, later than the card's v3.237.0; the page does not identify which options were available in v3.237.0."

### pulumi cloud api calls Pulumi Cloud API endpoints with pagination (2026-05-05)
- slug: pulumi-cloud-api-calls-pulumi-cloud-api-endpoints-with-pagination-d424e382c8d0
- score: 0.95

How to use it:

When inspecting Pulumi Cloud API data, use the release’s `pulumi cloud api` command to call an endpoint; add `--paginate` to follow continuation cursors and `--emit-events` to report progress to stderr. The current docs describe a differently named command, so its flag details are not applied here.

Examples:

```
pulumi cloud api <op-or-path> [documented request flags]
```

- why_it_matters: Inspect Pulumi Cloud API data while debugging or maintaining a Pulumi project.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.235.0>
- gotchas: "Version: v3.235.0"; "<op-or-path> (required): Endpoint operation or path; argument syntax and resolution details not found for this command."; "--field: Request flag; value syntax and behavior not found for this command."; "--header: Request flag; value syntax and behavior not found for this command."; "--input: Request flag; value syntax and behavior not found for this command."; "--body: Request flag; value syntax and behavior not found for this command."; "--format: Used for content negotiation; accepted values not found for this command."; "--dry-run: Request flag; behavior details not found for this command."; "--paginate: Follows continuation cursors and accumulates items into a single JSON envelope."; "--emit-events: Surfaces page, complete, truncated, partial_failure, and cancelled events to stderr."; "Pagination follows continuation cursors and accumulates items into a single JSON envelope."; "`--emit-events` surfaces page, complete, truncated, partial_failure, and cancelled events to stderr."; "Docs conflict: The current Pulumi CLI documentation describes `pulumi api`, not the release’s `pulumi cloud api`; its syntax and flag details may differ and were not applied. https://www.pulumi.com/docs/iac/cli/api/"

### pulumi logs decrypt command (2026-05-05)
- slug: pulumi-logs-decrypt-command-5e2e9549fc28
- score: 0.93

How to use it:

When debugging and you need to inspect an automatic log, run `pulumi logs decrypt` with its filename or select a log interactively. Encrypted logs require the same stack secrets provider used to create them.

Examples:

```
pulumi logs decrypt <filename>
```

```
pulumi logs decrypt
```

- why_it_matters: View encrypted Pulumi logs while debugging a stack.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.235.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_logs_decrypt/>, <https://www.pulumi.com/docs/iac/operations/debugging/logging/>
- gotchas: "Version: v3.235.0"; "filename: Automatic log file to decrypt; omit it to choose from available logs."; "--stack, -s: Stack to operate on; defaults to the current stack. For encrypted logs, overrides the stack inferred from the filename for selecting its secrets provider."; "Prerequisite: For encrypted logs, the stack's secrets provider used for the original command must be available."; "Docs conflict: The current CLI reference is generated for v3.267.0 and describes interactive selection when filename is omitted; the release note establishes the command in v3.235.0, but does not specify omission behavior."

### pulumi cloud api describe inspects Pulumi Cloud API operations (2026-05-01)
- slug: pulumi-cloud-api-describe-inspects-pulumi-cloud-api-operations-2c3864f09a87
- score: 0.96

How to use it:

When developing or debugging code that calls a Pulumi Cloud API operation, run `pulumi cloud api describe <path-or-operation-id>` to inspect its parameters, request body, and response schema. The release note says output is available as text, markdown, or JSON.

Examples:

```
pulumi cloud api describe <path-or-operation-id>
```

- why_it_matters: Inspect a Pulumi Cloud API operation while developing or debugging code that calls it.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.234.0>
- gotchas: "Version: v3.234.0"; "<path-or-operation-id> (required): Operation path or ID to describe. The release note does not document its syntax or matching rules."; "Docs conflict: Current Pulumi CLI docs show `pulumi api describe` and `--output`, while the v3.234.0 release note names `pulumi cloud api describe` and text/markdown/JSON output. The current docs are generated for v3.254.0, so their changed interface may not apply to v3.234.0. https://www.pulumi.com/docs/iac/cli/commands/pulumi_api_describe/"

### pulumi cloud api list browses Pulumi Cloud API endpoints (2026-05-01)
- slug: pulumi-cloud-api-list-browses-pulumi-cloud-api-endpoints-5e68efd35317
- score: 0.94

How to use it:

When reviewing code that calls the Pulumi Cloud API, run `pulumi cloud api list` to browse endpoints in the OpenAPI spec; use `--output=json` for JSON output or `--output=table` for a table.

Examples:

```
pulumi cloud api list --output=json
```

```
pulumi cloud api list --output=table
```

- why_it_matters: Browse the Pulumi Cloud API endpoints while reviewing or implementing code that calls the API.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.234.0>, <https://github.com/pulumi/pulumi/blob/v3.234.0/pkg/cmd/pulumi/cloud/api.go>
- gotchas: "Version: v3.234.0"; "--output: Selects the table or JSON output format."; "--refresh-spec: Re-fetches the OpenAPI spec from Pulumi Cloud and overwrites the local cache."; "Docs conflict: Current Pulumi CLI documentation and source use `pulumi api list`, while the v3.234.0 release note and source identify `pulumi cloud api list`; only the version-matched source was used for command syntax."

### pulumi neo adds local filesystem__grep and filesystem__content_replace tools (2026-04-30)
- slug: pulumi-neo-adds-local-filesystem-grep-and-filesystem-content-replace-tools-91a7058ae1d8
- score: 0.97

How to use it:

When searching or replacing project files with the experimental Pulumi Neo agent, use `filesystem__grep` for regex searches and `filesystem__content_replace` for literal replacements. Both operate within the project root; replacement supports a dry-run preview.

Examples:

```
filesystem__grep({"pattern":"<Go-compatible regex>","path":"<project-relative path>","include":"<basename glob>"})
```

```
filesystem__content_replace({"pattern":"<literal text>","replacement":"<replacement text>","path":"<project-relative path>","file_pattern":"<glob>","dry_run":true})
```

- why_it_matters: Search or replace text across files in a project while using the experimental pulumi neo agent.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.233.0>, <https://github.com/pulumi/pulumi/pull/22655>
- gotchas: "Version: 3.233.0"; "Availability: For pulumi neo; experimental status is not specified in this span."; "filesystem__grep.pattern (required): Go-compatible regular expression to search for."; "filesystem__grep.path: Search path; defaults to the project root."; "filesystem__grep.include: Glob filter on file basename; defaults to `*`."; "filesystem__content_replace.pattern (required): Literal text to find; this is not a regular expression."; "filesystem__content_replace.replacement (required): Text to substitute for the literal pattern."; "filesystem__content_replace.path (required): Path for the replacement operation."; "filesystem__content_replace.file_pattern: Glob filter for files; defaults to `*`."; "filesystem__content_replace.dry_run: When true, previews the replacement and leaves files untouched; defaults to false."; "Prerequisite: Use Pulumi CLI 3.233.0 or later, which implements these local tools for `pulumi neo`."; "Prerequisite: The tools are for the experimental `pulumi neo` agent."; "grep returns results in path:lineno: line form."; "Both tools skip binary files, hidden directories, and node_modules."; "Both tools reject paths outside the project root."; "Input schemas match the cloud-side tool definitions."

### pulumi neo local agent workflow and TUI (2026-04-23)
- slug: pulumi-neo-local-agent-workflow-and-tui-952f22a853df
- score: 0.93

How to use it:

When a repository task needs local agent inspection or edits, authenticate with `pulumi login` and run `pulumi neo` from a directory containing `Pulumi.yaml` with `PULUMI_EXPERIMENTAL=true`. Use the TUI to direct the task; press Shift+Tab before the first message to enable plan mode, and press Esc during a turn to request cancellation.

Examples:

```
PULUMI_EXPERIMENTAL=true pulumi neo
```

- why_it_matters: For a repository task that needs a local agent to inspect or edit files and propose changes, start `pulumi neo` and use its terminal UI to direct the task.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.232.0>, <https://www.pulumi.com/docs/ai/neo/pulumi-cli/>, <https://www.pulumi.com/docs/iac/cli/environment-variables/>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_neo/>
- gotchas: "Version: v3.232.0"; "Availability: Experimental; hidden behind PULUMI_EXPERIMENTAL."; "PULUMI_EXPERIMENTAL (required): Set to `true` to enable experimental commands and options."; "prompt: Optional positional prompt; without one, the TUI starts and waits for the first message."; "Shift+Tab: Toggles plan mode; enable it before sending the first message. Approving the proposed plan exits plan mode automatically."; "Esc: During a turn, requests agent cancellation."; "Prerequisite: Authenticate to Pulumi Cloud with `pulumi login`; run `pulumi neo` from a directory containing `Pulumi.yaml`."; "Prerequisite: Set `PULUMI_EXPERIMENTAL=true` to enable experimental commands."; "Plan mode must be set before the first message because it is task-level on the wire."; "Approving the proposed plan exits plan mode automatically."; "The TUI prompts for approval when the agent requests confirmation for a sensitive action and forwards the response to the Pulumi Console."; "Filesystem and shell tool calls run on the user's machine in their working directory."; "The edit tool creates a new file when the target is missing and old_string is empty."; "Docs conflict: The current generated command reference is for Pulumi CLI v3.268.0, newer than the card's v3.232.0; its additional options are not included here."

### pulumi neo local edit filesystem tool (2026-04-23)
- slug: pulumi-neo-local-edit-filesystem-tool-657f2e4e4426
- score: 0.94

How to use it:

For a repository change handled by `pulumi neo`, call `filesystem__edit` with the target path and exact old and new text. Use an empty `old_string` to create a missing file; replacement counts are validated.

Examples:

```
filesystem__edit({"file_path":"<path>","old_string":"<exact text to replace>","new_string":"<replacement text>","expected_replacements":1})
```

```
filesystem__edit({"file_path":"<new path>","old_string":"","new_string":"<file contents>"})
```

- why_it_matters: For a repository change handled by `pulumi neo`, edit a target file through the local filesystem tool.
- before: The CLI-side edit tool was not implemented; calls failed with “not yet implemented.”
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.232.0>, <https://github.com/pulumi/pulumi/pull/22654>
- gotchas: "Version: v3.232.0"; "file_path (required): Path of the file to edit."; "old_string (required): Exact text to replace; empty string enables creation when the target file is missing."; "new_string (required): Replacement text, or contents for a newly created file."; "expected_replacements: Expected occurrence count; defaults to 1. A mismatch is reported with the actual and expected counts."; "Prerequisite: `pulumi neo` is experimental and hidden behind `PULUMI_EXPERIMENTAL`."; "The new-file behavior applies when the target is missing and old_string is empty."

### Local Pulumi policy packs resolve ESC environments (2026-04-16)
- slug: local-pulumi-policy-packs-resolve-esc-environments-d47cf0470e43
- score: 0.96

How to use it:

When configuring a local policy pack with ESC environment secrets or configuration, add an `environments` array of environment references to the JSON config and run `pulumi preview` with both policy-pack flags. ESC configuration is merged into the initial policy configuration; file configuration can override it.

Examples:

```
pulumi preview --policy-pack <path-to-policy-pack> --policy-pack-config <path-to-config.json>
```

```
{
  "environments": ["<org>/<environment>", "<org>/<environment>"],
  "<policy-name>": {
    "<setting>": "<value>"
  }
}
```

- why_it_matters: Configure a local policy pack to use ESC environment secrets and configuration.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.231.0>, <https://github.com/pulumi/pulumi/pull/22495>, <https://www.pulumi.com/docs/discovery-governance/guides/write-a-policy-pack/>, <https://www.pulumi.com/docs/discovery-governance/concepts/policy-as-code/>
- gotchas: "Version: v3.231.0"; "--policy-pack <path-to-policy-pack> (required): Path to the local policy pack directory; the pack must be present on disk."; "--policy-pack-config <path-to-config.json> (required): Path to the JSON file containing local policy configuration."; "environments: JSON array of ESC environment references to resolve for the local policy pack."; "<policy-name>: Object containing configuration for that policy; file configuration can override ESC configuration."; "Prerequisite: Pulumi CLI installed; local policy pack available on disk; the runtime chosen by the pack installed."; "Prerequisite: Pulumi CLI v3.231.0 or later for the documented release change."; "The environment references are resolved client-side via the ESC backend."; "File policy configuration can override ESC configuration."

### Pulumi Automation API adds --diff to destroy (2026-04-16)
- slug: pulumi-automation-api-adds-diff-to-destroy-9d89207ebeda
- score: 0.93

How to use it:

When reviewing a stack destroy through Automation API, enable `--diff` on the destroy operation to show the diff before resources are deleted.

- why_it_matters: Review the planned changes before destroying a stack through the Automation API.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.231.0>, <https://www.pulumi.com/docs/iac/concepts/automation-api/>
- gotchas: "Version: v3.231.0"; "--diff (required): Release note says to pass this option to Automation API destroy to show a diff; its language-specific parameter name and exact syntax are not documented in the official API reference found."; "Prerequisite: Automation API requires the Pulumi CLI at runtime; install it and add it to `PATH`, or install it programmatically."; "The change applies to the Go, Node.js, and Python Automation APIs."

### Node.js Automation API exposes `org` commands (2026-04-08)
- slug: node-js-automation-api-exposes-org-commands-a47aedd4d61d
- score: 0.91

How to use it:

When a Node.js Automation API workflow needs Pulumi organization operations, call the generated `org` methods for get-default, set-default, search, or search ai. For default-organization operations on a `Stack`, use `orgGetDefault()` and `orgSetDefault(<orgName>)`.

Examples:

```
await api.orgGetDefault({});
```

```
await api.orgSetDefault({}, "<orgName>");
```

```
await api.orgSearch({ query: ["<Pulumi resource query>"], org: "<orgName>" }); await api.orgSearchAi({ query: "<natural-language query>", org: "<orgName>" });
```

- why_it_matters: Use Pulumi organization commands from a Node.js Automation API workflow.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.230.0>, <https://github.com/pulumi/pulumi/pull/22395>, <https://github.com/pulumi/pulumi/blob/v3.230.0/sdk/nodejs/automation/interface/index.ts>, <https://github.com/pulumi/pulumi/blob/v3.230.0/sdk/nodejs/automation/stack.ts>
- gotchas: "Version: 3.230.0"; "orgSearch.query: Pulumi resource search query; may be provided as one or multiple queries."; "orgSearch.org: Organization to search; defaults to the current user's default organization."; "orgSearch.output: Output format: table, json, csv, or yaml."; "orgSearchAi.query: Plaintext natural-language query."; "orgSearchAi.org: Organization to search within."; "orgSearchAi.output: Output format: table, json, csv, or yaml."; "orgSetDefault.orgName (required): Name of the organization to set as default."

### Node.js Automation API exposes `pulumi new` (2026-04-08)
- slug: node-js-automation-api-exposes-pulumi-new-c1ae73209d9f
- score: 0.95

How to use it:

When creating a project through the Node.js Automation API, call the generated interface’s `new()` method with `PulumiNewOptions`; pass a template name or URL as the optional second argument. The method invokes `pulumi new` with `--yes` and maps supplied options to CLI flags.

Examples:

```
api.new({ name: "<project-name>", language: "<language>" }, "<template-or-url>")
```

- why_it_matters: Create a new Pulumi project from a Node.js Automation API workflow.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.230.0>, <https://github.com/pulumi/pulumi/pull/22421>, <https://github.com/pulumi/pulumi/blob/v3.230.0/sdk/nodejs/automation/interface/index.ts>
- gotchas: "Version: 3.230.0"; "options (required): `PulumiNewOptions`; the method adds `--yes` automatically."; "templateOrUrl: Template name or URL passed as the command argument after flags."; "options.name: Project name; if omitted, `pulumi new` prompts for it."; "options.language: Language to use for Pulumi AI; documented values: TypeScript, JavaScript, Python, Go, C#, Java, or YAML."; "options.dir: Directory for the generated project; defaults to the current directory."; "options.stack: Existing stack or stack to create; if omitted, `pulumi new` prompts for it."; "options.generateOnly: Generate project files only; skip stack creation, config saving, and dependency installation."; "options.secretsProvider: Provider for encrypting and decrypting secrets; documented values: default, passphrase, awskms, azurekeyvault, gcpkms, hashivault."

### Pulumi Automation API adds organization default commands (Go) (2026-04-02)
- slug: pulumi-automation-api-adds-organization-default-commands-go-95456e5a8d2f
- score: 0.91

How to use it:

When setting or retrieving the default organization for the current backend, call the Go Automation API workspace method `OrgSetDefault` or `OrgGetDefault`.

Examples:

```
org, err := workspace.OrgGetDefault(ctx)
```

```
err := workspace.OrgSetDefault(ctx, "<org-name>")
```

- why_it_matters: Set or retrieve the default organization through the Go Automation API.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.229.0>, <https://github.com/pulumi/pulumi/blob/v3.229.0/sdk/go/auto/workspace.go>, <https://www.pulumi.com/docs/iac/concepts/automation-api/>
- gotchas: "Version: 3.229.0"; "OrgGetDefault(ctx context.Context) (required): Context is required; returns the default organization for the current backend and an error."; "OrgSetDefault(ctx context.Context, orgName string) (required): Context and organization name are required; sets the default organization for the current backend."; "Prerequisite: Use the Pulumi Go SDK Automation API. It drives the Pulumi CLI, which must be available at runtime; install it and add it to PATH, or install it programmatically."

### Pulumi CLI adds policy analyze command (2026-04-02)
- slug: pulumi-cli-adds-policy-analyze-command-31068812925e
- score: 0.94

How to use it:

When analyzing an existing stack against a policy pack, run `pulumi policy analyze` with the pack path and, if needed, the stack name.

Examples:

```
pulumi policy analyze --policy-pack <policy-pack-path> [--stack <stack-name>]
```

- why_it_matters: Analyze an existing stack's state against a policy pack.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.229.0>, <https://www.pulumi.com/docs/iac/cli/commands/pulumi_policy_analyze/>
- gotchas: "Version: 3.229.0"; "--policy-pack <path> (required): Path to a policy pack to run during analysis; repeat for multiple packs."; "--stack <name>: Stack to analyze; defaults to the current stack."; "Prerequisite: Use Pulumi CLI v3.229.0 or later; the command was added in v3.229.0."; "The command runs a policy pack against existing state."; "Docs conflict: The current CLI reference is generated for v3.264.0 and includes `--file`. Pulumi's release notes say `--file` was added in v3.258.0, so it is not included as a v3.229.0 option."

### Pulumi CLI state delete accepts multiple resource URNs (2026-03-25)
- slug: pulumi-cli-state-delete-accepts-multiple-resource-urns-4ea232b5bfd0
- score: 0.93

How to use it:

When removing multiple resources from Pulumi state, pass their URNs to one `pulumi state delete` invocation; the CLI deletes them in dependency-safe order.

Examples:

```
pulumi state delete '<urn-1>' '<urn-2>'
```

- why_it_matters: When removing multiple resources from Pulumi state, provide their URNs to one `pulumi state delete` invocation.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.228.0>, <https://www.pulumi.com/docs/iac/operations/stack-management/removing-resources-without-deleting-them/>
- gotchas: "Version: v3.228.0"; "<urn> (positional; repeatable) (required): Pulumi URN of a resource to remove from state. Quote URNs to prevent shell interpretation."; "The command deletes resources in a dependency-safe order."; "Docs conflict: The current CLI reference documents `pulumi state remove` (generated for v3.263.0), not `pulumi state delete`; it is newer than the card’s v3.228.0. Its command name and dependency behavior are not used here."

### Pulumi Node.js SDK supports Bun as a runtime (2026-03-12)
- slug: pulumi-node-js-sdk-supports-bun-as-a-runtime-19fb2f24ea16
- score: 0.94

How to use it:

When the Pulumi CLI is v3.226.0 or later and the repository should use Bun, set `runtime: bun` in `Pulumi.yaml`; Bun runtime does not support function serialization.

Examples:

```
runtime: bun
```

```
pulumi up
```

- why_it_matters: Run a Pulumi TypeScript or Node.js SDK program in a repository configured to use Bun.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.226.0>, <https://github.com/pulumi/pulumi/pull/22049>, <https://github.com/pulumi/pulumi/pull/22177>, <https://github.com/pulumi/pulumi/blob/v3.226.0/sdk/nodejs/cmd/pulumi-language-nodejs/testdata/published/bun/projects/l1-builtin-can/Pulumi.yaml>, <https://www.pulumi.com/docs/iac/languages-sdks/javascript/>, <https://github.com/pulumi/pulumi/blob/v3.226.0/sdk/nodejs/cmd/pulumi-language-nodejs/main.go>
- gotchas: "Version: 3.226.0"; "runtime (required): Set to `bun` to select the Bun runtime."; "Prerequisite: Use Pulumi CLI 3.226.0 or later and install Bun; the v3.226.0 source implements a minimum `@pulumi/pulumi` SDK check of 3.226.0 for Bun."; "Function serialization is not supported in Bun."; "Docs conflict: Current Pulumi TypeScript docs say Bun is first-class as of Pulumi 3.227.0; the v3.226.0 release source includes Bun runtime support. The current docs describe newer-version behavior."

### Pulumi PCL config blocks mark values as secrets (2026-03-04)
- slug: pulumi-pcl-config-blocks-mark-values-as-secrets-77d22cf5ce2d
- score: 0.95

How to use it:

When a PCL config value should be read as a secret, set `secret = true` in its `config` block; Pulumi v3.225.0 includes program generation support for Go, Node, and Python.

Examples:

```
config "aNumber" "number" {
  secret = true
}
```

- why_it_matters: Generate Go, Node, or Python Pulumi code from PCL that reads a configuration value as a secret.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.225.0>, <https://github.com/pulumi/pulumi/pull/22066>, <https://raw.githubusercontent.com/pulumi/pulumi/v3.225.0/pkg/testing/pulumi-test-language/tests/testdata/l1-config-secret/main.pp>, <https://raw.githubusercontent.com/pulumi/pulumi/v3.225.0/pkg/codegen/pcl/config.go>, <https://raw.githubusercontent.com/pulumi/pulumi/v3.225.0/pkg/testing/pulumi-test-language/tests/l1_config_secret.go>
- gotchas: "Version: v3.225.0"; "secret: Boolean indicating whether the config value should be read as a secret; set to `true`."; "Prerequisite: The conformance test supplies the config value `aNumber` as a secure value."; "The supplied note describes program generation support for Go, Node, and Python."

### Pulumi preview and up can open a Neo task on failure (2026-03-04)
- slug: pulumi-preview-and-up-can-open-a-neo-task-on-failure-bdf06c5f3790
- score: 0.93

How to use it:

When running `pulumi preview` or `pulumi up` and you want a Neo task created on failure, add `--neo-task-on-failure` or set `NEO_TASK_ON_FAILURE` in the environment; the task is started to help debug operation errors. The option is a boolean flag, defaulting to false.

Examples:

```
pulumi preview --neo-task-on-failure
```

```
pulumi up --neo-task-on-failure
```

```
NEO_TASK_ON_FAILURE=true pulumi preview
```

- why_it_matters: When debugging a failed Pulumi preview or update, create a Neo task containing its error logs by enabling the failure option.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.225.0>, <https://github.com/pulumi/pulumi/pull/21960>, <https://github.com/pulumi/pulumi/blob/v3.225.0/pkg/cmd/pulumi/operations/preview.go>, <https://github.com/pulumi/pulumi/blob/v3.225.0/pkg/cmd/pulumi/operations/up.go>
- gotchas: "Version: v3.225.0"; "--neo-task-on-failure: Boolean flag; starts a Neo task to help debug operation errors. Defaults to false."; "NEO_TASK_ON_FAILURE: Environment variable that triggers the same behavior as the flag; accepted values are not documented in the source page read."; "The behavior has no interactive prompts."; "It changes nothing for users who do not specify the flag or environment variable."

### Pulumi Node.js component schema inference supports `Partial<T>` (2026-02-17)
- slug: pulumi-node-js-component-schema-inference-supports-partial-t-e831bcc8ced6
- score: 0.91

How to use it:

When inferring a Node.js component schema from arguments, wrap the property type in `Partial<T>` to generate a corresponding type with all properties optional.

Examples:

```
interface SomeType {
    a: string;
}

export interface MyComponentArgs {
    regularType?: pulumi.Input<SomeType>;
    partialType?: pulumi.Input<Partial<SomeType>>;
}
```

- why_it_matters: Infer a component schema from Node.js component arguments that use `Partial<T>`.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.221.0>, <https://github.com/pulumi/pulumi/pull/21802>, <https://www.pulumi.com/docs/iac/guides/building-extending/packages/source-based-plugin/>, <https://www.pulumi.com/docs/iac/guides/building-extending/components/build-a-component/>
- gotchas: "Version: v3.221.0"; "Partial<T> (required): Wrap the property type `T`; inferred type properties are all optional."; "T (required): The source interface or type whose properties are made optional."; "pulumi.Input<T>: Supported wrapper around the argument type in the documented example; `partialType` itself is optional because it uses `?`."; "Prerequisite: For source-based component schema inference, define component arguments as a TypeScript interface reachable through normal imports, and use `pulumi.Input` types for arguments."; "Prerequisite: Node.js runtime and Pulumi CLI are listed as component-building prerequisites."

### Pulumi provider resources support EnvVarMappings (2026-02-10)
- slug: pulumi-provider-resources-support-envvarmappings-383f3cf6cb45
- score: 0.95

How to use it:

When two instances of the same provider need different values for the same environment variable, define a distinct source variable for each instance and map it to the name the provider expects.

Examples:

```
providerOne, err := foo.NewProvider(ctx, "foo-provider-one", &foo.ProviderArgs{}, pulumi.EnvVarMappings(map[string]string{"PASSWORD_ONE": "PASSWORD"}))
if err != nil { return err }
providerTwo, err := foo.NewProvider(ctx, "foo-provider-two", &foo.ProviderArgs{}, pulumi.EnvVarMappings(map[string]string{"PASSWORD_TWO": "PASSWORD"}))
if err != nil { return err }
```

- why_it_matters: Configure two instances of the same provider with different environment variable values in one environment.
- before: The release note says users previously had to put the differing values in provider configuration; this option lets them use separate environment variables instead.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.220.0>, <https://github.com/pulumi/pulumi/pull/21572>, <https://www.pulumi.com/docs/iac/concepts/resources/options/envvarmappings/>
- gotchas: "Version: v3.220.0"; "pulumi.EnvVarMappings(map[string]string{...}): Resource option for remapping environment variables on provider resources."; "map key (source environment variable) (required): Name of the custom environment variable defined in the environment; its value is used for the mapping."; "map value (target environment variable) (required): Name of the environment variable the provider expects; the provider sees the source variable's value under this name."; "Prerequisite: Use Pulumi v3.220.0 or later for this resource option."; "Prerequisite: Define the custom environment variables in the environment where Pulumi runs."; "Prerequisite: Set the option on explicitly configured provider resources; it does not apply to ordinary resources or components."; "The option applies to provider resources and remaps environment variable names passed to provider processes."; "Mappings are stored in `__internal` state; values are not stored anywhere."

### Pulumi CLI reads requiredPulumiVersion from Pulumi.yaml (2026-02-05)
- slug: pulumi-cli-reads-requiredpulumiversion-from-pulumi-yaml-f7dc6e033194
- score: 0.92

How to use it:

When a project requires a particular Pulumi CLI version range, add the optional `requiredPulumiVersion` key to its `Pulumi.yaml` with a semantic version range, such as `">=3.0.0"`.

Examples:

```
name: <project-name>
runtime: <runtime>
requiredPulumiVersion: ">=3.0.0"
```

- why_it_matters: Set a required Pulumi version for a project when configuring its Pulumi.yaml.
- sources: <https://github.com/pulumi/pulumi/releases/tag/v3.219.0>, <https://www.pulumi.com/docs/iac/concepts/projects/project-file/>
- gotchas: "Version: v3.219.0"; "requiredPulumiVersion: Version range of the Pulumi CLI required by the project; uses semantic version range syntax."
