NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1667 most downloaded on PyPI
Pulumi's Python SDK
Last release today
02 Oct 2026
Ships on a steady schedule
a new release about every 8 days
Nearly every release is documented
notes for 59 of the last 60 stable releases
7 versions withdrawn
withdrawn after publishing
8 years old
4961 releases · first in 2018
[cli] Add pulumi logs decrypt command for viewing logs #22523
[cli] Add pulumi logs decrypt command for viewing logs
#22523
[cli] Bundle the hcl language host (from pulumi-labs/pulumi-hcl)
#22807
[cli] Automatically install the hcl converter from pulumi-labs/pulumi-hcl when running pulumi convert --from hcl
#22816
[pcl] Add read blocks to PCL to read resources via ID and query instead of registering them
#22641
[cli/cloud] Add pulumi cloud api <op-or-path> for calling any Pulumi Cloud API
endpoint, with --field/--header/--input/--body flag handling, path
template binding, content negotiation via --format, and --dry-run
[cli/cloud] Add --paginate to pulumi cloud api: follow continuation cursors,
accumulate items into a single JSON envelope, and surface progress
events to stderr with --emit-events (page, complete, truncated,
partial_failure, cancelled).
[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.
#22820
[cli] Surface the error and exit when pulumi neo fails to create the underlying task, instead of leaving the TUI stuck in Thinking…
#22825
[codegen/go] Correctly generate []pulumi.Asset & []pulumi.Archive
#22827
[cli/neo] Exit cleanly when the user presses Ctrl+C twice in pulumi neo instead of hanging until a third press
#22821
[engine] The engine now caches schemas at PULUMI_HOME/schemas, and will cache for parameterised packages as well
#22812
[sdk-python] Preserve __-prefixed keys (e.g. __type discriminators) across RPC deserialization, matching the behavior of the other language SDKs
#22834
[programgen/{nodejs,python}] Fix programgen to emit the right length check for string length
#22802
pulumi neo welcome banner with new Neo-branded ASCII art.
#22817One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
[cli/cloud] Add pulumi cloud api describe for inspecting the parameters, request body, and response schema of any Pulumi Cloud API operation, with tex
[cli/cloud] Add pulumi cloud api describe for inspecting the parameters, request
body, and response schema of any Pulumi Cloud API operation, with
text, markdown, and JSON output
[cli/cloud] Add pulumi cloud api list for browsing every endpoint exposed by the Pulumi
Cloud OpenAPI spec, with table and JSON output
Nothing published for this version
Nothing published for this version
[auto/python] Expose the auto-generated Pulumi CLI interface as workspace.cli_api #22638
[auto/python] Expose the auto-generated Pulumi CLI interface as workspace.cli_api
#22638
[cli] Add encrypted logging to ~/.pulumi/logs; use the PULUMI_ENABLE_AUTOMATIC_LOGGING feature flag to turn it on #22494
[cli] Implement the filesystem__grep and filesystem__content_replace local tools
for pulumi neo. grep runs a regex search across files in the project root
with an optional include glob filter and returns results in path:lineno: line
form. content_replace performs a literal multi-file search-and-replace with a
file_pattern glob and dry_run preview mode. Both tools skip binary files,
hidden directories, and node_modules, and reject paths outside the project
root. Their input schemas match the cloud-side tool definitions.
[cli] Add pulumi_preview and pulumi_up as local tools for the experimental pulumi neo
agent. The Neo TUI renders a persistent bordered block for each operation that
streams changed resources and diagnostics as the engine runs and finalizes with a
summary of the op counts. Hidden behind PULUMI_EXPERIMENTAL.
[engine] Add List to the provider protocol and schema
#22693
[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!"
#22679
[programgen] Do not wrap a call(...) on a method whose return type is marked plain in an Output. Previously
PCL bound every method call's return type as Output<T>, which caused downstream program-gen
to emit broken .apply(...)/.ApplyT(...) traversals against plain struct returns (e.g.
methods with liftSingleValueMethodReturns=true or ReturnTypePlain=true).
[backend/diy] When using a backend url containing creds (e.g. PostgreSQL conn string), mask user:pass as in lock-related error messages #22701
[codegen/go] Generate unqualified Provider references for the package's own provider resource. Previously
the Go codegen always emitted <pkg>.Provider even when the reference appeared inside <pkg>
itself, producing identifiers that would not compile. Affects generated code for method return
types (and other schema positions) that reference pulumi:providers:<pkg>.
[codegen/nodejs] Generate unqualified Provider references for the package's own provider resource when emitting
TypeScript code inside that package. Previously the generator always qualified the name as
<pkg>.Provider, which does not resolve when no <pkg> namespace import is in scope.
[codegen/nodejs] Import the correct class name for a provider resource. Imports for pulumi:providers:<pkg> used
the title-cased package name instead of Provider, producing a phantom identifier that clashed
with the containing package's component/resource classes.
[programgen/nodejs] Emit await for call(...) invocations of methods whose return type is marked plain, and
force the generated program into an async export = async () => ... wrapper whenever such a
call is present. The Node SDK returns Promise<T> for plain methods; previously program-gen
used the result directly, which did not match its runtime type.
[codegen/python] Avoid a self-import (import pulumi_<pkg> inside pulumi_<pkg>/<module>.py) when referencing
the package's own provider resource. Python referenced the Provider as pulumi_<pkg>.Provider
even inside that package, which caused a circular import at runtime.
[sdk/python] Reduce internal Output[T] data to a single asyncio.Future
#22661
[sdkgen/{nodejs,python}] Generate optional input types that accept undefined/None values #22552
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
[cli] Add an experimental pulumi neo command that creates a Pulumi Neo agent task in CLI tool-execution mode and runs the local tool loop. Filesystem
[cli] Add an experimental pulumi neo command that creates a Pulumi Neo agent task in CLI
tool-execution mode and runs the local tool loop. Filesystem and shell tool calls
issued by the agent run on the user's machine in their working directory; the
interactive chat continues to happen in the Pulumi Console at the URL the command
prints. Hidden behind PULUMI_EXPERIMENTAL.
[cli] Add support for handling user approval requests in the pulumi neo terminal UI.
When the agent requests confirmation for a sensitive action, the TUI prompts the
user and forwards their response back to the Pulumi Console. Hidden behind
PULUMI_EXPERIMENTAL.
[cli] Add an interactive terminal UI for pulumi neo built with bubbletea, rendering
agent messages, tool calls, and streaming output in the terminal alongside the
Pulumi Console session. Hidden behind PULUMI_EXPERIMENTAL.
[cli] Switch logging library from glog to slog.
BREAKING: any if logging.V(x) { need to be changed to if logging.V(x).Enabled()
[cli] Add a plan-mode toggle to the pulumi neo TUI, bound to Shift+Tab. When
plan mode is on, Neo explores and asks questions without writing files,
running pulumi up, or opening PRs, and surfaces an approved plan via a
dedicated approval gate. The toggle must be set before the first message
(plan mode is task-level on the wire); approving the proposed plan exits
plan mode automatically.
[cli] The pulumi neo TUI now drives its "thinking" spinner off a single declarative
rule (the spinner stays on until a final event — final assistant message, approval
request, cancellation, or error — lands), so the indicator no longer flickers off
when the agent hands off tool calls to the CLI or when streaming text arrives
between tools. Press Esc during a turn to ask the agent to cancel; the label
switches to "Cancelling..." until the backend acknowledges.
[cli] pulumi neo now executes the edit filesystem tool locally, matching the schema
and response wording of the upstream mcp-claude-code tool so the agent sees
identical output whether the call ran on Cloud or CLI. edit performs exact-string
replacement with occurrence-count validation, and creates a new file when the
target is missing and old_string is empty.
[cli] Render user messages in the pulumi neo TUI as soon as they're submitted
instead of waiting for the Pulumi Cloud event stream to echo them back.
The initial prompt passed on the command line also appears in the
transcript at startup. Self-echoes from the server are de-duplicated;
user input that originated from another client (e.g. the web UI on the
same task) still renders.
[cli] Wrap warnings, errors, and user-message bubbles to the terminal width in the
pulumi neo TUI. Previously these blocks rendered as single long lines that
were clipped at the right edge of the viewport. On resize, all width-dependent
transcript blocks (user messages, warnings, errors, assistant messages) now
reflow to the new terminal width.
[cli/policy] Fix policy ls to use the default org name, not username
#22656
[engine] Fix provider registry race condition in parallel delete-before-replace #21487
[engine] Signal providers to cancel before closing them during replacement
[sdkgen] Error on 'id' in state inputs #22636
[programgen/python] Add necessary casts between types in generated programs #22567
[sdkgen/go] Fix caching of package references to be per-deployment not per-process #22170
[java] Upgrade java to v1.25.0 #22673
[auto/go] Generate command methods for the Go Automation API codegen #22612
[sdk] Clarify docs on the remote parameter of ComponentResource / Resource in the Node and Python SDKs
#22603
[sdk/dotnet] Upgrade dotnet to v3.103.1 #22676
[yaml] Upgrade yaml to v1.32.0 #22674
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
[cli] Auto-detect Mercurial repository metadata for pulumi up / pulumi preview updates, mirroring existing Git support #22618
[cli] Auto-detect Mercurial repository metadata for pulumi up / pulumi preview updates, mirroring existing Git support
#22618
[engine] Send Cancel RPC to plugins on host close for graceful shutdown #22569
[engine] Pass resource options to hooks through the engine #22582
[engine] Add GetDeploymentInfo to the resource monitor service
[auto/go] Add New command to Automation API
#22439
[auto/{go,nodejs,python}] Add --diff to automation api for destroy #22563
[auto/python] Add new command to Automation API
#22439
[pcl] Support for resource hooks in PCL #22365
[sdk-nodejs] Warn when a non-ComponentResource class is passed in the explicit components list to componentProviderHost
#22619
[sdk-python] Warn when a non-ComponentResource class is passed in the explicit components list to component_provider_host
#22619
[cli/import] Add support for providers to be defined in the same import file as their users #21671
[cli/policy] ESC environment support for local policy packs #22495
[sdk/nodejs] Support package.yaml when using pnpm #22491
[sdk/python] Add function decorator variants for resource and error hooks #22519
[auto/{nodejs,python}] Support --run-program for inline programs with preview_refresh/destroy
[backend/diy] Remove state lock for destroy and import with preview only for diy backend #22561
[engine] Fix snapshot integrity error with component/provider resources in refresh --run-program #21817
[pcl] Type list and tuple indices as integers not numbers #22592
[pcl] Builtin functions element and range take int parameters not numbers #22597
[programgen/{go,nodejs,python}] Fix some cases of name conflicts in program gen not being handled correctly #22556
[programgen/nodejs] Add necessary casts between types in generated programs #22557
[programgen/{nodejs,python}] Fix imports of camelCase modules #22536
[sdk/python] Support Input[Optional[T]] in Python runtime type unwrapping #22553
[sdkgen] Warn about modules nested under the index module which are not supported #22531
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
[cli] Detect AI agents and send in update metadata #22497
[cli] Detect AI agents and send in update metadata #22497
[auto/nodejs] Add "org" commands (get-default, set-default, search, search ai) to the auto-generated interface #22395
[auto/nodejs] Add "new" command to the auto-generated interface #22421
[sdk/{nodejs,python}] Add Cancel handler to Python & Node.js providers #22516
[cli/policy] Add ESC environment resolution for policy packs #22425
[auto/go] Insert --non-interactive flag before "--" positional separator to avoid misinterpretation as a positional argument #22462
[ci] Add code coverage collection for Node.js automation tools tests #22412
[pcl] Allow key indexing into a map of resources created by range #22498
[programgen/go] Fix an issue with formatted index modules not importing correctly
[cli/state] Check for Pulumi.yaml projects and backend option in state upgrade
#22483
[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. #22460
[sdk/nodejs] Fix inherited input properties missing from component schema when args interface extends another interface #22446
[sdk/python] Fix inherited input properties missing from component schema when args class inherits from a base class #22484
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →