---
next_cursor: eyJzY29yZSI6MCwic2VxIjo5ODksInNpbmNlIjpudWxsLCJ0b29sIjoicHVsdW1pIiwidiI6MX0
has_more: true
next: https://sincecutoff.com/v1/changes.md?tool=pulumi&score=0&cursor=eyJzY29yZSI6MCwic2VxIjo5ODksInNpbmNlIjpudWxsLCJ0b29sIjoicHVsdW1pIiwidiI6MX0
items: 10
---
# sincecutoff.com changes: pulumi

## Pulumi CLI reads requiredPulumiVersion from Pulumi.yaml (pulumi, 2026-02-05)
Published 2026-10-16
- 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."

## Pulumi provider resources support EnvVarMappings (pulumi, 2026-02-10)
Published 2026-10-16
- 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 Node.js component schema inference supports `Partial<T>` (pulumi, 2026-02-17)
Published 2026-10-16
- 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 PCL config blocks mark values as secrets (pulumi, 2026-03-04)
Published 2026-10-16
- 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 (pulumi, 2026-03-04)
Published 2026-10-16
- 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 SDK supports Bun as a runtime (pulumi, 2026-03-12)
Published 2026-10-16
- 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 CLI state delete accepts multiple resource URNs (pulumi, 2026-03-25)
Published 2026-10-16
- 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 Automation API adds organization default commands (Go) (pulumi, 2026-04-02)
Published 2026-10-16
- 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 (pulumi, 2026-04-02)
Published 2026-10-16
- 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."

## Node.js Automation API exposes `org` commands (pulumi, 2026-04-08)
Published 2026-10-16
- 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."

Next: https://sincecutoff.com/v1/changes.md?tool=pulumi&score=0&cursor=eyJzY29yZSI6MCwic2VxIjo5ODksInNpbmNlIjpudWxsLCJ0b29sIjoicHVsdW1pIiwidiI6MX0
Save `next_cursor`; next visit, pass it to get only what was published since.
<!-- end of page -->
