{"id":"src_2x9fox-lfw0kWhKiztOx1","slug":"pulumi","name":"Pulumi","type":"github","url":"https://github.com/pulumi/pulumi","orgId":"org_CXx7IPNbZpLaDROi03ZTh","productId":null,"productSlug":null,"org":{"id":"org_CXx7IPNbZpLaDROi03ZTh","slug":"pulumi","name":"Pulumi"},"isPrimary":false,"isHidden":false,"discovery":"curated","metadata":"{\"evaluatedMethod\":\"github\",\"evaluatedAt\":\"2026-04-11T13:59:05.431Z\",\"changelogUrl\":\"https://github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md\",\"changelogDetectedAt\":\"2026-04-11T14:00:13.787Z\"}","releaseCount":109,"releasesLast30Days":8,"avgReleasesPerWeek":1.6,"latestVersion":"v3.239.0","latestDate":"2026-05-14T12:56:20.000Z","changelogUrl":"https://github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md","hasChangelogFile":true,"lastFetchedAt":"2026-05-16T20:01:23.369Z","lastPolledAt":"2026-05-16T20:01:16.101Z","trackingSince":"2024-10-01T18:50:41.000Z","releases":[{"id":"rel_aoM20oT8auOWEegRJM6A1","version":"v3.239.0","type":"feature","title":"v3.239.0","summary":"Added `pulumi stack get` to retrieve detailed stack information, `pulumi stack webhook get` and `pulumi stack webhook ping` for webhook management, and `pulumi deployment list` to list deployment executions. The `pulumi import` command now supports `--output json` for structured results. Fixed a bug where batch encrypt/decrypt errors were being silently dropped.","titleGenerated":"Pulumi v3.239.0 adds stack inspection commands and fixes batch encryption error handling","titleShort":"Stack inspection commands added; batch encrypt/decrypt errors no longer dropped","content":"## 3.239.0 (2026-05-14)\r\n\r\n\r\n### Features\r\n\r\n- [cli] Add `--output json` to `pulumi import` for a structured JSON summary of the operation result\r\n  [#22929](https://github.com/pulumi/pulumi/pull/22929)\r\n\r\n- [cli] Add `pulumi stack get` to retrieve detailed information about a stack\r\n  [#23106](https://github.com/pulumi/pulumi/pull/23106)\r\n\r\n- [cli] Add `pulumi stack webhook get` to inspect a single stack webhook\r\n  [#23088](https://github.com/pulumi/pulumi/pull/23088)\r\n\r\n- [cli] Add `pulumi stack webhook ping` to send a test ping to a stack webhook\r\n\r\n- [cli/cloud] Add `pulumi deployment list` to list deployment executions for a stack\r\n  [#23114](https://github.com/pulumi/pulumi/pull/23114)\r\n\r\n- [sdkgen] Validate that schema names can't conflict with module paths\r\n  [#22956](https://github.com/pulumi/pulumi/pull/22956)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [engine] Fix batch encrypt/decrypt errors being silently dropped\r\n  [#23149](https://github.com/pulumi/pulumi/pull/23149)\r\n\r\n- [cli/cloud] Fix `pulumi api` help examples that referenced non-existent operation IDs and response fields\r\n  [#23125](https://github.com/pulumi/pulumi/pull/23125)","publishedAt":"2026-05-14T12:56:20.000Z","fetchedAt":"2026-05-14T15:00:53.107Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.239.0","media":[],"coverageCount":0},{"id":"rel_66IL2hfUkmtFGiQXoLDRJ","version":"v3.238.0","type":"feature","title":"v3.238.0","summary":"The pulumi up command now supports --output json for structured JSON summaries of operation results. The pulumi cloud api command has been renamed to pulumi api, with its --format flag renamed to --output. Additional features include pulumi stack webhook list, pulumi insights resource search and get, pulumi template list, and approval and permission mode flags for pulumi neo with Ctrl+A and Ctrl+R hotkeys.","titleGenerated":"Pulumi v3.238.0 adds JSON output to pulumi up and renames pulumi cloud api","titleShort":"pulumi up gains --output json; pulumi cloud api renamed to pulumi api","content":"## 3.238.0 (2026-05-13)\r\n\r\n\r\n### Features\r\n\r\n- [cli] Add a `--language` flag to `pulumi package add` to run outside a Pulumi project or plugin\r\n  [#22791](https://github.com/pulumi/pulumi/pull/22791)\r\n\r\n- [cli] Add `--output json` to `pulumi up` for a structured JSON summary of the operation result\r\n  [#22870](https://github.com/pulumi/pulumi/pull/22870)\r\n\r\n- [cli] Recommend `pulumi cloud api describe` in `pulumi cloud api --help` to verify operation parameters before calling\r\n  [#22881](https://github.com/pulumi/pulumi/pull/22881)\r\n\r\n- [cli] Add `pulumi stack webhook list` to list all webhooks configured for a stack\r\n  [#23082](https://github.com/pulumi/pulumi/pull/23082)\r\n\r\n- [cli/cloud] Rename `pulumi cloud api` to `pulumi api`\r\n  [#22970](https://github.com/pulumi/pulumi/pull/22970)\r\n\r\n- [cli/cloud] Add `pulumi insights resource get` to look up a single resource discovered by Pulumi Insights\r\n  [#23077](https://github.com/pulumi/pulumi/pull/23077)\r\n\r\n- [cli/cloud] Add `pulumi template list` to list registry-backed templates\r\n  [#23074](https://github.com/pulumi/pulumi/pull/23074)\r\n\r\n- [cli/cloud] Rename the `--format` flag to `--output` on `pulumi api` and its subcommands\r\n  [#23072](https://github.com/pulumi/pulumi/pull/23072)\r\n\r\n- [cli/cloud] Add `pulumi insights resource search` to search for resources discovered by Pulumi Insights\r\n  [#23087](https://github.com/pulumi/pulumi/pull/23087)\r\n\r\n- [cli/engine] Add `--skip-plugin-pre-install` to skip up-front plugin installation\r\n\r\n- [engine] Fail the deployment when an after hook fails\r\n  [#22935](https://github.com/pulumi/pulumi/pull/22935)\r\n\r\n- [cli/neo] Render the agent's TODO list in the `pulumi neo` TUI\r\n  [#22864](https://github.com/pulumi/pulumi/pull/22864)\r\n\r\n- [cli/neo] Add `--approval-mode` and `--permission-mode` flags to `pulumi neo`, with Ctrl+A and Ctrl+R hotkeys to switch modes mid-session\r\n  [#22950](https://github.com/pulumi/pulumi/pull/22950)\r\n\r\n- [cli/package] When invoked by an AI coding agent, print `pulumi api` pointers after `pulumi package add` and `pulumi package gen-sdk`\r\n  [#22904](https://github.com/pulumi/pulumi/pull/22904)\r\n\r\n- [pkg/testing] Recognize the `hcl` and `pcl` runtimes in `integration.ProgramTest`\r\n  [#23018](https://github.com/pulumi/pulumi/pull/23018)\r\n\r\n- [pkg/testing] Add `l1-config-types-optional` conformance test for PCL's `optional` type constructor\r\n  [#23108](https://github.com/pulumi/pulumi/pull/23108)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [backend/diy] Minify JSON persisted by the DIY backend for checkpoints, history, and stack tags\r\n  [#22245](https://github.com/pulumi/pulumi/pull/22245)\r\n\r\n- [cli/import] Ignore property values that do not conform to the schema in maps\r\n  [#23076](https://github.com/pulumi/pulumi/pull/23076)\r\n\r\n- [cli/import] Stop dropping map values whose element type is a union of Input-wrapped types during HCL2 import\r\n\r\n- [cli/neo] Use the selected stack's organization when starting a `pulumi neo` task instead of the user's default organization\r\n  [#22951](https://github.com/pulumi/pulumi/pull/22951)\r\n\r\n- [cli/neo] Include the failure reason in `pulumi_preview` and `pulumi_up` tool results when they fail, so the agent can react instead of seeing a blank error\r\n  [#22948](https://github.com/pulumi/pulumi/pull/22948)\r\n\r\n- [cli/neo] Retry `pulumi neo` task creation without the attached stack when the backend rejects it with an \"invalid entities\" error\r\n  [#22945](https://github.com/pulumi/pulumi/pull/22945)\r\n\r\n- [cli/neo] Surface the failure reason when a `filesystem` tool call fails, instead of returning an empty result to the agent\r\n  [#23019](https://github.com/pulumi/pulumi/pull/23019)\r\n\r\n- [cli/package] Use `--output=markdown` (not the renamed-away `--format=markdown`) in the `pulumi api` pointers printed by `pulumi package add` and `pulumi package gen-sdk`\r\n  [#23098](https://github.com/pulumi/pulumi/pull/23098)\r\n\r\n- [programgen/pcl] Stop reporting spurious circular references when an `ignoreChanges`, `hideDiffs`, `replaceOnChanges`, or `additionalSecretOutputs` entry shares a name with a top-level node\r\n  [#22931](https://github.com/pulumi/pulumi/pull/22931)\r\n\r\n- [sdk/python] Speed up python program resolution by using a set instead of deque to track outputs\r\n  [#22946](https://github.com/pulumi/pulumi/pull/22946)\r\n\r\n\r\n### Miscellaneous\r\n\r\n- [cli/neo] Tag Neo tasks created from the CLI with a `cli` source so the service can attribute their origin\r\n  [#23099](https://github.com/pulumi/pulumi/pull/23099)\r\n\r\n- [sdk/nodejs] Add registerPackage helper to cache package references per deployment\r\n  [#23014](https://github.com/pulumi/pulumi/pull/23014)","publishedAt":"2026-05-13T21:23:27.000Z","fetchedAt":"2026-05-14T00:01:18.494Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.238.0","media":[],"coverageCount":0},{"id":"rel_IM44S3Egrv8Ow0ChEvfLN","version":"v3.237.0","type":"feature","title":"v3.237.0","summary":"Added `pulumi package new` command to bootstrap a Pulumi package from a template. Fixed a panic when cancelling a `pulumi neo` session, spurious circular reference reports in PCL codegen, and PCL binder panics on conditional Promise branches. Python SDK now supports `NotRequired`, `Required`, and `total=False` in TypedDicts for component resource arg types.","titleGenerated":"Pulumi v3.237.0 adds pulumi package new command and fixes pulumi neo panic","titleShort":"pulumi package new bootstraps packages; pulumi neo panic fixed","content":"## 3.237.0 (2026-05-08)\n\n\n### Features\n\n- [cli] Include the running command name and detected AI agent (when present) in the User-Agent header on Pulumi Cloud API requests\n  [#22908](https://github.com/pulumi/pulumi/pull/22908)\n\n- [engine] Include `result` on the summary engine event\n  [#22883](https://github.com/pulumi/pulumi/pull/22883)\n\n- [sdkgen] Eagerly error on schemas with unconstructable types\n  [#22890](https://github.com/pulumi/pulumi/pull/22890)\n\n- [cli/cloud] Auto-fill `lang` and `os` query parameters on `pulumi cloud api` GET/HEAD requests when the matched OpenAPI operation declares them and the caller hasn't supplied them\n  [#22726](https://github.com/pulumi/pulumi/pull/22726)\n\n- [cli/package] Add `pulumi package new` to bootstrap a Pulumi package from a template\n  [#22837](https://github.com/pulumi/pulumi/pull/22837)\n\n\n### Bug Fixes\n\n- [cli] Add blank-line gaps between `pulumi neo` TUI conversation blocks\n  [#22846](https://github.com/pulumi/pulumi/pull/22846)\n\n- [cli/import] Preserve `__`-prefixed keys when generating PCL for imported resource state, so provider-defined payloads round-trip correctly\n  [#22856](https://github.com/pulumi/pulumi/pull/22856)\n\n- [cli/neo] Render `ux__ask_user` clarifying questions as questions instead of approval prompts\n  [#22862](https://github.com/pulumi/pulumi/pull/22862)\n\n- [cli/neo] Fix a panic when cancelling a `pulumi neo` session\n  [#22898](https://github.com/pulumi/pulumi/pull/22898)\n\n- [cli/neo] Render every assistant message in the TUI scrollback so multi-turn commentary no longer disappears between tool calls\n\n- [cli/neo] Return the bare stack name and canonical project name from `pulumi_preview` and `pulumi_up` tool results instead of echoing the raw input\n  [#22891](https://github.com/pulumi/pulumi/pull/22891)\n\n- [codegen/pcl] Stop reporting spurious circular references when an `ignoreChanges`, `hideDiffs`, `replaceOnChanges`, or `additionalSecretOutputs` entry shares a name with a top-level node\n  [#22916](https://github.com/pulumi/pulumi/pull/22916)\n\n- [programgen/pcl] Fix PCL binder panic when a conditional mixes a Promise-typed branch with a try() branch\n  [#22907](https://github.com/pulumi/pulumi/pull/22907)\n\n- [sdk/python] Support `NotRequired`, `Required` and `total=False` in TypedDicts for component resource arg types\n  [#22858](https://github.com/pulumi/pulumi/pull/22858)\n\n\n### Miscellaneous\n\n- [cli/cloud] Auto-fit `pulumi cloud api list` table to terminal width and replace the\n`tabular` table renderer with `go-pretty`\n\n  [#22874](https://github.com/pulumi/pulumi/pull/22874)\n\n- [sdk/nodejs] Test on Node.js 26 and drop 20\n  [#22872](https://github.com/pulumi/pulumi/pull/22872)","publishedAt":"2026-05-08T20:51:52.000Z","fetchedAt":"2026-05-08T22:00:20.299Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.237.0","media":[],"coverageCount":0},{"id":"rel_hlAkCQ2ZVdS2ahYCWMCcq","version":"v3.236.0","type":"feature","title":"v3.236.0","summary":"## 3.236.0 (2026-05-06)\r\n\r\n","titleGenerated":null,"titleShort":null,"content":"## 3.236.0 (2026-05-06)\r\n\r\n","publishedAt":"2026-05-07T09:11:27.000Z","fetchedAt":"2026-05-07T12:00:49.445Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.236.0","media":[],"coverageCount":0},{"id":"rel__kYcdqR9zXMwQON7t2guQ","version":"v3.235.0","type":"feature","title":"v3.235.0","summary":"## 3.235.0 (2026-05-05)\r\n\r\n\r\n### Features\r\n\r\n- [cli] Add `pulumi logs decrypt` command for viewing logs\r\n  [#22523](https://github.com/pulumi/pulumi/p...","titleGenerated":null,"titleShort":null,"content":"## 3.235.0 (2026-05-05)\r\n\r\n\r\n### Features\r\n\r\n- [cli] Add `pulumi logs decrypt` command for viewing logs\r\n  [#22523](https://github.com/pulumi/pulumi/pull/22523)\r\n\r\n- [cli] Bundle the `hcl` language host (from pulumi-labs/pulumi-hcl)\r\n  [#22807](https://github.com/pulumi/pulumi/pull/22807)\r\n\r\n- [cli] Automatically install the `hcl` converter from pulumi-labs/pulumi-hcl when running `pulumi convert --from hcl`\r\n  [#22816](https://github.com/pulumi/pulumi/pull/22816)\r\n\r\n- [pcl] Add `read` blocks to PCL to read resources via ID and query instead of registering them\r\n  [#22641](https://github.com/pulumi/pulumi/pull/22641)\r\n\r\n- [cli/cloud] Add `pulumi cloud api <op-or-path>` for calling any Pulumi Cloud API\r\nendpoint, with `--field`/`--header`/`--input`/`--body` flag handling, path\r\ntemplate binding, content negotiation via `--format`, and `--dry-run`\r\n\r\n  [#22771](https://github.com/pulumi/pulumi/pull/22771)\r\n\r\n- [cli/cloud] Add `--paginate` to `pulumi cloud api`: follow continuation cursors,\r\naccumulate items into a single JSON envelope, and surface progress\r\nevents to stderr with `--emit-events` (page, complete, truncated,\r\npartial_failure, cancelled).\r\n\r\n  [#22772](https://github.com/pulumi/pulumi/pull/22772)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [cli] Fix the `pulumi neo` shell tool to honor the agent-supplied `timeout` and to terminate the whole process tree (and unblock cmd.Wait) when the deadline fires, so commands like `kubectl logs -f` no longer hang Neo indefinitely.\r\n  [#22820](https://github.com/pulumi/pulumi/pull/22820)\r\n\r\n- [cli] Surface the error and exit when `pulumi neo` fails to create the underlying task, instead of leaving the TUI stuck in `Thinking…`\r\n  [#22825](https://github.com/pulumi/pulumi/pull/22825)\r\n\r\n- [codegen/go] Correctly generate `[]pulumi.Asset` & `[]pulumi.Archive`\r\n  [#22827](https://github.com/pulumi/pulumi/pull/22827)\r\n\r\n- [cli/neo] Exit cleanly when the user presses Ctrl+C twice in `pulumi neo` instead of hanging until a third press\r\n  [#22821](https://github.com/pulumi/pulumi/pull/22821)\r\n\r\n- [engine] The engine now caches schemas at `PULUMI_HOME/schemas`, and will cache for parameterised packages as well\r\n  [#22812](https://github.com/pulumi/pulumi/pull/22812)\r\n\r\n- [sdk-python] Preserve `__`-prefixed keys (e.g. `__type` discriminators) across RPC deserialization, matching the behavior of the other language SDKs\r\n  [#22834](https://github.com/pulumi/pulumi/pull/22834)\r\n\r\n- [programgen/{nodejs,python}] Fix programgen to emit the right `length` check for string length\r\n  [#22802](https://github.com/pulumi/pulumi/pull/22802)\r\n\r\n\r\n### Miscellaneous\r\n\r\n- [cli] Replace the Pulumipus mascot in the `pulumi neo` welcome banner with new Neo-branded ASCII art.\r\n  [#22817](https://github.com/pulumi/pulumi/pull/22817)","publishedAt":"2026-05-05T15:53:36.000Z","fetchedAt":"2026-05-05T20:01:19.329Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.235.0","media":[],"coverageCount":0},{"id":"rel_3vmUszxNzqZGl3DCpHOY3","version":"v3.234.0","type":"feature","title":"v3.234.0","summary":"## 3.234.0 (2026-05-01)\r\n\r\n\r\n### Features\r\n\r\n- [cli/cloud] Add `pulumi cloud api describe` for inspecting the parameters, request\r\nbody, and response ...","titleGenerated":null,"titleShort":null,"content":"## 3.234.0 (2026-05-01)\r\n\r\n\r\n### Features\r\n\r\n- [cli/cloud] Add `pulumi cloud api describe` for inspecting the parameters, request\r\nbody, and response schema of any Pulumi Cloud API operation, with\r\ntext, markdown, and JSON output\r\n\r\n  [#22770](https://github.com/pulumi/pulumi/pull/22770)\r\n\r\n- [cli/cloud] Add `pulumi cloud api list` for browsing every endpoint exposed by the Pulumi\r\nCloud OpenAPI spec, with table and JSON output\r\n\r\n  [#22769](https://github.com/pulumi/pulumi/pull/22769)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [engine] Revert changes to property path parsing that resulted in errors for currently valid paths","publishedAt":"2026-05-01T11:45:34.000Z","fetchedAt":"2026-05-01T13:01:01.940Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.234.0","media":[],"coverageCount":0},{"id":"rel_-a4GFCn3TfOvif8jvp6Xa","version":"v3.233.0","type":"feature","title":"v3.233.0","summary":"## 3.233.0 (2026-04-30)\r\n\r\n\r\n### Features\r\n\r\n- [auto/python] Expose the auto-generated Pulumi CLI interface as `workspace.cli_api`\r\n  [#22638](https:/...","titleGenerated":null,"titleShort":null,"content":"## 3.233.0 (2026-04-30)\r\n\r\n\r\n### Features\r\n\r\n- [auto/python] Expose the auto-generated Pulumi CLI interface as `workspace.cli_api`\r\n  [#22638](https://github.com/pulumi/pulumi/pull/22638)\r\n\r\n- [cli] Add encrypted logging to ~/.pulumi/logs; use the PULUMI_ENABLE_AUTOMATIC_LOGGING feature flag to turn it on\r\n  [#22494](https://github.com/pulumi/pulumi/pull/22494)\r\n\r\n- [cli] Implement the `filesystem__grep` and `filesystem__content_replace` local tools\r\nfor `pulumi neo`. `grep` runs a regex search across files in the project root\r\nwith an optional `include` glob filter and returns results in `path:lineno: line`\r\nform. `content_replace` performs a literal multi-file search-and-replace with a\r\n`file_pattern` glob and `dry_run` preview mode. Both tools skip binary files,\r\nhidden directories, and `node_modules`, and reject paths outside the project\r\nroot. Their input schemas match the cloud-side tool definitions.\r\n\r\n  [#22655](https://github.com/pulumi/pulumi/pull/22655)\r\n\r\n- [cli] Add `pulumi_preview` and `pulumi_up` as local tools for the experimental `pulumi neo`\r\nagent. The Neo TUI renders a persistent bordered block for each operation that\r\nstreams changed resources and diagnostics as the engine runs and finalizes with a\r\nsummary of the op counts. Hidden behind PULUMI_EXPERIMENTAL.\r\n\r\n  [#22697](https://github.com/pulumi/pulumi/pull/22697)\r\n\r\n- [engine] Add `List` to the provider protocol and schema\r\n  [#22693](https://github.com/pulumi/pulumi/pull/22693)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [engine] Return a clear error when two installed plugins claim the same default provider package name (for example, a native `scaleway` provider alongside a `terraform-provider` bridge parameterized as `scaleway`) instead of panicking with \"Should not have seen an older plugin if sorting is correct!\"\r\n  [#22679](https://github.com/pulumi/pulumi/pull/22679)\r\n\r\n- [programgen] Do not wrap a `call(...)` on a method whose return type is marked plain in an Output. Previously\r\nPCL bound every method call's return type as `Output<T>`, which caused downstream program-gen\r\nto emit broken `.apply(...)`/`.ApplyT(...)` traversals against plain struct returns (e.g.\r\nmethods with `liftSingleValueMethodReturns=true` or `ReturnTypePlain=true`).\r\n\r\n  [#22696](https://github.com/pulumi/pulumi/pull/22696)\r\n\r\n- [backend/diy] When using a backend url containing creds (e.g. PostgreSQL conn string), mask user:pass as in lock-related error messages\r\n  [#22701](https://github.com/pulumi/pulumi/pull/22701)\r\n\r\n- [codegen/go] Generate unqualified `Provider` references for the package's own provider resource. Previously\r\nthe Go codegen always emitted `<pkg>.Provider` even when the reference appeared inside `<pkg>`\r\nitself, producing identifiers that would not compile. Affects generated code for method return\r\ntypes (and other schema positions) that reference `pulumi:providers:<pkg>`.\r\n\r\n  [#22696](https://github.com/pulumi/pulumi/pull/22696)\r\n\r\n- [codegen/nodejs] Generate unqualified `Provider` references for the package's own provider resource when emitting\r\nTypeScript code inside that package. Previously the generator always qualified the name as\r\n`<pkg>.Provider`, which does not resolve when no `<pkg>` namespace import is in scope.\r\n\r\n  [#22696](https://github.com/pulumi/pulumi/pull/22696)\r\n\r\n- [codegen/nodejs] Import the correct class name for a provider resource. Imports for `pulumi:providers:<pkg>` used\r\nthe title-cased package name instead of `Provider`, producing a phantom identifier that clashed\r\nwith the containing package's component/resource classes.\r\n\r\n  [#22696](https://github.com/pulumi/pulumi/pull/22696)\r\n\r\n- [programgen/nodejs] Emit `await` for `call(...)` invocations of methods whose return type is marked plain, and\r\nforce the generated program into an async `export = async () => ...` wrapper whenever such a\r\ncall is present. The Node SDK returns `Promise<T>` for plain methods; previously program-gen\r\nused the result directly, which did not match its runtime type.\r\n\r\n  [#22696](https://github.com/pulumi/pulumi/pull/22696)\r\n\r\n- [codegen/python] Avoid a self-import (`import pulumi_<pkg>` inside `pulumi_<pkg>/<module>.py`) when referencing\r\nthe package's own provider resource. Python referenced the Provider as `pulumi_<pkg>.Provider`\r\neven inside that package, which caused a circular import at runtime.\r\n\r\n  [#22696](https://github.com/pulumi/pulumi/pull/22696)\r\n\r\n- [sdk/python] Reduce internal `Output[T]` data to a single `asyncio.Future`\r\n  [#22661](https://github.com/pulumi/pulumi/pull/22661)\r\n\r\n- [sdkgen/{nodejs,python}] Generate optional input types that accept undefined/None values\r\n  [#22552](https://github.com/pulumi/pulumi/pull/22552)\r\n\r\n\r\n### Miscellaneous\r\n\r\n- [auto/go] Drop the \"With\" prefix from generated option helpers so they match the naming of the existing optXxx packages\r\n  [#22682](https://github.com/pulumi/pulumi/pull/22682)","publishedAt":"2026-04-30T16:58:26.000Z","fetchedAt":"2026-04-30T18:01:05.741Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.233.0","media":[],"coverageCount":0},{"id":"rel_GVJScsUFeiHX_hdVwWMvD","version":"v3.232.0","type":"feature","title":"v3.232.0","summary":"## 3.232.0 (2026-04-22)\r\n\r\n\r\n### Features\r\n\r\n- [cli] Add an experimental `pulumi neo` command that creates a Pulumi Neo agent task in CLI\r\ntool-execut...","titleGenerated":null,"titleShort":null,"content":"## 3.232.0 (2026-04-22)\r\n\r\n\r\n### Features\r\n\r\n- [cli] Add an experimental `pulumi neo` command that creates a Pulumi Neo agent task in CLI\r\ntool-execution mode and runs the local tool loop. Filesystem and shell tool calls\r\nissued by the agent run on the user's machine in their working directory; the\r\ninteractive chat continues to happen in the Pulumi Console at the URL the command\r\nprints. Hidden behind PULUMI_EXPERIMENTAL.\r\n\r\n  [#22473](https://github.com/pulumi/pulumi/pull/22473)\r\n\r\n- [cli] Add support for handling user approval requests in the `pulumi neo` terminal UI.\r\nWhen the agent requests confirmation for a sensitive action, the TUI prompts the\r\nuser and forwards their response back to the Pulumi Console. Hidden behind\r\nPULUMI_EXPERIMENTAL.\r\n\r\n  [#22589](https://github.com/pulumi/pulumi/pull/22589)\r\n\r\n- [cli] Add an interactive terminal UI for `pulumi neo` built with bubbletea, rendering\r\nagent messages, tool calls, and streaming output in the terminal alongside the\r\nPulumi Console session. Hidden behind PULUMI_EXPERIMENTAL.\r\n\r\n  [#22570](https://github.com/pulumi/pulumi/pull/22570)\r\n\r\n- [cli] Switch logging library from glog to slog.\r\n\r\nBREAKING: any `if logging.V(x) {` need to be changed to `if logging.V(x).Enabled()`\r\n\r\n  [#22548](https://github.com/pulumi/pulumi/pull/22548)\r\n\r\n- [cli] Add a plan-mode toggle to the `pulumi neo` TUI, bound to Shift+Tab. When\r\nplan mode is on, Neo explores and asks questions without writing files,\r\nrunning `pulumi up`, or opening PRs, and surfaces an approved plan via a\r\ndedicated approval gate. The toggle must be set before the first message\r\n(plan mode is task-level on the wire); approving the proposed plan exits\r\nplan mode automatically.\r\n\r\n  [#22634](https://github.com/pulumi/pulumi/pull/22634)\r\n\r\n- [cli] The `pulumi neo` TUI now drives its \"thinking\" spinner off a single declarative\r\nrule (the spinner stays on until a final event — final assistant message, approval\r\nrequest, cancellation, or error — lands), so the indicator no longer flickers off\r\nwhen the agent hands off tool calls to the CLI or when streaming text arrives\r\nbetween tools. Press `Esc` during a turn to ask the agent to cancel; the label\r\nswitches to \"Cancelling...\" until the backend acknowledges.\r\n\r\n  [#22637](https://github.com/pulumi/pulumi/pull/22637)\r\n\r\n- [cli] `pulumi neo` now executes the `edit` filesystem tool locally, matching the schema\r\nand response wording of the upstream mcp-claude-code tool so the agent sees\r\nidentical output whether the call ran on Cloud or CLI. `edit` performs exact-string\r\nreplacement with occurrence-count validation, and creates a new file when the\r\ntarget is missing and `old_string` is empty.\r\n\r\n  [#22654](https://github.com/pulumi/pulumi/pull/22654)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [cli] Render user messages in the `pulumi neo` TUI as soon as they're submitted\r\ninstead of waiting for the Pulumi Cloud event stream to echo them back.\r\nThe initial prompt passed on the command line also appears in the\r\ntranscript at startup. Self-echoes from the server are de-duplicated;\r\nuser input that originated from another client (e.g. the web UI on the\r\nsame task) still renders.\r\n\r\n  [#22629](https://github.com/pulumi/pulumi/pull/22629)\r\n\r\n- [cli] Wrap warnings, errors, and user-message bubbles to the terminal width in the\r\n`pulumi neo` TUI. Previously these blocks rendered as single long lines that\r\nwere clipped at the right edge of the viewport. On resize, all width-dependent\r\ntranscript blocks (user messages, warnings, errors, assistant messages) now\r\nreflow to the new terminal width.\r\n\r\n  [#22635](https://github.com/pulumi/pulumi/pull/22635)\r\n\r\n- [cli/policy] Fix `policy ls` to use the default org name, not username\r\n  [#22656](https://github.com/pulumi/pulumi/pull/22656)\r\n\r\n- [engine] Fix provider registry race condition in parallel delete-before-replace\r\n  [#21487](https://github.com/pulumi/pulumi/pull/21487)\r\n\r\n- [engine] Signal providers to cancel before closing them during replacement\r\n\r\n- [sdkgen] Error on 'id' in state inputs\r\n  [#22636](https://github.com/pulumi/pulumi/pull/22636)\r\n\r\n- [programgen/python] Add necessary casts between types in generated programs\r\n  [#22567](https://github.com/pulumi/pulumi/pull/22567)\r\n\r\n- [sdkgen/go] Fix caching of package references to be per-deployment not per-process\r\n  [#22170](https://github.com/pulumi/pulumi/pull/22170)\r\n\r\n\r\n### Miscellaneous\r\n\r\n- [java] Upgrade java to v1.25.0\r\n  [#22673](https://github.com/pulumi/pulumi/pull/22673)\r\n\r\n- [auto/go] Generate command methods for the Go Automation API codegen\r\n  [#22612](https://github.com/pulumi/pulumi/pull/22612)\r\n\r\n- [sdk] Clarify docs on the `remote` parameter of `ComponentResource` / `Resource` in the Node and Python SDKs\r\n  [#22603](https://github.com/pulumi/pulumi/pull/22603)\r\n\r\n- [sdk/dotnet] Upgrade dotnet to v3.103.1\r\n  [#22676](https://github.com/pulumi/pulumi/pull/22676)\r\n\r\n- [yaml] Upgrade yaml to v1.32.0\r\n  [#22674](https://github.com/pulumi/pulumi/pull/22674)","publishedAt":"2026-04-23T02:56:27.000Z","fetchedAt":"2026-04-23T06:00:46.625Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.232.0","media":[],"coverageCount":0},{"id":"rel_nFJ5NbX1xN3Gbu3KVzyVM","version":"v3.231.0","type":"feature","title":"v3.231.0","summary":"## 3.231.0 (2026-04-16)\r\n\r\n\r\n### Features\r\n\r\n- [cli] Auto-detect Mercurial repository metadata for `pulumi up` / `pulumi preview` updates, mirroring e...","titleGenerated":null,"titleShort":null,"content":"## 3.231.0 (2026-04-16)\r\n\r\n\r\n### Features\r\n\r\n- [cli] Auto-detect Mercurial repository metadata for `pulumi up` / `pulumi preview` updates, mirroring existing Git support\r\n  [#22618](https://github.com/pulumi/pulumi/pull/22618)\r\n\r\n- [engine] Send Cancel RPC to plugins on host close for graceful shutdown\r\n  [#22569](https://github.com/pulumi/pulumi/pull/22569)\r\n\r\n- [engine] Pass resource options to hooks through the engine\r\n  [#22582](https://github.com/pulumi/pulumi/pull/22582)\r\n\r\n- [engine] Add GetDeploymentInfo to the resource monitor service\r\n\r\n- [auto/go] Add `New` command to Automation API\r\n  [#22439](https://github.com/pulumi/pulumi/pull/22439)\r\n\r\n- [auto/{go,nodejs,python}] Add --diff to automation api for destroy\r\n  [#22563](https://github.com/pulumi/pulumi/pull/22563)\r\n\r\n- [auto/python] Add `new` command to Automation API\r\n  [#22439](https://github.com/pulumi/pulumi/pull/22439)\r\n\r\n- [pcl] Support for resource hooks in PCL\r\n  [#22365](https://github.com/pulumi/pulumi/pull/22365)\r\n\r\n- [sdk-nodejs] Warn when a non-ComponentResource class is passed in the explicit `components` list to `componentProviderHost`\r\n  [#22619](https://github.com/pulumi/pulumi/pull/22619)\r\n\r\n- [sdk-python] Warn when a non-ComponentResource class is passed in the explicit `components` list to `component_provider_host`\r\n  [#22619](https://github.com/pulumi/pulumi/pull/22619)\r\n\r\n- [cli/import] Add support for providers to be defined in the same import file as their users\r\n  [#21671](https://github.com/pulumi/pulumi/pull/21671)\r\n\r\n- [cli/policy] ESC environment support for local policy packs\r\n  [#22495](https://github.com/pulumi/pulumi/pull/22495)\r\n\r\n- [sdk/nodejs] Support package.yaml when using pnpm\r\n  [#22491](https://github.com/pulumi/pulumi/pull/22491)\r\n\r\n- [sdk/python] Add function decorator variants for resource and error hooks\r\n  [#22519](https://github.com/pulumi/pulumi/pull/22519)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [auto/{nodejs,python}] Support --run-program for inline programs with preview_refresh/destroy\r\n\r\n- [backend/diy] Remove state lock for destroy and import with preview only for diy backend\r\n  [#22561](https://github.com/pulumi/pulumi/pull/22561)\r\n\r\n- [engine] Fix snapshot integrity error with component/provider resources in refresh --run-program\r\n  [#21817](https://github.com/pulumi/pulumi/pull/21817)\r\n\r\n- [pcl] Type list and tuple indices as integers not numbers\r\n  [#22592](https://github.com/pulumi/pulumi/pull/22592)\r\n\r\n- [pcl] Builtin functions element and range take int parameters not numbers\r\n  [#22597](https://github.com/pulumi/pulumi/pull/22597)\r\n\r\n- [programgen/{go,nodejs,python}] Fix some cases of name conflicts in program gen not being handled correctly\r\n  [#22556](https://github.com/pulumi/pulumi/pull/22556)\r\n\r\n- [programgen/nodejs] Add necessary casts between types in generated programs\r\n  [#22557](https://github.com/pulumi/pulumi/pull/22557)\r\n\r\n- [programgen/{nodejs,python}] Fix imports of camelCase modules\r\n  [#22536](https://github.com/pulumi/pulumi/pull/22536)\r\n\r\n- [sdk/python] Support Input[Optional[T]] in Python runtime type unwrapping\r\n  [#22553](https://github.com/pulumi/pulumi/pull/22553)\r\n\r\n- [sdkgen] Warn about modules nested under the index module which are not supported\r\n  [#22531](https://github.com/pulumi/pulumi/pull/22531)\r\n\r\n\r\n### Miscellaneous\r\n\r\n- [java] Upgrade java to v1.24.0\r\n  [#22615](https://github.com/pulumi/pulumi/pull/22615)\r\n\r\n- [yaml] Upgrade yaml to v1.31.1\r\n  [#22610](https://github.com/pulumi/pulumi/pull/22610)\r\n\r\n- [sdk/dotnet] Upgrade dotnet to v3.103.0\r\n  [#22614](https://github.com/pulumi/pulumi/pull/22614)\r\n\r\n- [sdk/nodejs] Replace `got` by `fetch`\r\n  [#22533](https://github.com/pulumi/pulumi/pull/22533)","publishedAt":"2026-04-16T13:37:11.000Z","fetchedAt":"2026-04-16T17:01:38.775Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.231.0","media":[],"coverageCount":0},{"id":"rel_UnQ8wIqs2VA92DnNDJkbk","version":"v3.230.0","type":"feature","title":"v3.230.0","summary":"## 3.230.0 (2026-04-08)\r\n\r\n\r\n### Features\r\n\r\n- [cli] Detect AI agents and send in update metadata\r\n  [#22497](https://github.com/pulumi/pulumi/pull/22...","titleGenerated":null,"titleShort":null,"content":"## 3.230.0 (2026-04-08)\r\n\r\n\r\n### Features\r\n\r\n- [cli] Detect AI agents and send in update metadata\r\n  [#22497](https://github.com/pulumi/pulumi/pull/22497)\r\n\r\n- [auto/nodejs] Add \"org\" commands (get-default, set-default, search, search ai) to the auto-generated interface\r\n  [#22395](https://github.com/pulumi/pulumi/pull/22395)\r\n\r\n- [auto/nodejs] Add \"new\" command to the auto-generated interface\r\n  [#22421](https://github.com/pulumi/pulumi/pull/22421)\r\n\r\n- [sdk/{nodejs,python}] Add Cancel handler to Python & Node.js providers\r\n  [#22516](https://github.com/pulumi/pulumi/pull/22516)\r\n\r\n- [cli/policy] Add ESC environment resolution for policy packs\r\n  [#22425](https://github.com/pulumi/pulumi/pull/22425)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [auto/go] Insert --non-interactive flag before \"--\" positional separator to avoid misinterpretation as a positional argument\r\n  [#22462](https://github.com/pulumi/pulumi/pull/22462)\r\n\r\n- [ci] Add code coverage collection for Node.js automation tools tests\r\n  [#22412](https://github.com/pulumi/pulumi/pull/22412)\r\n\r\n- [pcl] Allow key indexing into a map of resources created by range\r\n  [#22498](https://github.com/pulumi/pulumi/pull/22498)\r\n\r\n- [programgen/go] Fix an issue with formatted index modules not importing correctly\r\n\r\n- [cli/state] Check for Pulumi.yaml projects and `backend` option in `state upgrade`\r\n  [#22483](https://github.com/pulumi/pulumi/pull/22483)\r\n\r\n- [sdk/go] Fix Go program generation for ternary expressions inside apply callbacks, add Go predeclared identifiers to reserved words, handle optional list types in union type codegen, and fix unmarshalOutput for known outputs with null elements.\r\n  [#22460](https://github.com/pulumi/pulumi/pull/22460)\r\n\r\n- [sdk/nodejs] Fix inherited input properties missing from component schema when args interface extends another interface\r\n  [#22446](https://github.com/pulumi/pulumi/pull/22446)\r\n\r\n- [sdk/python] Fix inherited input properties missing from component schema when args class inherits from a base class\r\n  [#22484](https://github.com/pulumi/pulumi/pull/22484)\r\n\r\n\r\n### Miscellaneous\r\n\r\n- [java] Upgrade java to v1.23.0\r\n\r\n- [sdk/dotnet] Upgrade dotnet to v3.102.1\r\n\r\n- [yaml] Upgrade to v1.31.0\r\n  [#22501](https://github.com/pulumi/pulumi/pull/22501)\r\n\r\n- [programgen/{dotnet,go,java,nodejs,pcl,python,yaml}] Remove `mimeType` & `readDir` from PCL\r\n  [#22449](https://github.com/pulumi/pulumi/pull/22449)","publishedAt":"2026-04-08T20:50:18.000Z","fetchedAt":"2026-04-11T14:00:13.722Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.230.0","media":[],"coverageCount":0},{"id":"rel_iug_MeA4upMbzlq8YSqxY","version":"v3.229.0","type":"feature","title":"v3.229.0","summary":"## 3.229.0 (2026-04-02)\r\n\r\n\r\n### Features\r\n\r\n- [auto/python] Add org get-default and set-default commands to Automation API\r\n\r\n- [backend/diy] Avoid u...","titleGenerated":null,"titleShort":null,"content":"## 3.229.0 (2026-04-02)\r\n\r\n\r\n### Features\r\n\r\n- [auto/python] Add org get-default and set-default commands to Automation API\r\n\r\n- [backend/diy] Avoid unnecessary S3 bucket HEAD calls to improve performance\r\n  [#22373](https://github.com/pulumi/pulumi/pull/22373)\r\n\r\n- [cli] Allow TRACEPARENT to be set for CLI invocations, parenting the pulumi spans under an existing parent span\r\n  [#22369](https://github.com/pulumi/pulumi/pull/22369)\r\n\r\n- [cli/display] Add `--urns` flag to display full resource URNs instead of short names in preview, up, destroy, refresh, import, and watch commands\r\n  [#22007](https://github.com/pulumi/pulumi/pull/22007)\r\n\r\n- [pcl] Type integer literals as integers rather than numbers in PCL\r\n  [#22268](https://github.com/pulumi/pulumi/pull/22268)\r\n\r\n- [pcl] Support parameterized providers in PCL\r\n  [#22251](https://github.com/pulumi/pulumi/pull/22251)\r\n\r\n- [protobuf] Add RunPlugin2 bidirectional streaming RPC to LanguageRuntime proto\r\n  [#22389](https://github.com/pulumi/pulumi/pull/22389)\r\n\r\n- [yaml] Update YAML runtime to 1.30.2\r\n  [#22426](https://github.com/pulumi/pulumi/pull/22426)\r\n\r\n- [sdk/go] Add org get-default and set-default commands to Automation API\r\n\r\n- [sdk/nodejs] Modernize generated tsconfig.json to align with TypeScript defaults\r\n  [#22370](https://github.com/pulumi/pulumi/pull/22370)\r\n\r\n- [cli/policy] Add a new `policy analyze` command to run a policy pack against existing state\r\n  [#22250](https://github.com/pulumi/pulumi/pull/22250)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [backend/diy] Remove state lock for refresh --preview-only for diy backend\r\n  [#22385](https://github.com/pulumi/pulumi/pull/22385)\r\n\r\n- [cli] Fix OTEL flushing on provider shutdown\r\n  [#22358](https://github.com/pulumi/pulumi/pull/22358)\r\n\r\n- [cli/display] Fix deadlock in message renderer when cancelling an operation\r\n  [#22433](https://github.com/pulumi/pulumi/pull/22433)\r\n\r\n- [engine] Fix `--include` and `--exclude` not working for program-based refresh (RefreshV2)\r\n  [#22404](https://github.com/pulumi/pulumi/pull/22404)\r\n\r\n- [engine] Parallelize plugin cancellation in SignalCancellation\r\n  [#22431](https://github.com/pulumi/pulumi/pull/22431)\r\n\r\n- [pcl] Fix looking up variables in parent scopes\r\n  [#22379](https://github.com/pulumi/pulumi/pull/22379)\r\n\r\n- [pcl] Apply default values from resource schemas\r\n  [#22393](https://github.com/pulumi/pulumi/pull/22393)\r\n\r\n- [sdk/{bun,go,nodejs,python}] Wire Cancel RPC to language host Run\r\n  [#22397](https://github.com/pulumi/pulumi/pull/22397)\r\n\r\n- [sdk/nodejs] Allow TypeScript 6 as a peer dependency\r\n  [#22340](https://github.com/pulumi/pulumi/pull/22340)\r\n\r\n- [sdk/nodejs] Fix closure serialization for __importStar-wrapped modules\r\n  [#22388](https://github.com/pulumi/pulumi/pull/22388)\r\n\r\n- [sdk/python] Cache type metadata and class references in Python SDK to reduce CPU overhead during serialization\r\n  [#22422](https://github.com/pulumi/pulumi/pull/22422)\r\n\r\n- [sdk/python] Replace busy-wait polling in wait_for_rpcs with asyncio.wait\r\n  [#22411](https://github.com/pulumi/pulumi/pull/22411)\r\n\r\n\r\n### Miscellaneous\r\n\r\n- [cli] Add update metadata to the otel root span\r\n  [#22357](https://github.com/pulumi/pulumi/pull/22357)\r\n\r\n- [java] Update to v1.22.0\r\n  [#22437](https://github.com/pulumi/pulumi/pull/22437)\r\n\r\n- [sdk/nodejs] Use nodenext for moduleResolution and module\r\n  [#22363](https://github.com/pulumi/pulumi/pull/22363)","publishedAt":"2026-04-02T16:14:24.000Z","fetchedAt":"2026-04-11T14:00:13.722Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.229.0","media":[],"coverageCount":0},{"id":"rel_DOS7rf_WKzEGFQ9C9RJCb","version":"v3.228.0","type":"feature","title":"v3.228.0","summary":"## 3.228.0 (2026-03-25)\r\n\r\n\r\n### Features\r\n\r\n- [cli] Don't apply the secrets filter to `true` and `false` (case-insensitive)\r\n  [#22269](https://githu...","titleGenerated":null,"titleShort":null,"content":"## 3.228.0 (2026-03-25)\r\n\r\n\r\n### Features\r\n\r\n- [cli] Don't apply the secrets filter to `true` and `false` (case-insensitive)\r\n  [#22269](https://github.com/pulumi/pulumi/pull/22269)\r\n\r\n- [cli] Add grpcs:// support and header authentication to OTLP exporter\r\n  [#22320](https://github.com/pulumi/pulumi/pull/22320)\r\n\r\n- [cli] Read OTEL_RESOURCE_ATTRIBUTES\r\n  [#22329](https://github.com/pulumi/pulumi/pull/22329)\r\n\r\n- [auto/nodejs] Add low-level \"cancel\" command to the auto-generated interface\r\n  [#22156](https://github.com/pulumi/pulumi/pull/22156)\r\n\r\n- [cli/state] Allow `pulumi state delete` to accept multiple resource URNs and delete them in a dependency-safe order\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [cli] Allow relative file paths for --otel-traces\r\n  [#22300](https://github.com/pulumi/pulumi/pull/22300)\r\n\r\n- [cli] Bridge opentracing spans from providers into OTel\r\n  [#22313](https://github.com/pulumi/pulumi/pull/22313)\r\n\r\n- [cli] Correctly end spans for GRPC streams\r\n  [#22304](https://github.com/pulumi/pulumi/pull/22304)\r\n\r\n- [cli/about] Do not include the access token in plain text\r\n  [#22347](https://github.com/pulumi/pulumi/pull/22347)\r\n\r\n- [display] Fix detailed diff indentation so changed resources are not visually nested under unrelated visible resources when unchanged parents are hidden.\r\n  [#22317](https://github.com/pulumi/pulumi/pull/22317)\r\n\r\n- [cli/import] Fix import codegen when generating references to non-standard names\r\n  [#22319](https://github.com/pulumi/pulumi/pull/22319)\r\n\r\n- [engine] Update golang version\r\n  [#22277](https://github.com/pulumi/pulumi/pull/22277)\r\n\r\n- [pcl] Typecheck component inputs in PCL programs\r\n  [#22292](https://github.com/pulumi/pulumi/pull/22292)\r\n\r\n- [programgen/{nodejs,python}] Fix literal conversion when calling into local components\r\n  [#22306](https://github.com/pulumi/pulumi/pull/22306)\r\n\r\n\r\n### Miscellaneous\r\n\r\n- [cli] Add CLI metadata to the root span\r\n  [#22305](https://github.com/pulumi/pulumi/pull/22305)\r\n\r\n- [cli] Add more OTel interceptors for GRPC clients\r\n  [#22309](https://github.com/pulumi/pulumi/pull/22309)\r\n\r\n- [cli] Add spans for plugin installation and add more attributes for dependency installation\r\n  [#22303](https://github.com/pulumi/pulumi/pull/22303)\r\n\r\n- [cli] Allow setting a GRPC endpoint for performance tests\r\n  [#22330](https://github.com/pulumi/pulumi/pull/22330)\r\n\r\n- [backend/diy] Start deprecation of non-project mode for DIY backends\r\n  [#19625](https://github.com/pulumi/pulumi/pull/19625)","publishedAt":"2026-03-25T09:17:06.000Z","fetchedAt":"2026-04-11T14:00:13.722Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.228.0","media":[],"coverageCount":0},{"id":"rel_tt-hE-8JfmXvv-Wjhf-VY","version":"v3.227.0","type":"feature","title":"v3.227.0","summary":"## 3.227.0 (2026-03-19)\r\n\r\n\r\n### Features\r\n\r\n- [engine] The engine will fill in Name and Type for ResourceReference values on the wire protocol\r\n  [#2...","titleGenerated":null,"titleShort":null,"content":"## 3.227.0 (2026-03-19)\r\n\r\n\r\n### Features\r\n\r\n- [engine] The engine will fill in Name and Type for ResourceReference values on the wire protocol\r\n  [#22208](https://github.com/pulumi/pulumi/pull/22208)\r\n\r\n- [sdk/bun] Add support for running policy packs with bun\r\n  [#22206](https://github.com/pulumi/pulumi/pull/22206)\r\n\r\n- [cli/policy] Auto-install missing policy analyzer plugins\r\n  [#22196](https://github.com/pulumi/pulumi/pull/22196)\r\n\r\n- [sdk/python] Add lock file detection for picking the Python toolchain\r\n  [#22234](https://github.com/pulumi/pulumi/pull/22234)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [cli] Use distinct exit codes for different types of error\r\n  [#22205](https://github.com/pulumi/pulumi/pull/22205)\r\n\r\n- [cli] Improve SAML SSO reauthorization error message\r\n\r\n- [engine] Fix snapshot integrity error in refresh v2 with changed parents\r\n  [#22190](https://github.com/pulumi/pulumi/pull/22190)\r\n\r\n- [pcl] Continue running after errors when running with --continue-on-error\r\n  [#22171](https://github.com/pulumi/pulumi/pull/22171)\r\n\r\n- [pcl] Deprecate labels on package blocks\r\n  [#22253](https://github.com/pulumi/pulumi/pull/22253)\r\n\r\n- [programgen] Preserve traversal parts in rewriteRelativeTraversalExpression\r\n  [#22249](https://github.com/pulumi/pulumi/pull/22249)\r\n\r\n- [sdk/bun] Check for an SDK version compatible with bun\r\n  [#22262](https://github.com/pulumi/pulumi/pull/22262)\r\n\r\n- [programgen/nodejs] Correctly generate `for` expressions\r\n  [#22219](https://github.com/pulumi/pulumi/pull/22219)\r\n\r\n- [sdk/go] Add support for Azure DevOps git URLs in pulumi package publish code paths\r\n  [#22217](https://github.com/pulumi/pulumi/pull/22217)\r\n\r\n- [programgen/python] Correctly generate list & dictionary comprehension in Python code\r\n  [#22182](https://github.com/pulumi/pulumi/pull/22182)\r\n\r\n\r\n### Miscellaneous\r\n\r\n- [backend] Move CloudConsoleURL from httpstate to httpstate/client\r\n  [#22258](https://github.com/pulumi/pulumi/pull/22258)\r\n\r\n- [docs] Move remaining content from /developer-docs to /docs\r\n  [#22225](https://github.com/pulumi/pulumi/pull/22225)\r\n\r\n- [sdk/bun] Add a test for the function serialization error message when using bun\r\n  [#22207](https://github.com/pulumi/pulumi/pull/22207)\r\n\r\n- [sdk/bun] Run policy language tests for bun\r\n  [#22209](https://github.com/pulumi/pulumi/pull/22209)\r\n\r\n- [sdk/bun] Mark pulumi-language-bun as a bundled plugin\r\n  [#22265](https://github.com/pulumi/pulumi/pull/22265)\r\n\r\n- [sdk/{bun,nodejs}] Use defaultErrorMessage in run-plugin and run-policy-pack\r\n  [#22210](https://github.com/pulumi/pulumi/pull/22210)","publishedAt":"2026-03-19T13:16:29.000Z","fetchedAt":"2026-04-11T14:00:13.722Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.227.0","media":[],"coverageCount":0},{"id":"rel_etAB2j2CoSH2Fz1Woj7Jf","version":"v3.226.0","type":"feature","title":"v3.226.0","summary":"## 3.226.0 (2026-03-11)\r\n\r\n\r\n### Features\r\n\r\n- [backend/service] Automatically repair snapshot integrity issues, while sending an error event to the b...","titleGenerated":null,"titleShort":null,"content":"## 3.226.0 (2026-03-11)\r\n\r\n\r\n### Features\r\n\r\n- [backend/service] Automatically repair snapshot integrity issues, while sending an error event to the backend for further diagnosis\r\n  [#22179](https://github.com/pulumi/pulumi/pull/22179)\r\n\r\n- [cli] Add a --otel-traces flag, that allows writing otel traces to a file, or directly to a grpc interface\r\n  [#22129](https://github.com/pulumi/pulumi/pull/22129)\r\n\r\n- [engine] Engine will use provider references from `__self__` arguments to calls\r\n  [#22114](https://github.com/pulumi/pulumi/pull/22114)\r\n\r\n- [sdk/bun] Support bun as a runtime\r\n  [#22177](https://github.com/pulumi/pulumi/pull/22177)\r\n  [#22049](https://github.com/pulumi/pulumi/pull/22049)\r\n\r\n- [sdk/bun] Add debugger support for the bun runtime\r\n  [#22177](https://github.com/pulumi/pulumi/pull/22177)\r\n\r\n- [sdk/bun] Add support for Bun as a plugin runtime\r\n  [#22189](https://github.com/pulumi/pulumi/pull/22189)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [engine] Fix ReplacementTrigger firing due to dependency changes\r\n  [#22119](https://github.com/pulumi/pulumi/pull/22119)\r\n\r\n- [engine] Correctly serialize output values to the snapshot rather than always recording them as computed even when known\r\n  [#22120](https://github.com/pulumi/pulumi/pull/22120)\r\n\r\n- [pcl] Support resource ranges in PCL\r\n  [#22144](https://github.com/pulumi/pulumi/pull/22144)\r\n\r\n- [cli/config] Include environments used when refreshing a stack's config\r\n  [#22103](https://github.com/pulumi/pulumi/pull/22103)\r\n\r\n- [cli/display] Fix `pulumi destroy` not showing parent resource hierarchy\r\n  [#22148](https://github.com/pulumi/pulumi/pull/22148)\r\n\r\n- [cli/package] Correctly parse package URLs with .git in them\r\n  [#22174](https://github.com/pulumi/pulumi/pull/22174)\r\n\r\n- [cli/plugin] Fix package get-schema for binary providers at relative paths\r\n  [#22107](https://github.com/pulumi/pulumi/pull/22107)\r\n\r\n- [sdk/python] Handle null detailedDiff in automation StepEventMetadata JSON parsing\r\n  [#22140](https://github.com/pulumi/pulumi/pull/22140)\r\n\r\n- [cli/state] Fix state move integrity errors when copied providers depend on resources left in source stack\r\n  [#22141](https://github.com/pulumi/pulumi/pull/22141)\r\n\r\n\r\n### Miscellaneous\r\n\r\n- [cli/about] Show bun information in `pulumi about`\r\n  [#22121](https://github.com/pulumi/pulumi/pull/22121)\r\n\r\n- [programgen/go] Target go 1.25 for generated go.mod files (instead of go 1.23)\r\n  [#22070](https://github.com/pulumi/pulumi/pull/22070)\r\n\r\n- [sdkgen/go] Target go 1.25 for generated go.mod files for SDKs (instead of go 1.20)\r\n  [#22131](https://github.com/pulumi/pulumi/pull/22131)\r\n\r\n- [sdk/python] Read Poetry and uv lockfiles to determine program dependencies\r\n  [#22072](https://github.com/pulumi/pulumi/pull/22072)\r\n\r\n- [sdk/python] Use importlib to find pulumi-plugin.json for installed packages\r\n  [#22127](https://github.com/pulumi/pulumi/pull/22127)","publishedAt":"2026-03-12T15:52:58.000Z","fetchedAt":"2026-04-11T14:00:13.722Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.226.0","media":[],"coverageCount":0},{"id":"rel_1hLOR8BAx5jmKk4mKzA-X","version":"v3.225.1","type":"feature","title":"v3.225.1","summary":"## 3.225.1 (2026-03-05)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [engine] Fix inheritence of default providers across resources of different packages\r\n  [#22101](https...","titleGenerated":null,"titleShort":null,"content":"## 3.225.1 (2026-03-05)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [engine] Fix inheritence of default providers across resources of different packages\r\n  [#22101](https://github.com/pulumi/pulumi/pull/22101)\r\n\r\n- [programgen/go] Fix panic on digit-prefixed schema properties in Go code generation\r\n  [#21917](https://github.com/pulumi/pulumi/pull/21917)\r\n\r\n- [programgen/go] Fix plain values not always being lifted to input/output values when needed\r\n  [#22084](https://github.com/pulumi/pulumi/pull/22084)\r\n\r\n- [programgen/python] Fix generation of `entries` and `lookup` calls\r\n  [#22086](https://github.com/pulumi/pulumi/pull/22086)","publishedAt":"2026-03-05T20:24:38.000Z","fetchedAt":"2026-04-11T14:00:35.591Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.225.1","media":[],"coverageCount":0},{"id":"rel_mt3T8tuAGVcZMyLuEM7Ya","version":"v3.225.0","type":"feature","title":"v3.225.0","summary":"## 3.225.0 (2026-03-04)\r\n\r\n\r\n### Features\r\n\r\n- [engine] Automatically make invoke outputs secret when there is a secret input, and the invoke provider...","titleGenerated":null,"titleShort":null,"content":"## 3.225.0 (2026-03-04)\r\n\r\n\r\n### Features\r\n\r\n- [engine] Automatically make invoke outputs secret when there is a secret input, and the invoke provider does not support secrets\r\n  [#21959](https://github.com/pulumi/pulumi/pull/21959)\r\n\r\n- [engine] The engine now handles the inheritance of the `provider` option in resource registrations\r\n  [#21999](https://github.com/pulumi/pulumi/pull/21999)\r\n\r\n- [engine] Enable journaling by default. It can still be turned off using the PULUMI_DISABLE_JOURNALING env variable\r\n  [#22041](https://github.com/pulumi/pulumi/pull/22041)\r\n\r\n- [programgen] PCL can now express config values should be read as secrets\r\n  [#22066](https://github.com/pulumi/pulumi/pull/22066)\r\n\r\n- [yaml] Update yaml to v1.30.0\r\n\r\n- [cli/engine] Add a flag for automatically opening a Neo task on preview/up failure\r\n  [#21960](https://github.com/pulumi/pulumi/pull/21960)\r\n\r\n- [cli/package] Support source-based packages in `pulumi schema check`, not just schema files\r\n  [#21897](https://github.com/pulumi/pulumi/pull/21897)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [cli] Fix `stack import` panicking when importing a service stack into a DIY backend\r\n  [#22076](https://github.com/pulumi/pulumi/pull/22076)\r\n\r\n- [engine] Fix panic when a new component resource in the program is not targeted\r\n  [#21957](https://github.com/pulumi/pulumi/pull/21957)\r\n\r\n- [sdk/nodejs] Implement GetProgramDependencies for bun and pnpm\r\n  [#22065](https://github.com/pulumi/pulumi/pull/22065)\r\n\r\n\r\n### Miscellaneous\r\n\r\n- [cli] Build language plugins with the grpcnotrace tag to reduce the binary size\r\n  [#22012](https://github.com/pulumi/pulumi/pull/22012)","publishedAt":"2026-03-04T22:51:28.000Z","fetchedAt":"2026-04-11T14:00:35.591Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.225.0","media":[],"coverageCount":0},{"id":"rel_iObkBRZ-NNvZ3DVHj4NWg","version":"v3.224.0","type":"feature","title":"v3.224.0","summary":"## 3.224.0 (2026-02-26)\r\n\r\n### Features\r\n\r\n- [backend/diy] Add zstd compression option for DIY backend state files\r\n  [#21877](https://github.com/pulu...","titleGenerated":null,"titleShort":null,"content":"## 3.224.0 (2026-02-26)\r\n\r\n### Features\r\n\r\n- [backend/diy] Add zstd compression option for DIY backend state files\r\n  [#21877](https://github.com/pulumi/pulumi/pull/21877)\r\n\r\n- [engine] Automatically make invoke outputs secret when there is a secret input, and the invoke provider does not support secrets\r\n\r\n- [cli/package] Support source-based packages in `pulumi schema check`, not just schema files\r\n  [#21897](https://github.com/pulumi/pulumi/pull/21897)\r\n\r\n### Bug Fixes\r\n\r\n- [pkg] Correct the schema for \"pulumi:pulumi:StackReference\"\r\n  [#21895](https://github.com/pulumi/pulumi/pull/21895)\r\n\r\n- [programgen/nodejs] Correct the semantics of singleOrNone in generated files\r\n  [#21947](https://github.com/pulumi/pulumi/pull/21947)\r\n\r\n- [sdk/python] Fix `StepEventMetadata.from_json` reading `detailed_diff` (snake_case) instead of `detailedDiff` (camelCase), and `PolicyEvent.from_json` reading `resource_urn` instead of `resourceUrn`, causing both fields to always be `None`\r\n  [#21714](https://github.com/pulumi/pulumi/pull/21714)\r\n\r\n- [sdk/python] Convert integer component inputs to `int`\r\n  [#21944](https://github.com/pulumi/pulumi/pull/21944)\r\n\r\n- [sdk/python] Fix crash in forked processes using automation API\r\n  [#21937](https://github.com/pulumi/pulumi/pull/21937)\r\n\r\n- [engine] Fix panic when a new component resource in the program is not targeted\r\n  [#21957](https://github.com/pulumi/pulumi/pull/21957)\r\n\r\n### Miscellaneous\r\n\r\n- [sdk] Update java, dotnet & yaml\r\n  [#21961](https://github.com/pulumi/pulumi/pull/21961)\r\n\r\n- [sdk/python] Improve the performance of `contains_unknowns` for large objects\r\n  [#21893](https://github.com/pulumi/pulumi/pull/21893)\r\n\r\n\r\n","publishedAt":"2026-02-26T18:42:00.000Z","fetchedAt":"2026-04-11T14:00:35.591Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.224.0","media":[],"coverageCount":0},{"id":"rel_hX4bGgMWw6lVzN9Daz0Qm","version":"v3.223.0","type":"feature","title":"v3.223.0","summary":"## 3.223.0 (2026-02-19)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [engine] Report policy pack installation errors\r\n  [#21882](https://github.com/pulumi/pulumi/pull/2188...","titleGenerated":null,"titleShort":null,"content":"## 3.223.0 (2026-02-19)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [engine] Report policy pack installation errors\r\n  [#21882](https://github.com/pulumi/pulumi/pull/21882)","publishedAt":"2026-02-20T02:42:12.000Z","fetchedAt":"2026-04-11T14:00:35.591Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.223.0","media":[],"coverageCount":0},{"id":"rel_EKUJ9M7KvUvkzs1Fy9vBl","version":"v3.222.0","type":"feature","title":"v3.222.0","summary":"## 3.222.0 (2026-02-18)\r\n\r\n\r\n### Features\r\n\r\n- [programgen/go] Generate Call requests\r\n  [#21836](https://github.com/pulumi/pulumi/pull/21836)\r\n\r\n\r\n##...","titleGenerated":null,"titleShort":null,"content":"## 3.222.0 (2026-02-18)\r\n\r\n\r\n### Features\r\n\r\n- [programgen/go] Generate Call requests\r\n  [#21836](https://github.com/pulumi/pulumi/pull/21836)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [sdk/{nodejs,python}] Fix hang when loading policy packs that use v1.18.1 or older of the policy SDK\r\n  [#21866](https://github.com/pulumi/pulumi/pull/21866)","publishedAt":"2026-02-19T03:22:05.000Z","fetchedAt":"2026-04-11T14:00:35.591Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.222.0","media":[],"coverageCount":0},{"id":"rel_8STBRjwSzQ1E00oe2Rfdk","version":"v3.221.0","type":"feature","title":"v3.221.0","summary":"## 3.221.0 (2026-02-17)\r\n\r\n\r\n### Features\r\n\r\n- [auto] Support Go 1.26\r\n  [#21835](https://github.com/pulumi/pulumi/pull/21835)\r\n\r\n- [engine] BREAKING:...","titleGenerated":null,"titleShort":null,"content":"## 3.221.0 (2026-02-17)\r\n\r\n\r\n### Features\r\n\r\n- [auto] Support Go 1.26\r\n  [#21835](https://github.com/pulumi/pulumi/pull/21835)\r\n\r\n- [engine] BREAKING: Rename `pulumiVersionRange` to `requiredPulumiVersion` in `PulumiPlugin.yaml`\r\n  [#21807](https://github.com/pulumi/pulumi/pull/21807)\r\n\r\n- [cli/plugin] Reduce GitHub API usage when downloading plugins\r\n  [#21774](https://github.com/pulumi/pulumi/pull/21774)\r\n\r\n- [protobuf] Add loader_target to RunPluginRequest\r\n  [#21763](https://github.com/pulumi/pulumi/pull/21763)\r\n\r\n- [sdk/nodejs] Support enums when inferring schemas from components\r\n  [#21787](https://github.com/pulumi/pulumi/pull/21787)\r\n\r\n- [sdk/nodejs] Support the Partial<T> utility type in component schema inference\r\n  [#21802](https://github.com/pulumi/pulumi/pull/21802)\r\n\r\n- [sdk/nodejs] Support the Required<T> utility type in component schema inference\r\n  [#21803](https://github.com/pulumi/pulumi/pull/21803)\r\n\r\n\r\n### Bug Fixes\r\n\r\n- [cli] Make stack graph output deterministic\r\n  [#21786](https://github.com/pulumi/pulumi/pull/21786)\r\n\r\n- [engine] Fix snapshot integrity error in `refresh --run-program` with component resources\r\n  [#21806](https://github.com/pulumi/pulumi/pull/21806)\r\n\r\n- [engine] Fix race in refresh --run-program\r\n  [#21815](https://github.com/pulumi/pulumi/pull/21815)\r\n\r\n- [programgen/go] Correctly handle import paths for nested modules\r\n  [#21812](https://github.com/pulumi/pulumi/pull/21812)\r\n\r\n- [sdkgen] Support type references to parameterized and third-party packages\r\n  [#21804](https://github.com/pulumi/pulumi/pull/21804)\r\n\r\n- [sdkgen/go] Do not depend on pulumix against instructions for enums\r\n  [#21818](https://github.com/pulumi/pulumi/pull/21818)\r\n\r\n- [cli/{install,package}] Don't panic when a non-absolute path is passed to `pulumi package get-schema` where the PulumiPlugin.yaml has a packages section\r\n  [#21794](https://github.com/pulumi/pulumi/pull/21794)\r\n\r\n- [cli/{install,package}] Only link a Pulumi project once\r\n  [#21788](https://github.com/pulumi/pulumi/pull/21788)\r\n\r\n- [cli/{install,package}] Run in the correct location when using `uv` to link python packages\r\n  [#21796](https://github.com/pulumi/pulumi/pull/21796)\r\n\r\n- [cli/package] Allow underscores in the path of plugin URLs\r\n  [#21778](https://github.com/pulumi/pulumi/pull/21778)\r\n\r\n- [sdk/{nodejs,python}] Use new policy plugin support to run policy packs\r\n  [#21684](https://github.com/pulumi/pulumi/pull/21684)\r\n\r\n- [sdk/python] Surface errors from uv, poetry or pip during linking\r\n  [#21770](https://github.com/pulumi/pulumi/pull/21770)\r\n\r\n- [sdk/python] Always surface errors from uv, poetry or pip during dependency installation\r\n  [#21814](https://github.com/pulumi/pulumi/pull/21814)\r\n\r\n- [sdkgen/python] Add missing blank line before :param lists\r\n  [#21789](https://github.com/pulumi/pulumi/pull/21789)","publishedAt":"2026-02-17T23:31:37.000Z","fetchedAt":"2026-04-11T14:00:35.587Z","url":"https://github.com/pulumi/pulumi/releases/tag/v3.221.0","media":[],"coverageCount":0}],"pagination":{"page":1,"pageSize":20,"returned":20,"totalItems":109,"totalPages":6,"hasMore":true},"summaries":{"rolling":{"windowDays":90,"summary":"Pulumi spent the last 90 days expanding automation and observability while shipping runtime and SDK improvements across multiple languages. The Automation API gained org command coverage across Node.js and Python, and the engine introduced the OnError resource hook for custom retry policies across Go, Node.js, and Python SDKs. On observability, the CLI shipped OTLP trace export with gRPC support, OTEL resource attributes reading, and a new --urns flag to display full resource URNs in previews and deployments. Runtime support broadened with Bun added as both a project runtime and plugin runtime, and the SDK now supports Python lock file detection for toolchain selection. The engine also automated snapshot integrity repair while improving provider inheritance and enabling journaling by default, though v3.221.0 introduced a breaking change renaming pulumiVersionRange to requiredPulumiVersion in plugin configuration.","releaseCount":17,"generatedAt":"2026-04-11T14:00:39.413Z"},"monthly":[{"year":2026,"month":3,"summary":"March focused on observability infrastructure and runtime expansion. The CLI gained OpenTelemetry tracing capabilities—writing spans to files or gRPC endpoints with header authentication and resource attribute support—while the engine improved snapshot integrity with automatic repair and diagnostics. Pulumi added Bun as a fully supported runtime alongside Node.js, including debugger integration and policy pack execution, and the state management tool now handles bulk resource deletion in dependency-safe order.","releaseCount":3,"generatedAt":"2026-04-11T14:00:19.626Z"}]}}