Available versions

Version Date Downloads
0.17.24 2019/07/11 macOS | Windows | Linux
0.17.23 2019/07/11 macOS | Windows | Linux
0.17.22 2019/07/11 macOS | Windows | Linux
0.17.21 2019/06/26 macOS | Windows | Linux
0.17.20 2019/06/23 macOS | Windows | Linux
0.17.19 2019/06/23 macOS | Windows | Linux
0.17.18 2019/06/20 macOS | Windows | Linux
0.17.17 2019/06/12 macOS | Windows | Linux
0.17.16 2019/06/06 macOS | Windows | Linux
0.17.15 2019/06/05 macOS | Windows | Linux
0.17.14 2019/05/28 macOS | Windows | Linux
0.17.13 2019/05/21 macOS | Windows | Linux
0.17.12 2019/05/15 macOS | Windows | Linux
0.17.11 2019/05/13 macOS | Windows | Linux
0.17.10 2019/05/02 macOS | Windows | Linux
0.17.9 2019/04/30 macOS | Windows | Linux
0.17.8 2019/04/23 macOS | Windows | Linux
0.17.5 2019/04/08 macOS | Windows | Linux
0.17.4 2019/03/26 macOS | Windows | Linux
0.17.3 2019/03/26 macOS | Windows | Linux
0.17.2 2019/03/15 macOS | Windows | Linux
0.17.1 2019/03/06 macOS | Windows | Linux
0.17.0 2019/03/05 macOS | Windows | Linux
0.16.18 2019/03/01 macOS | Windows | Linux
0.16.17 2019/02/27 macOS | Windows | Linux
0.16.16 2019/02/24 macOS | Windows | Linux
0.16.15 2019/02/22 macOS | Windows | Linux
0.16.14 2019/01/31 macOS | Windows | Linux
0.16.13 2019/01/31 macOS | Windows | Linux
0.16.12 2019/01/25 macOS | Windows | Linux
0.16.11 2019/01/16 macOS | Windows | Linux
0.16.10 2019/01/11 macOS | Windows | Linux
0.16.9 2018/12/24 macOS | Windows | Linux
0.16.8 2018/12/14 macOS | Windows | Linux
0.16.7 2018/12/05 macOS | Windows | Linux
0.16.6 2018/11/28 macOS | Windows | Linux
0.16.5 2018/11/16 macOS | Windows | Linux
0.16.4 2018/11/14 macOS | Windows | Linux
0.16.3 2018/10/29 macOS | Windows | Linux
0.16.2 2018/10/29 macOS | Windows | Linux
0.16.1 2018/10/23 macOS | Windows | Linux
0.16.0 2018/10/15 macOS | Windows | Linux
0.15.4 2018/09/28 macOS | Windows | Linux
0.15.3 2018/09/18 macOS | Windows | Linux
0.15.2 2018/09/11 macOS | Windows | Linux
0.15.0 2018/08/13 macOS | Windows | Linux
0.14.3 2018/07/20 macOS | Windows | Linux
0.14.2 2018/07/03 macOS | Windows | Linux
0.14.1 2018/06/29 macOS | Windows | Linux
0.14.0 2018/06/15 macOS | Windows | Linux
0.12.2 2018/05/19 macOS | Windows | Linux


Released on November 28, 2018

This release includes better support for common Python 3 configurations, the ability to import the outputs of a stack as inputs into a different stack, and fixes a number of issues related to plugin installation.

The full changelog is linked below.


Released on November 14, 2018

This release includes significant improvements to Python support in Pulumi. Python 3.6 or greater is now required, and Python users now get support for outputs, parallelism, improved error reporting, and Kubernetes - plus many more new and updated features.

As part of this release, we’ve also started to use’s in each repository to track changes between releases. You can read the individual changelogs in GitHub:


Released on November 6, 2018

Pulumi CLI

There are no changes from the previous version of the Pulumi CLI, but it shares the same version as the @pulumi/pulumi package, which was updated

@pulumi/pulumi 0.16.3


Released on October 29, 2018

Pulumi CLI

  • Fix a regression that would cause resource operations to not be processed in parallel when using the latest CLI with a @pulumi/pulumi older than 0.16.1 pulumi/pulumi#2123

@pulumi/pulumi 0.16.1

  • Fail with a better error message (and in fewer cases) on Node 11. We hope to have complete support for Node 11 later this week, but for now recommend using Node 10 or earlier. pulumi/pulumi#2098


Released on October 23, 2018

In addition to the 0.16.1 CLI release, we’ve released new versions @pulumi/aws, @pulumi/azure, @pulumi/gcp, and @pulumi/openstack.

Pulumi CLI

@pulumi/pulumi 0.16.1

  • A new top-level CLI command “pulumi state” was added to assist in making targeted edits to the state of a stack. Two subcommands, “pulumi state delete” and “pulumi state unprotect”, can be used to delete or unprotect individual resources respectively within a Pulumi stack. pulumi/pulumi#2024
  • Default to allowing as many parallel operations as possible pulumi/pulumi#2065
  • Fixed an issue with the generated type for an Unwrap expression when using TypeScript pulumi/pulumi#2061
  • Improve error messages when resource plugins can’t be loaded or when a checkpoint is invalid pulumi/pulumi#2078
  • Fix link to the Pulumi Web Console in the CLI for a stack pulumi/pulumi#2075
  • Attach git commit metadata to Pulumi updates in some additional cases pulumi/pulumi#2062 and pulumi/pulumi#2069

@pulumi/aws 0.16.1

@pulumi/azure 0.16.3

@pulumi/gcp 0.16.1

@pulumi/openstack 0.16.1


Released on October 15, 2018

In addition to the 0.16.0 CLI release, we’ve released new versions of all of our packages.

Pulumi CLI

Major features of this release include:

Improvements to CLI output

Default colors that fit better for both light and dark terminals. Overall updates to rendering of previews/updates for consistency and simplicity of the display.

Parallelized resource deletion

Parallel resource creation and updates were added in 0.15. In 0.16, this has been extended to include deletions, which are now conservatively parallelized based on dependency information. pulumi/pulumi#1963

Support for any CI system in the Pulumi GitHub App

The Pulumi GitHub App previously supported just TravisCI. With this release the pulumi CLI now supports configurable CI providers via environment variables. Thanks @jen20!

Miscellaneous Improvements

In addition to the above features, we’ve made a handfull of day to day improvements in the CLI: - Support for zsh completions. Thanks to @Tirke!) pulumi/pulumi#1967 - JSON formatting support for pulumi stack output. pulumi/pulumi#2000 - Added a Dockerfile for the Pulumi CLI and development environment for use in hosted environments.

Pulumi Console

  • Added New Project button and wizard for easy new project creation.
  • New and improved dashboard highlighting recent activity and direct access to all recently used stacks across organizations.

@pulumi/pulumi 0.16.0

@pulumi/aws 0.16.0

  • Moved all @pulumi/aws-serverless features down into @pulumi/aws. Event handlers are now available as methods like bucket.onObjectCreated from instances of aws.s3.Bucket and all other Lambda event sources. In addition, the aws.apigateway.x.API type is available for simple construction of API Gateways directly in the @pulumi/aws package.
  • Added richer typing for many EC2 and Autoscaling resources. Thanks to @jen20! pulumi/pulumi-aws#323 pulumi/pulumi-aws#324
  • Adopted v1.38.0 of the AWS Terraform Provider. pulumi/pulumi-aws#341

@pulumi/aws-infra 0.16.0

  • Updated to latest @pulumi/pulumi and @pulumi/aws dependencies.

@pulumi/aws-serverless 0.16.0

  • This library is now deprecated. All features of this library are now available directly in @pulumi/aws (see above). In a future update the same change will be made for @pulumi/azure-serverless moving similar functionality into @pulumi/azure.

@pulumi/azure 0.16.0

  • Adopted v1.15.0 of the AzureRM Terraform Provider. pulumi/pulumi-azure#125
  • Many improvements to autoname generation to match Azure resource name requirements.
  • [Breaking Change] Fix name of azure.role.Assignment from previous azure.role.assignment. pulumi/pulumi-azure#127

@pulumi/cloud, @pulumi/cloud-aws, @pulumi/cloud-azure 0.16.0

  • Implementations of many @pulumi/cloud-aws APIs moved over to build on top of higher-level APIs in @pulumi/aws. This may cause some resources, such as aws.lambda.Function and aws.apigateway.RestAPI to be recreated on updates from previous versions.

@pulumi/gcp 0.16.0

@pulumi/kubernetes 0.17.2

@pulumi/vsphere 0.16.0

Added a new provider for VMware vSphere, enabling deployment and management of resources in vCenter Server and ESXi. Thanks @Smithx10!

@pulumi/eks 0.16.0

Added a new package for deploying a complete AWS Elastic Kubernetes Service (EKS) cluster.

@pulumi/openstack 0.16.0

  • Updated to latest @pulumi/pulumi dependencies.

@pulumi/docker 0.16.0

  • Updated to latest @pulumi/pulumi dependencies.


Released on September 28, 2018

This minor release contains a small bug fix for a crash in the CLI.

Pulumi CLI

  • Fix an assert in display code when a resource property transitions from an asset to an archive or the other way around

@pulumi/pulumi v0.15.4

There are no changes from the previous release, but the CLI and @pulumi/pulumi package share a version.


Released on September 18, 2018

This minor release contains two small bug fixes.

Pulumi CLI

  • Improved performance of pulumi stack ls
  • Fix build authoring so the dynamic provider works for the CLI built by Homebrew (thanks to @Tirke!)

@pulumi/pulumi v0.15.3

There are no changes from the previous release, but the CLI and @pulumi/pulumi package share a version.


Released on September 11, 2018

In addition to the 0.15.2 CLI release, we’ve released new versions of all of our packages.

Pulumi CLI

Major features of this release include:

Ephemeral status messages

Providers are now able to register “ephmeral” update messages which are shown in the “Info” column in the CLI during an update, but which are not printed at the end of the update. The new version of the @pulumi/kubernetes package uses this when printing messages about resource initialization.

Local backend

The local backend (which stores your deployment’s state file locally, instead of on has been improved. You can now use pulumi login --local or pulumi login file://<path-to-storage-root> to select the local backend and control where state files are stored. In addition, older versions of the CLI would behave slightly differently when using the local backend vs, for example, some operations would not show previews before running. This has been fixed. When using the local backend, updates print the on disk location of the checkpoint file that was written. The local backend is covered in more detail in (here)[/docs/reference/state/].

pulumi refresh

We’ve made a bunch of improvements in pulumi refresh. Some of these improve the UI during a refresh (for example, clarifying text about the underyling operations) as well fixing bugs with refreshing certain types of objects (for example CloudFront CDNs).

pulumi up and pulumi new

You can now pass a URL to a Git repository to pulumi up <url> to deploy a project without having to manage its source code locally. This works like pulumi new <url>, but configures and deploys the project from a temporary directory that will be cleaned up automatically after the update.

pulumi new now outputs an error when the current working directory (or directory specified explicitly via the --dir flag) is not empty. Additionally, pulumi new now runs a preview of an initial update at the end of its operation and asks if you would like to perform the update.

Both pulumi up and pulumi new now support -c flags for specifying config values as arguments (e.g. pulumi up <url> -c aws:region=us-east-1).

Miscellaneous Improvements

In addition to the above features, we’ve made a handfull of day to day improvements in the CLI:

@pulumi/pulumi 0.15.2

@pulumi/aws 0.15.1

@pulumi/aws-infra 0.15.1

  • Update dependencies versions for @pulumi/pulumi and @pulumi/aws.

@pulumi/aws-serverless 0.15.1

  • Update dependencies versions for @pulumi/pulumi and @pulumi/aws.

@pulumi/azure 0.15.2

@pulumi/azure-serverless 0.15.2

@pulumi/cloud, @pulumi/cloud-aws, @pulumi/cloud-azure 0.15.1

As part of this release we are including a beta implementation of @pulumi/cloud on Azure. You can now set the cloud:provider configuration value to azure to deploy applications writing against @pulumi/cloud on Azure.


@pulumi/gcp 0.15.1

  • Support provider configuration and property values provided by environment variaibles. pulumi/pulumi-gcp#43

@pulumi/kubernetes 0.17.0

The Cloud Native SDK for Kubernetes is available and recommended for production use

  • Incremental updates for Kubernetes resources will no longer be printed at the end of a pulumi up. pulumi/pulumi-kubernetes#174
  • More detailed explanations (and sometimes guidance) are now provided when an operation fails - for example, if the target Kubernetes cluster does not support services of type LoadBalancer.
  • Fixes and improvements to several APIs, including allowing ConfigFile to take a file, and making CollectionComponentResource.getResource well-typed. pulumi/pulumi-kubernetes#190
  • Several bug fixes in await logic
  • Windows support for Helm chart deployments. pulumi/pulumi-kubernetes#170

@pulumi/openstack 0.15.1


Released on August 13, 2018

In addition to the 0.15.0 CLI release, we’ve released new versions of all of our packages.

Pulumi CLI

This release brings many large improvements to the Pulumi CLI. Major features include:


Pulumi now performs resource creates and updates in parallel, driven by dependencies in the resource graph. (Parallel deletes are coming in a future release.) If your program has implicit dependencies that Pulumi does not already see as dependencies, it’s possible parallel will cause ordering issues. If this happens, you may set the dependsOn on property in the resourceOptions parameter to any resource. By default, Pulumi allows 10 parallel operations, but the -p flag can be used to override this. -p=1 disables parallelism altogether. Parallelism is supported for Node.js and Go programs, and Python support will come in a future release.

First Class Providers

Pulumi now allows creation and configuration of resource providers programmatically. In addition to the default provider instance for each resource, you can also create an explicit version of the provider and configure it explicitly. This can be used to create some resources in a different region from your main deployment, or deploy resources to a programmatically configured Kubernetes cluster, for example. We have a multi-region deployment example for illustrative purposes.

Status Rich Updates

The Pulumi CLI is now able to report more detailed information from individual resources during an update. This is used, for instance, in the Kubernetes provider, to provide incremental progress output for steps that may take a while to comeplete (such as deployment orchestration). We anticipate leveraging this feature in more places over time.

Improved Templating Support

You can now pass a URL to a Git repository to pulumi new to install a custom template, enabling you to share common templates across your team. If you pass a simple name, or omit arguments altogether, pulumi new behaves as before, using the templates hosted by Pulumi.

Native TypeScript support

By default, Pulumi now natively supports TypeScript, so you do not need to run tsc explicitly before deploying. (We often forget to do this too!) Simply run pulumi up, and the program will be recompiled on the fly before running it.

To use this new support, upgrade your @pulumi/pulumi version to 0.15.0, in addition to the CLI. Pulumi prefers JavaScript source to TypeScript source, so if you had been using TypeScript previously, we recommend you make the following changes:

  1. Remove the main and typings directives from package.json, as well as the build script.
  2. Remove the bin folder that contained your previously compiled code.
  3. You may remove the dependency on typescript from your package.json as well, since @pulumi/pulumi has one.

While a tsconfig.json file is no longer required, as Pulumi uses intelligent defaults, other tools like VS Code behave better when it is present, so you’ll probably want to keep it.

Miscellaneous improvements

  • The CLI no longer emits warnings if it can’t detect metadata about your git enlistement (for example, what GitHub project it coresponds to).
  • The CLI now only warns about adding a plaintext configuration in cases where it appears likely you may be storing a secret.

Pulumi Service

The Pulumi Service made some key improvements around the handling of update logs. When viewing stack update logs that include the output of other programs, like docker, the resulting logs should now render correctly as we as load much faster.

The biggest new feature however, is the introduction of the new Pulumi GitHub application.

Pulumi GitHub App (preview)

The Pulumi GitHub application bridges the gap between GitHub (source code, pull requests) and Pulumi (cloud resources, stack updates). By installing the Pulumi GitHub application into your GitHub organization, and then running Pulumi as part of your CI build process, you can now see the results of stack updates and previews as part of pull requests. This allows you to see the potential impact a change would have on your cloud infrastructure before merging the code.

The Pulumi GitHub application is still in preview as we work to support more CI systems and provide richer output. For information on how to install the GitHub application and configure it with your CI system, please visit our documentation page.

@pulumi/pulumi 0.15.0

Closure capturing improvements

We’ve improved our closure capturing logic, which should allow you to write more idiomatic code in lambda functions that are uploaded to the cloud. Previously, if you wanted to use a module, we required you to write either require('module') or await import('module') inside your lambda function. In addition, if you wanted to use a helper you defined in another file, you had to require that module in your function as well. With these changes, the following code now works:

import * as axios from "axios";
import * as cloud from "@pulumi/cloud-aws";

const api = new cloud.API("api");
api.get("/", async (req, res) => {
    const statusText = (await axios.default.get("")).statusText;
    res.write(`GET == ${statusText}`).end();

Default value for configuration package

The pulumi.Config object can now be created without an argument. When no argument is supplied, the value of the current project is used. This means that application level code can simply do new pulumi.Confg() without passing any argument. For library authors, you should continue to pass the name of your package as an argument.

@pulumi/kubernetes 0.15.0

Kubernetes support has been brought to production-ready level of quality. Many features in this release are in support of this outcome. This includes:

  • Full support for the entire Kubernetes API
  • Improved status reporting for deployment rollouts
  • Verified support for AWS EKS, Azure AKS, and GCP GKE, in addition to Minikube and manually hosted clusters
  • Support for provisioning and deploying to clusters in a single program
  • Deploying Helm Charts using the helm.v2.Chart type

To use Pulumi with Kubernetes, please visit our Getting Started page on Kubernetes.

@pulumi/openstack 0.15.0

We are releasing a new provider that allows Pulumi to work with OpenStack. A big thanks to @frassle for the implementation of the OpenStack provider!

@pulumi/docker 0.15.0

Added a new package to support building and pushing Docker images to a docker registry as part of a Pulumi program. This has been part of the cloud.Service support in @pulumi/cloud, but is now available to be used with other containers services from cloud platforms like Azure, Kubernetes, and Google.

@pulumi/aws 0.15.0

Adopted terraform-provider-aws version 1.30.0, with new support for Amazon Neptune, AWS Storage Gateway, Amazon Macie, and much more.

@pulumi/azure 0.15.0

Adopted terraform-provider-azurerm version 1.12.0, with new support for Azure Service Fabric, Azure Notification Hubs, Azure Data Lake, and much more.

@pulumi/azure-serverless 0.15.0

Added a new package with helpers to make it easy to build serverless applications on Azure. In this initial release, @pulumi/azure-serverless includes support for serverless functions and blob storage.

import * as azure from "@pulumi/azure";
import * as serverless from "@pulumi/azure-serverless";

const storageAccount = new"images-container", { /* ... */ });"newImage", storageAccount, (context, blob) => {
}, { containerName: "folder", filterSuffix: ".png" });

export let storageAccountName =;

@pulumi/cloud 0.15.0

Added a simpler form for creating containerized cloud.Services for the (common) case of deploying a single container. What was previously this:

let nginx = new cloud.Service("nginx", {
    containers: {
        nginx: {
            image: "nginx",

Can now be this:

let nginx = new cloud.Service("nginx", {
    image: "nginx",

@pulumi/gcp 0.15.0

  • Added support for new gcp.serverless.Function to create serverless functions defined inline in the Pulumi program in GCP using Google Cloud Functions. A big thanks to @mikhailshilkov for contributing this feature!
import * as gcp from "@pulumi/gcp";
let f = new gcp.serverless.Function("f", {}, (req, res) => {
    res.send(`Hello ${ || 'World'}!`);
export let url = f.function.httpsTriggerUrl;


Released on July 20, 2018

In addition to the 0.14.3 CLI release, the following packages have been updated:

Pulumi CLI


  • Support empty text assets (pulumi/pulumi#1599).

  • When printing message in non-interactive mode, do not keep printing out the worst diagnostic (pulumi/pulumi#1640). When run in non interactive environments (e.g. docker) Pulumi would print duplicate messages to the screen related to a resource when the running Pulumi program was writing to standard out (e.g. if it was invoking a docker build). This no longer happens. The full output from the program continues to be printed at the end of execution.

  • Work around a potentially bad assert in the engine (pulumi/pulumi#1640). In some cases, when Pulumi failed to delete a resource as part of an update, future updates would crash with an assert message. This is no longer the case and Pulumi will try to delete the resource it had marked as should be deleted.


  • Print out a ‘still working’ message every 20 seconds when in non-interactive mode (pulumi/pulumi#1616). When Pulumi is waiting for a long running resource operation to create (e.g. waiting for an ECS service to become stable after creation), print some output to the console even when running non-interactively. This helps for cases like TravsCI where if output is not written for a while the job is assumed to have hung and is aborted.

  • Support the NO_COLOR env variable to suppress any colored output (pulumi/pulumi#1594). Pulumi now respects the NO_COLOR environment variable. When set to a truthy value, colors are suppressed from the CLI. In addition, the --color flag can now be passed to all pulumi commands.

@pulumi/pulumi v0.14.3

There are no user facing changes from the previous release. However, we’ve laid some of the initial groundwork to support running resource operations in parallel and other small improvements.

@pulumi/aws v0.14.5


  • Only apply AutoName to inputs (pulumi/pulumi-aws#265). Terraform properties named name but are not inputs do not have auto naming applied to them.

  • Switch package inclusion from whitelist to blacklist (pulumi/pulumi-aws#268). When serializing a lambda, default to including all dependencies listed in the dependencies section of package.json (and their transitive dependencies) except for all @pulumi/* packages. Previously we tried to infer the set of packages by doing a more detailed analysis of the lambda implementation, but this failed in somewhat common cases.

  • Fix null ref when walking packages (pulumi/pulumi-aws#280). Fix some issues that could arise when serializing lambdas when a dependent package had no dependencies itself.


  • Add autoscaling NotificationType union and overlay (pulumi/pulumi-aws#251). Provide a more strongly typed experience for setting autoscaling notification types. Special thanks to @jen20 for this improvement.

  • Add iam.assumeRolePolicyForPrincipal function (pulumi/pulumi-aws#273). Add some helpers for authoring policy documents to assume a role. Special thanks to @jen20 for this improvement.

  • Add environment to aws.serverless.Function (pulumi/pulumi-aws#254. Expose the underlying Environment property to allow setting environment variables visible at runtime of a function when using aws.serverless.Function. Special thanks to @jen20 for this improvement.

  • Override role on RolePolicy to accept a Role (pulumi/pulumi-aws#278). When constructing a RolePolicy object, allow the Role object to set as an argument instead of just a string which is the ARN of the role to use. Special thanks to @jen20 for this improvement.

  • Add the .js extension to our generate closure code file. (pulumi/pulumi-aws#279). Ensure the generated code uploaded to AWS has a .js extension when building a lambda function. This allows the code for the lambda to be viewed in the AWS console.

@pulumi/aws-serverless v0.14.2


  • Allow route handlers to be invoked by API Gateway console (pulumi/pulumi-aws-serverless#30). Support API Gateway’s “Test” functionality from the AWS Console for lambdas created by Pulumi.

@pulumi/azure v0.14.2


  • Only apply AutoName to inputs (pulumi/pulumi-azure#78). Terraform properties named name but are not inputs do not have auto naming applied to them.

@pulumi/cloud v0.14.1

There were no changes to the API surface area for @pulumi/cloud, but it shares a version number with the AWS implementation, which did have improvements.

@pulumi/cloud-aws v0.14.1


  • Associate docker output with individual resources so it is clearer what is going on ((pulumi/pulumi-cloud#526). When doing a pulumi up or pulumi preview output for the docker build for a cloud.Service is now associated with the actual cloud.Service that is being updated, instead of just being in the general output stream in the CLI.

@pulumi/gcp v0.14.3


  • Only apply AutoName to inputs (pulumi/pulumi-gcp#29). Terraform properties named name but are not inputs do not have auto naming applied to them.


  • Add a serverless example (pulumi/pulumi-gcp#12). The GCP provider now has better support for creating google cloud functions from code. We have an example of how to use this support. We plan to add higher level support here (similar to what we have with AWS) in a future release.


Released on July 3, 2018

In addition to the 0.14.2 CLI release, the following packages have been updated:

Pulumi CLI


  • Support -s in stack {export, graph, import, output} (pulumi/pulumi#1572). pulumi stack export, pulumi stack graph, pulumi stack import and pulumi stack output now support a -s or --stack flag, which allows them to operate on a different stack that the currently selected one.

@pulumi/pulumi v0.14.2

There are no changes from the previous release, but the CLI and @pulumi/pulumi package share a version.

@pulumi/aws v0.14.2


@pulumi/aws-serverless v0.14.1


  • Add support for triggering lambdas in response to SQS events. (pulumi/pulumi-aws-serverless#17). We now support triggering a lambda off of SQS events, using serverless.queue.subscribe. We have a small example that shows how to use this new functionally.

@pulumi/azure v0.14.1


@pulumi/gcp v0.14.1



We’ve added assets support to the Python runtime and our Python packages. It is now possible to create resources that need an asset like a AWS Lambda or AWS Bucket Object in Python.


Released on June 29, 2018

In addition to the 0.14.1 CLI release, the following packages have been updated:

Pulumi CLI


  • Add pulumi whoami (pulumi/pulumi#1572). pulumi whoami will report the account name of the current logged in user. In addition, we now display the name of the current user after pulumi login.


  • Don’t require PULUMI_DEBUG_COMMANDS to be set to use local backend (pulumi/pulumi#1575).

  • Improve misleading pulumi new summary message (pulumi/pulumi#1571).

  • Fix printing out outputs in a pulumi program (pulumi/pulumi#1531). Pulumi now shows the values of output properties after a pulumi up instead of requiring you to run pulumi stack output.

@pulumi/pulumi v0.14.1


  • Do a better job preventing serialization of unnecessary objects in closure serialization (pulumi/pulumi#1543). We’ve improved our analysis when serializing functions. This yeilds smaller code when a function is serialized and prevents errors around unused native code being captured in some cases.


Released on June 15, 2018

With the v0.14.0 CLI release, the following packages are now available: - @pulumi/aws v0.14.0 - @pulumi/aws-infra v0.14.0 - @pulumi/aws-serverless v0.14.0 - @pulumi/azure v0.14.0 - @pulumi/cloud v0.14.0 - @pulumi/gcp v0.14.0 - @pulumi/kubernetes v0.14.0 - @pulumi/pulumi v0.14.0

Pulumi CLI


  • Publish to (pulumi/pulumi#1497). Pulumi packages are now public on!

  • Add optional --dir flag to pulumi new (pulumi/pulumi#1459). The pulumi new command now has an optional flag --dir, for the directory to place the generated project. If it doesn’t exist, it will be created.

  • Support Pulumi programs written in Go (pulumi/pulumi#1456). Initial version for Pulumi programs written in Go. While it is not complete, basic resource registration works.

  • Allow overriding config location (pulumi/pulumi#1379). Support a new config member in Pulumi.yaml, which specifies a relative path to a folder where per-stack configuration is stored. The path is relative to the location of Pulumi.yaml itself.

  • Delete existing resources before replacing, for resources that must be singletons (pulumi/pulumi#1365). For resources where the cloud vendor does not allow multiple resources to exist, such as a mount target in EFS, Pulumi now deletes the existing resource before creating a replacement resource.


  • (Breaking) Smaller Lambda ZIP for aws.serverless.Function (pulumi/pulumi-aws#222). By default, compute only the required package dependencies, and then include the transitive dependencies of these into the Lambda ZIP. There is now a new option for explicitly adding additional package dependencies.

  • Compute required packages during closure serialization (pulumi/pulumi#1457). Closure serialization now keeps track of the require’d packages it sees in the function bodies that are serialized during a call to serializeFunction. So, only required packages are uploaded to Lambda.

  • Support browser based logins to the CLI (pulumi/pulumi#1439). The Pulumi CLI now has an option to login via a browser. When you are prompted for an access token, you can just hit enter. The CLI then opens a browser to so that you can authenticate.


  • Support better previews in Python by mocking out Unknown values (pulumi/pulumi#1482). During the preview phase of a deployment, computed values were Unknown in Python, causing the preview to be empty. This issue is now resolved.

  • Issue a better error message if you capture a V8 intrinsic (pulumi/pulumi#1423). It’s possible to accidentally take a dependency on a Pulumi deployment-time library, which causes problems when creating a runtime function for AWS Lambda. There is now a better error message when this situation occurs.

@pulumi/aws-serverless v0.14.0

This package is new in this release! Use it to directly manage API Gateway and Lambda resources.

@pulumi/cloud v0.14.0

  • Add Docker caching. (pulumi/pulumi-cloud#499). Docker build caching is now supported with a new parameter ContainerBuild.cacheFrom. Setting this value causes the Docker build to first check the service’s associated ECR repository (if it exists).

  • Rename HttpEndpoint to API (pulumi/pulumi-cloud#497). Use a simpler, better-suited name. A type/value with the name HttpEndpoint is still exported as aliases for API, but are marked as @deprecated. These will be removed in a later release. While this is not a breaking change, any existing cloud.HttEndpoint will be replaced with a new, identical resource with a different URL.

  • Use the latest ECS optimized AMI instead as a default (pulumi/pulumi-aws-infra#12). Clusters managed by awsinfra.Cluster now use the latest available ECS image by default instead of a fixed older version. If a specific fixed version is desired, it can be set manually using ecsOptimizedAMIName.

@pulumi/gcp v0.14.0

This package is new in this release! Use it to deploy and manage resources for Google Cloud Platform. See the reference documentation for @pulumi/gcp.


Released on May 19, 2018

With the v0.12.2 CLI release, we have also released the following packages: - @pulumi/aws v0.13.0 - @pulumi/aws-infra v0.13.0 - @pulumi/azure v0.12.2 - @pulumi/cloud v0.13.0 - @pulumi/kubernetes v0.13.0 - @pulumi/pulumi v0.12.2

Pulumi CLI


  • Improve the promise leak experience (pulumi/pulumi#1374). Fixes an issue where a promise leak could be erroneously reported. Also, show simple error message by default, unless the environment variable PULUMI_DEBUG_PROMISE_LEAKS is set.

@pulumi/aws v0.13.0


  • Allow passing an existing Role to serverless.Function (pulumi/pulumi-aws#210). FunctionOptions now includes a Role property, for scenarios where you wish to use an existing Role or share one across multiple Lambda functions.


  • (Breaking) Support configuring the paths to include in serverless.Function (pulumi/pulumi-aws#210). Previously, all files in the directory would be included in the Lambda deployment package. With this change, only the generated __index.js and ./node_modules are included by default. To add other files, use the new includePaths property in FunctionOptions.

  • (Breaking) Rename aws.s3.Bucket#websites to the singular aws.s3.Bucket#website. (pulumi/pulumi-aws#207). Since this property contains only one element, it has been renamed to website (singular) and is no longer an array property.


Released on May 9, 2018


  • A new all-in-one installer script is now available at

  • Many enhancements to pulumi new (pulumi/pulumi#1307). The command now interactively walks through creating everything needed to deploy a new stack, including selecting a template, providing a name, creating a stack, setting default configuration, and installing dependencies.

  • Several improvements to the pulumi up CLI experience (pulumi/pulumi#1260): a tree view display, more details from logs during deployments, and rendering of stack outputs at the end of updates.

  • A new @pulumi/aws-infra package is available which contains useful AWS infrastructure components for Network and Cluster (pulumi/pulumi-cloud#472).


  • (Breaking) Removed the LogCollector and onError handler from @pulumi-cloud (pulumi/pulumi-cloud#474). These were previously created in all stacks using @pulumi/cloud, but in practice were not being used.

  • (Breaking) Remove the --preview flag in pulumi up, in favor of reintroducing pulumi preview (pulumi/pulumi#1290). Also, to accept an update without the interactive prompt, use the --yes flag, rather than --force.


  • Significant performance improvements for pulumi up (pulumi/pulumi#1319).

  • JavaScript async functions in Node 7.6+ now work with Pulumi function serialization (pulumi/pulumi#1311.

  • Support installation on Windows in folders which contain spaces in their name (pulumi/pulumi#1300).


Released on April 26, 2018


  • Add a pulumi cancel command (pulumi/pulumi#1230). This command cancels any in-progress operation for the current stack.


  • (Breaking) Eliminate pulumi init requirement (pulumi/pulumi#1226). The pulumi init command is no longer required and should not be used for new stacks. For stacks created prior to the v0.12.0 SDK, pulumi init should still be run in the project directory if you are connecting to an existing stack. For new projects, stacks will be created under the currently logged in account. After upgrading the CLI, it is necessary to run pulumi stack select, as the location of bookkeeping files has been changed. For more information, see Creating Stacks.

  • (Breaking) Remove the explicit ‘pulumi preview’ command (pulumi/pulumi#1170). The pulumi preview output has now been merged in to the pulumi up command. Before an update is run, the preview is shown and you can choose whether to proceed or see more update details. To see just the preview operation, run pulumi up --preview.

  • (Breaking) Add support for Node 8.10 for AWS Lambda (pulumi/pulumi-aws#195). Lambdas created with aws.serverless.Function and via JavaScript callbacks in @pulumi/cloud now default to Node.js 8.10.

  • Switch to a more streamlined view for property diffs in pulumi up (pulumi/pulumi#1212).

  • Allow multiple versions of the @pulumi/pulumi package to be loaded (pulumi/pulumi#1209). This allows packages and dependencies to be versioned independently.


  • When running a pulumi up or destroy operation, a single ctrl-c will cancel the current operation, waiting for it to complete. A second ctrl-c will terminate the operation immediately. (pulumi/pulumi#1231).

  • When getting update logs, get all results (pulumi/pulumi#1220). Fixes a bug where logs could sometimes be truncated in the console.


Released on April 13, 2018


  • Add a static get method to all AWS resource classes. (pulumi/pulumi-aws#189). Each Pulumi resource class now has a static get method that construct an instance by reading existing resource state from your cloud provider. For example, to read an existing EC2 VM, use aws.ec2.Instance.get("vm", "i-01d7e1cddb70a2f0d").


  • Switch to a resource-progress oriented view for pulumi preview, update, and destroy operations (pulumi/pulumi#1116). The operations pulumi preview, update and destroy have far simpler output by default, and show a progress view of ongoing operations. In addition, there is a structured component view, showing a parent operation as complete only when all child resources have been created.

  • Remove strict dependency on Node v6.10.x (pulumi/pulumi#1139). It is now no longer necessary to use a specific version of Node to run Pulumi programs. Node versions after 6.10.x are supported, as long as they are under Active LTS or are the Current stable release.

  • Use subnets instead of subnetMappings on LoadBalancer (pulumi/pulumi-cloud#451). A change to how load balancers are configured for cloud.Service will mean that applications may see load balancers for non-HTTP services get replaced during updates. This should not cause disruption to applications, but may change the DNS names of the load balancers where services are exposed.


  • Fix non-Fargate support for cloud.Service (pulumi/pulumi-cloud#458). The issue in the 0.11.2 version of the SDK has now been fixed, and cloud.Service can either be used in the Fargate execution mode, or to target a cluster of EC2 instances (including the cloud-aws:ecsAutoCluster configuration setting).


Released on April 6, 2018


  • Add support for AWS Fargate (pulumi/pulumi-cloud#411). Adds a cloud-aws:useFargate flag which causes container compute to run in Fargate. Also, when neither cloud-aws:externalVpcId nor cloud-aws:usePrivateNetwork are defined, cloud.Service uses the default VPC as the target network.


  • (Breaking) Require pulumi login before commands that need a backend (pulumi/pulumi#1114). The pulumi CLI now requires you to log in to for most operations.


  • Improve the error message arising from missing required configurations for resource providers (pulumi/pulumi#1097). The error message now prints all missing configuration keys, along with their descriptions.


Released on March 30, 2018



  • When waiting for an ECS service to reach steady state, retry when ECS says the service can’t be found (pulumi/pulumi-cloud#443). This situation can occur when the ECS API performs a stale read of its datastore, so the workaround is to retry the operation.


Released on March 20, 2018


  • Add a pulumi new command to scaffold a project (pulumi/pulumi#1008). Usage is pulumi new [templateName]. If template name is not specified, the CLI will prompt with a list of templates. Currently, the templates javascript, python and typescript are available. Templates are defined in the GitHub repo pulumi/templates and contributions are welcome!

  • Python is now a supported language in Pulumi (pulumi/pulumi#800). For more information, see Python documentation.

  • Add ECS container definition JSON schemas (pulumi/pulumi-aws#156). Additionally, the Lambda runtime enum has been updated. The function getLinuxAMI has been removed from ec2 and moved directly into example code.

  • Add link to documentation source in doc comments (pulumi/pulumi-terraform#126). Adds a “Sourced from <url>” annotation to all generated doc comments, with links to Terraform resource provider source documentation.


  • (Breaking) Change the way that configuration is stored (pulumi/pulumi#986). To simplify the configuration model, there is no longer a separate notion of project and workspace settings, but only stack settings. The switches --all and --save are no longer supported; any common settings across stacks must be set on each stack directly. Settings for a stack are stored in a file that is a sibling to Pulumi.yaml, named Pulumi.<stack-name>.yaml. On first run pulumi, will migrate projects from the previous configuration format to the new one. The recommended practice is that developer stacks that are not shared between team members should be added to .gitignore, while stack setting files for shared stacks should be checked in to source control. For more information, see the section Defining and setting stack settings.

  • (Breaking) Eliminate the superfluous :config part of configuration keys (pulumi/pulumi#995). pulumi no longer requires configuration keys to have the string :config in them. Using the :config string in keys for the object @pulumi/pulumi.Config is deprecated and preview and update show warnings when it is used. Additionally, it is preferred to set keys in the form aws:region rather than aws:config:region. For compatibility, the old behavior is also supported, but will be removed in a future release. For more information, see the article Configuration.

  • (Breaking) Require provider config and improve error message when provider not installed (pulumi/pulumi-cloud#377). When using the JavaScript package @pulumi/cloud, you must first set the configuration value for cloud:provider. For instance, to target AWS, use pulumi config set cloud:provider aws. Additionally, if the package @pulumi/cloud-aws is not included in the dependencies section of package.json, you’ll see the following error message. For more information, see Pulumi npm packages.

    Attempted to load the 'aws' implementation of '@pulumi/cloud',
    but no '@pulumi/cloud-aws' module is installed. Install it now
    or select another provider implementation with the "cloud:config:provider" setting.
  • (Breaking) Use plural names for array-typed values (pulumi/pulumi-aws#146) and (pulumi/pulumi-terraform#123). API properties that are array-typed now have a plural name. For example, the property is aws.cloudfront.Distribution.cacheBehaviors (plural), rather than cacheBehavior (singular).

  • (Breaking) Project array with one element as nested struct instead of array (pulumi/pulumi-terraform#122). The API is now improved for properties that were previously array typed but accepted exactly one value. These properties are now nested structs instead of an array. For example, the properties clusterConfig, ebsOptions and snapshotOptions in aws.elasticsearch.Domain are no longer array-typed.

  • (Breaking) Modules are treated as normal values when serialized (pulumi/pulumi#1030). If you need to use a module at runtime, consider either using require or await import at runtime, or pre-compute what you need and capture the resulting data or objects.

  • (Breaking) Serialize resource registration after inputs resolve (pulumi/pulumi#964). Previously, resources were most often created/updated in the order they were seen during the Pulumi program execution. In preparation for supporting parallel resource operations, these operations now run in an order that respects the dependencies between resources (via Output), but may not match the order of program execution. This is mostly transparent to Pulumi program authors, but does mean that any missing dependencies will cause your program to fail in unexpected ways. For more information on how such failures manifest and what to do about them, see the article Programming Model.

  • Hide secrets from CLI output (pulumi/pulumi#1002). To prevent secret values from being accidentally disclosed in command output or logs, pulumi replaces secret values with the string [secret]. Inspired by the behavior of Travis CI.

  • Change default of where stacks are created (pulumi/pulumi#971). If currently logged in to the Pulumi CLI, stack init creates a managed stack; otherwise, it creates a local stack. To force a local or remote stack, use the flags --local or --remote.

  • Use the same load balancer port as exposed on the underlying cloud.Service (pulumi/pulumi-cloud#395). By default, the port exposed by a cloud.Service load balancer is the same as the container port. There is also a new target port property which allows exposing a different port than the internal container port. Note that this may cause surprising resource updates or replacements upon your next update after adopting v0.11.0 of the SDK. Such updates should be handled transparently by Pulumi, with no downtime.


  • In cloud.Service, wait for ECS services to reach a steady state (pulumi/pulumi-cloud#396). Previously, when a cloud.Service resource was updated (for example, to point to a new container image), the update operation did not wait for the underlying service to reach a new steady state, but only waited for the service update to start. Now, pulumi up waits for the service to reach a new steady state, ensuring that the service is in a healthy state before continuing to make further changes to your infrastructure.

  • Improve error messages output by the CLI (pulumi/pulumi#1011). RPC endpoint errors have been improved. Errors such as “catastrophic error” and “fatal error” are no longer duplicated in the output.

  • Produce better error messages when the main module is not found (pulumi/pulumi#976). If you’re running TypeScript but have not run tsc or your main JavaScript file does not exist, the CLI will print a helpful info: message that points to the possible source of the error.


Released on February 27, 2018

Note: The v0.10.0 SDK has a strict dependency on Node.js 6.10.2.


Pulumi CLI and SDK

  • Support “force” option when deleting a managed stack.

  • In @pulumi/cloud, support for creating a Cluster without EFS using the cloud-aws:config:ecsAutoClusterUseEFS config setting (pulumi-cloud#175)

  • Add a pulumi history command (pulumi#636). For a managed stack, use the pulumi history to view deployments of that stack’s resources.

Pulumi Console

  • Show deployment history for a stack in Pulumi Console.

  • Display AWS console links in the Pulumi Console. Deep links to the AWS console are now displayed for the following types of resources: API Gateway, CloudWatch (event targets, log groups, and log subscription filter), DynamoDB tables, IAM roles and role policy attachments, Lambda functions, S3 buckets, and SNS topics and subscriptions.


Pulumi CLI and SDK

  • (Breaking) Use npm install instead of npm link to reference the Pulumi SDK @pulumi/aws, @pulumi/cloud, @pulumi/cloud-aws. For more information, see Pulumi npm packages.

  • (Breaking) Explicitly track resource dependencies via Input and Output types. This enables future improvements to the Pulumi development experience, such as parallel resource creation and enhanced dependency visualization. When a resource is created, all of its output properties are instances of a new type pulumi.Output<T>. Output<T> contains both the value of the resource property and metadata that tracks resource dependencies. Inputs to a resource now accept Output<T> in addition to T and Promise<T>.

Pulumi Console

  • Show parent/child relationships for resource components in the UI.

  • Pulumi Console is stack-oriented, not repo-oriented. The Pulumi Console now displays a view of all stacks in a table, rather than displaying a hierarchy of organization, repo, project, and stack.

Fixed service

  • Support for zero-downtime updates of the service. Within a tenant, deployments are further isolated from each other so that concurrent deployments do not share compute resources. Requests to get stack logs, update logs, and stack history are now always responsive, regardless of whether are are active deployments.

Pulumi CLI and SDK

  • Make change detection more accurate for complex values (pulumi-terraform#99).
  • In @pulumi/cloud, ensure Deployment is recreated on all changes to API body. (pulumi-cloud#360)
  • In @pulumi/cloud, does not throw an error when running the task fails (pulumi-cloud#368)
  • In @pulumi/cloud, when creating Cluster, sporadic failure to create requested number of EC2 instances (pulumi-cloud#195)
  • When using managed stacks, get an HTTP 500 error if you try to remove a non-empty stack (pulumi-ppc#111)
  • Managed stacks sometimes return a 500 error when requesting logs (pulumi-service#662)
  • Error when using float64 attributes using SDK v0.9.9 (pulumi-terraform#95)
  • pulumi logs entries only return first line (pulumi#857)


Released on February 7, 2018


  • Added the ability to control the upload context to the Pulumi Service. You may now set a context property in Pulumi.yaml, which is combined with the location of Pulumi.yaml. This new path is the root of what is uploaded and can be used during deployment. This allows you to, for example, share common code that is located in a folder in your source tree above the directory Pulumi.yaml for the project you are deploying.

  • Added additional configuration for docker builds for a container. The build property of a container may now either be a string (which is treated as a path to the folder to do a docker build in) or an object with properties context, dockerfile and args, which are passed to docker build. If unset, context defaults to the current working directory, dockerfile defaults to Dockerfile and args default to no arguments.


Released on January 22, 2018


  • Added the ability to import or export a stack’s deployment in the Pulumi CLI. This command can be used for either local or managed stacks. There are two new verbs under the command stack:

    • export writes the current stack’s latest deployment to stdout in JSON format.
    • import reads a new JSON deployment from stdin and applies it to the current stack.
  • A basic progress spinner is displayed during deployment operations.

    • When the Pulumi CLI is run in interactive mode, it displays an animated ASCII spinner
    • When run in non-interactive mode, CLI prints a message that it is still working. For CI systems that kill jobs when there is no CLI output (such as TravisCI), this eliminates the need to create shell scripts that periodically print output.
  • [@pulumi/cloud] Support for ACM certificates on HttpEndpoint. The AWS implementation of HttpEndpoint#attachCustomDomain accepts an ACM cert in place of raw certificate material, making it much easier to use HttpEndpoint with custom domains.

  • [@pulumi/cloud] Added HttpEndpoint#proxy function to provide routes on an HTTP endpoint which redirect to a URL or cloud.Endpoint.

  • [@pulumi/cloud] Added Response#getHeader function.

  • [@pulumi/cloud-aws] Many new config settings have been added to enable overriding defaults for Network and Cluster configuration - both for auto clusters and for externally provided networks and clusters.


  • To make the behavior of local and managed stacks consistent, the Pulumi CLI uses a separate encryption key for each stack, rather than one shared for all stacks. You can now use a different passphrase for different stacks. Similar to managed stacks, you cannot copy and paste an encrypted value from one stack to another in Pulumi.yaml. Instead you must manage the value via pulumi config.

  • The default behavior for --color is now always. To change this, specify --color always or --color never. Previously, the value was based on the presence of the flag --debug.

  • The command pulumi logs now defaults to returning one hour of logs and outputs the start time that is used.

  • [pulumi-aws] Auto-name ElasticSearch domain name, following the naming restrictions documented in Amazon Elasticsearch documentation for DomainName.

  • [pulumi-cloud] Header names are now normalized (using toLowerCase) for HttpEndpoint.

  • [pulumi-cloud] For cloud.Service, the default permissions for cluster EC2 instances have been reduced.

  • [pulumi-cloud] Pulumi now adds a Name tag onto instances launched into the ECS cluster.

  • [pulumi-cloud] Expose additional AWS resources in @pulumi/cloud-aws: Topic, Timer, Table and HttpEndpoint.


  • When a stack is removed, pulumi now deletes any configuration it had saved in either the Pulumi.yaml file or the workspace.


Released on December 28, 2017


Pulumi Console and managed stacks

New in this release is the Pulumi Console and stacks that are managed by Pulumi. This is the recommended way to safely deploy cloud applications. - pulumi stack init now creates a Pulumi managed stack. For a local stack, use --local. - All Pulumi CLI commands now work with managed stacks. Login to Pulumi via pulumi login. - The Pulumi Console provides a management experience for stacks. You can view the currently deployed resources (along with the AWS ARNs) and see logs from the last update operation.

Components and output properties

  • Support for component resources(pulumi #340), enabling grouping of resources into logical components. This provides an improved view of resources during preview and update operations in the CLI (pulumi #417).
  + pulumi:pulumi:Stack: (create)
     + cloud:table:Table: (create)
        + aws:dynamodb/table:Table: (create)
  • A stack can have output properties, defined as export let varName = val. You can view the last deployed value for the output property using pulumi stack output varName or in the Pulumi Console.

Resource naming

Resource naming is now more consistent, but there is a new file format for checkpoint files for both local and managed stacks.

If you created stacks in the 0.8 release, you should destroy them with the 0.8 CLI, then recreate with the 0.9.x CLI.

Support for configuration secrets

  • Store secrets securely in configuration via pulumi config set --secret. chris
  • The verbs for config are now consistent, via get, set, and rm. See Consistent config verbs #552.


  • [experimental] Support for the pulumi logs command (pulumi #527). Unified logging is available in all of the @pulumi/cloud components (pulumi-cloud #40). These features now work:
    • To see new logs as they arrive, use --follow
    • Use --since to limit to recent logs, such as pulumi logs --since=1h
    • Filter to specific resources with --resource. This filters to a particular component and its child resources (if any), such as pulumi logs --resource examples-todoc57917fa --since 1h

Other features