Commands (CLI)

Pulumi is controlled primarily using the command line interface (CLI). The Pulumi service works in conjunction with the CLI to carry out tasks such as deploying updates to your cloud program and infrastructure, and keeping a history of who updated what in your team and when. This CLI has been designed to work well in unattended scenarios, such as in continuous integration and deployment, and communicates all errors properly using non-zero exit codes.

Common Commands

The most common commands in the CLI that you’ll be using are as follows:

  • pulumi new: creates a new project using a template
  • pulumi stack: manage your stacks (at least one is required to perform an update)
  • pulumi config: configure variables such as keys, regions, and so on
  • pulumi up: preview and deploy changes to your program and/or infrastructure
  • pulumi preview: preview your changes explicitly before deploying
  • pulumi destroy: destroy your program and its infrastructure when you’re done

Complete Reference

Below is the complete documentation for all available commands:


Pulumi command line


Pulumi - Cloud Native Infrastructure as Code

To begin working with Pulumi, run the ‘pulumi new’ command:

$ pulumi new

This will prompt you to create a new project for your cloud and language of choice.

The most common commands from there are:

- pulumi up       : Deploy code and/or resource changes
- pulumi stack    : Manage instances of your project
- pulumi config   : Alter your stack's configuration or secrets
- pulumi destroy  : Tear down your stack's resources entirely

For more information, please visit the project page:


      --color string                 Colorize output. Choices are: always, never, raw, auto (default "auto")
  -C, --cwd string                   Run pulumi as if it had been started in another directory
      --disable-integrity-checking   Disable integrity checking of checkpoint files
  -e, --emoji                        Enable emojis in the output
  -h, --help                         help for pulumi
      --logflow                      Flow log settings to child processes (like plugins)
      --logtostderr                  Log to stderr instead of to files
      --non-interactive              Disable interactive mode for all commands
      --profiling string             Emit CPU and memory profiles and an execution trace to '[filename].[pid].{cpu,mem,trace}', respectively
      --tracing string               Emit tracing to a Zipkin-compatible tracing endpoint
  -v, --verbose int                  Enable verbose logging (e.g., v=3); anything >3 is very verbose


Auto generated by spf13/cobra on 6-Dec-2018

Command-line Completion

The Pulumi CLI also has a command to generate a command-line completion script for Bash and Zsh. This gives you tab completion for all commands, sub-commands, and flags, which can make it easier to remember what to type and where.


To use this, you’ll first need to ensure bash completion is installed:

  • On most current Linux distros, bash completion should be available.
  • On a Mac, install with brew install bash-completion.

The pulumi gen-completion bash command self-generates its own CLI script. You can save the output to a file.

  • On Linux, save to pulumi gen-completion bash > /etc/bash_completion.d/pulumi.
  • On macOS, save to pulumi gen-completion bash > /usr/local/etc/bash_completion.d/pulumi.

Ensure that bash completion is run when you launch a new terminal by adding it to ~/.bash_profile.

On Linux:

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion

On macOS:

if [ -f /usr/local/etc/bash_completion ]; then
    . /usr/local/etc/bash_completion

Finally, after saving the pulumi bash completion script, either reopen your terminal or source your profile in order to reload the bash completion scripts in your current terminal session (. ~/.bash_profile).


The pulumi gen-completion zsh command self-generates its own CLI script. You can save the output to a file inside a directory listed in the $fpath variable.

You can list your $fpath directories and pick one of them:

echo $fpath

You can also use an arbitrary directory like ~/.zsh/completion/ and then add it to your fpath in ~/.zshrc :

fpath=(~/.zsh/completion $fpath)

Make sure compinit is loaded or do it by adding in ~/.zshrc:

autoload -Uz compinit && compinit -i

Then reload your shell:

exec $SHELL -l