Skip to content

Release history

pulumi releases

Pulumi - Infrastructure as Code in any programming language

All releases

32 shown

No immediate action
v3.244.0 Bug fix

Bug fixes in v3.244.0

Review required
v3.243.0 Mixed
Auth

CLI features + bug fixes + docs

No immediate action
v3.242.0 New feature

npx support + org/member commands + Insights scans

No immediate action
v3.241.0 Breaking risk

JSON outputs + schedule/webhook/drift/audit-policy/Insights features

No immediate action
v3.239.0 New feature

--output json in pulumi import

No immediate action
v3.238.0 New feature

JSON output for pulumi up

v3.237.0 New feature
Notable features
  • Add `pulumi package new` command to bootstrap a Pulumi package from a template
  • Include running command name and detected AI agent in User-Agent header on Pulumi Cloud API requests
  • Include `result` field on the summary engine event
Full changelog

3.237.0 (2026-05-08)

Features

  • [cli] Include the running command name and detected AI agent (when present) in the User-Agent header on Pulumi Cloud API requests
    #22908

  • [engine] Include result on the summary engine event
    #22883

  • [sdkgen] Eagerly error on schemas with unconstructable types
    #22890

  • [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
    #22726

  • [cli/package] Add pulumi package new to bootstrap a Pulumi package from a template
    #22837

Bug Fixes

  • [cli] Add blank-line gaps between pulumi neo TUI conversation blocks
    #22846

  • [cli/import] Preserve __-prefixed keys when generating PCL for imported resource state, so provider-defined payloads round-trip correctly
    #22856

  • [cli/neo] Render ux__ask_user clarifying questions as questions instead of approval prompts
    #22862

  • [cli/neo] Fix a panic when cancelling a pulumi neo session
    #22898

  • [cli/neo] Render every assistant message in the TUI scrollback so multi-turn commentary no longer disappears between tool calls

  • [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
    #22891

  • [codegen/pcl] Stop reporting spurious circular references when an ignoreChanges, hideDiffs, replaceOnChanges, or additionalSecretOutputs entry shares a name with a top-level node
    #22916

  • [programgen/pcl] Fix PCL binder panic when a conditional mixes a Promise-typed branch with a try() branch
    #22907

  • [sdk/python] Support NotRequired, Required and total=False in TypedDicts for component resource arg types
    #22858

Miscellaneous

  • [cli/cloud] Auto-fit pulumi cloud api list table to terminal width and replace the
    tabular table renderer with go-pretty

    #22874

  • [sdk/nodejs] Test on Node.js 26 and drop 20
    #22872

v3.235.0 New feature
Notable features
  • `pulumi logs decrypt` command to view decrypted log entries
  • Bundle the `hcl` language host in the CLI
  • Automatic installation of the HCL converter for `pulumi convert --from hcl`
Full changelog

3.235.0 (2026-05-05)

Features

  • [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

    #22771

  • [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).

    #22772

Bug Fixes

  • [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

Miscellaneous

  • [cli] Replace the Pulumipus mascot in the pulumi neo welcome banner with new Neo-branded ASCII art.
    #22817
v3.234.0 New feature
Notable features
  • `pulumi cloud api describe` to inspect parameters, request body, and response schema of any Pulumi Cloud API operation (text/markdown/JSON output)
  • `pulumi cloud api list` to browse all endpoints in the Pulumi Cloud OpenAPI spec (table/JSON output)
Full changelog

3.234.0 (2026-05-01)

Features

  • [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

    #22770

  • [cli/cloud] Add pulumi cloud api list for browsing every endpoint exposed by the Pulumi
    Cloud OpenAPI spec, with table and JSON output

    #22769

Bug Fixes

  • [engine] Revert changes to property path parsing that resulted in errors for currently valid paths
v3.233.0 New feature
Notable features
  • Expose auto‑generated Pulumi CLI interface as `workspace.cli_api` for Python
  • Add encrypted logging to ~/.pulumi/logs controlled by PULUMI_ENABLE_AUTOMATIC_LOGGING
Full changelog

3.233.0 (2026-04-30)

Features

  • [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.

    #22655

  • [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.

    #22697

  • [engine] Add List to the provider protocol and schema
    #22693

Bug Fixes

  • [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).

    #22696

  • [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>.

    #22696

  • [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.

    #22696

  • [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.

    #22696

  • [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.

    #22696

  • [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.

    #22696

  • [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

Miscellaneous

  • [auto/go] Drop the "With" prefix from generated option helpers so they match the naming of the existing optXxx packages
    #22682
v3.232.0 Breaking risk
Breaking changes
  • Switch logging library from glog to slog; any if logging.V(x) must change to if logging.V(x).Enabled()
Notable features
  • Experimental pulumi neo command with local tool execution
  • Neo terminal UI with agent messages and streaming
  • Plan-mode toggle for Neo exploration without file changes
Full changelog

3.232.0 (2026-04-22)

Features

  • [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.

    #22473

  • [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.

    #22589

  • [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.

    #22570

  • [cli] Switch logging library from glog to slog.

BREAKING: any if logging.V(x) { need to be changed to if logging.V(x).Enabled()

#22548

  • [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.

    #22634

  • [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.

    #22637

  • [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.

    #22654

Bug Fixes

  • [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.

    #22629

  • [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.

    #22635

  • [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

Miscellaneous

  • [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

v3.231.0 New feature
Notable features
  • Auto-detect Mercurial repository metadata for `pulumi up` and `pulumi preview` operations
  • Resource hooks with decorator variants for Node.js and Python SDKs
  • New Automation API commands: `new` and `--diff` flag for destroy operations
v3.230.0 New feature
Notable features
  • Detect AI agents and send in update metadata
  • Add Cancel handler to Python & Node.js providers
  • Add ESC environment resolution for policy packs
v3.229.0 New feature
Notable features
  • Add a new policy analyze command to run a policy pack against existing state
  • Support parameterized providers in PCL
  • Add --urns flag to display full resource URNs instead of short names
v3.228.0 New feature
Notable features
  • Add grpcs:// support and header authentication to OTLP exporter
  • Don't apply the secrets filter to true and false
  • Allow pulumi state delete to accept multiple resource URNs
v3.227.0 New feature
Notable features
  • Auto-install missing policy analyzer plugins
  • Add support for running policy packs with bun
  • Add Python lock file detection for toolchain selection
v3.226.0 New feature
Notable features
  • Support bun as a runtime
  • Add debugger support for the bun runtime
  • Add support for Bun as a plugin runtime
v3.225.0 New feature
Notable features
  • Enable journaling by default
  • The engine now handles the inheritance of the provider option in resource registrations
  • Automatically make invoke outputs secret when there is a secret input
v3.224.0 New feature
Notable features
  • Add zstd compression option for DIY backend state files
  • Automatically make invoke outputs secret when there is a secret input
v3.222.0 Bug fix
Notable features
  • Call request generation for programgen/go
Full changelog

3.222.0 (2026-02-18)

Features

  • [programgen/go] Generate Call requests
    #21836

Bug Fixes

  • [sdk/{nodejs,python}] Fix hang when loading policy packs that use v1.18.1 or older of the policy SDK
    #21866
v3.221.0 Breaking risk
Breaking changes
  • Rename pulumiVersionRange to requiredPulumiVersion in PulumiPlugin.yaml
v3.220.0 Breaking risk
Breaking changes
  • Deprecate github.com/pulumi/pulumi/pkg/v3/codegen/dotnet in favor of github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3/codegen
v3.219.0 New feature
Notable features
  • Add policy install command
  • Add support for protobuf 6
  • Add support for the OnError resource hook
v3.217.0 New feature
Notable features
  • Add the OnError resource hook to allow for custom retry policies
  • Add requirePulumiVersion to the Node.js SDK
  • Add require_pulumi_version to the Python SDK
v3.216.0 New feature
Notable features
  • Default to Pulumi Cloud when using an OIDC token for login
  • Allow dynamic providers to return inputs from read() for accurate diffs after refresh
  • Add support for serializing async generators
v3.215.0 New feature
Notable features
  • Allow plugins to specify a supported version range for the CLI

Beta — feedback welcome: [email protected]