Pulumi is a free, open source cloud infrastructure management project written in Go and released under Apache-2.0. It has 25,694 GitHub stars, 1,431 forks and 2,419 open issues, and was last pushed 7 hours ago. On this registry it ranks #5 of 43 tracked projects in Cloud Infrastructure Management, with 5 head-to-head comparisons available. It gained 17 stars over the last 6 tracked days.

Pulumi — Infrastructure as code in your favorite language

What is Pulumi?

Pulumi is an open-source infrastructure-as-code tool that lets teams define and deploy cloud infrastructure using general-purpose programming languages instead of YAML, aimed at developers, platform engineers, and agents working across AWS, Azure, Google Cloud Platform, and Kubernetes.

What it is

Pulumi is the open-source project behind the pulumi CLI, the Pulumi engine, and the language SDKs that sit on top of it. The engine is written in Go and the whole repository is released under the Apache 2.0 license. Individual provider libraries live in their own repositories, so this repo holds the core machinery rather than the full catalogue of integrations. That catalogue is exposed through the Pulumi Registry, which covers AWS, Azure, Google Cloud Platform, Kubernetes, and more than 300 other providers. The project positions itself as the easiest way to build and deploy infrastructure of any architecture on any cloud, and it treats that infrastructure as ordinary code that can be versioned, reviewed, and tested with the tools a team already uses.

The concrete problem it solves is configuration sprawl. Instead of writing and maintaining hand-authored YAML, Pulumi users write programs and let the engine provision and manage the resulting resources. Standard language features such as loops, functions, classes, and package management replace the templating and copy-paste patterns common to declarative configuration files. The README demonstrates this directly: three web servers are created by iterating over an array in TypeScript, and a daily serverless archive job is expressed as a scheduled function that writes to a DynamoDB table. For teams that want this inside their own software rather than behind a CLI, the Automation API embeds infrastructure-as-code directly into an application.

Key capabilities

  • The pulumi CLI and core engine ship in this repository, alongside the language SDKs.
  • Supported languages include TypeScript and JavaScript via the @pulumi/pulumi npm package, Python via the pulumi PyPI package, .NET via the pulumi NuGet package, and Go via github.com/pulumi/pulumi on pkg.go.dev.
  • Provisioning targets AWS, Azure, Google Cloud Platform, and Kubernetes, plus more than 300 providers listed in the Pulumi Registry.
  • Standard language constructs replace YAML, so loops, functions, classes, and package management work as they normally do.
  • The Automation API allows infrastructure definitions to be embedded directly into software rather than run only from the command line.
  • A separate pulumi/examples repository collects examples spanning containers, serverless, and general infrastructure.
  • Community support runs through a Slack workspace and GitHub Discussions.

Who uses it and how

  • Platform teams that need one workflow spanning AWS, Azure, Google Cloud Platform, and Kubernetes rather than a separate tool per cloud.
  • TypeScript, Python, .NET, and Go shops that want infrastructure written in the same language and dependency system as their application code.
  • Container and Kubernetes operators who define cluster resources as code alongside other cloud resources.
  • Serverless teams building event-driven systems, as shown by the README example that schedules a cron(30 8 * * ? *) CloudWatch trigger writing to a DynamoDB table.
  • Product teams embedding provisioning into their own software through the Automation API, so infrastructure becomes part of the application rather than a separate pipeline step.

Getting started

Install the pulumi CLI, then add the SDK for the chosen language: @pulumi/pulumi from npm, pulumi from PyPI, pulumi from NuGet, or the Go module github.com/pulumi/pulumi. The Get Started guide at pulumi.com/docs/get-started/ walks through deploying a simple application to AWS, Azure, Google Cloud, or Kubernetes.

How it compares

No list of paid products replaced by this project is provided in the available facts, and the facts name no comparable tools. Pulumi therefore stands alone in this registry entry, and no comparison against other products can be made honestly here.

When to use it — and when not to

Pulumi suits teams that already treat their application code as the source of truth and want infrastructure to follow the same review, testing, and packaging practices. It is a weaker fit for anyone who wants plain declarative templates with no programming-language toolchain, since the core value depends on using loops, functions, classes, and package managers rather than avoiding them. Anyone evaluating it should also weigh the 2419 open issues on the repository and the fact that provider libraries are maintained in separate repositories, which means the full surface area is spread across many projects rather than concentrated in one place.

project readme (upstream, from github) — read inline

Pulumi

</a>

Slack GitHub Discussions NPM version Python version NuGet version GoDoc License

Infrastructure as Code for Humans and Agents

Pulumi Infrastructure as Code is the easiest way to build and deploy infrastructure, of any architecture and on any cloud, using programming languages that you already know and love. Code and ship infrastructure faster with your favorite languages and tools, and embed IaC anywhere with Automation API.

Simply write code in your favorite language and Pulumi automatically provisions and manages your resources on AWS, Azure, Google Cloud Platform, Kubernetes, and 300+ providers using an infrastructure-as-code approach. Skip the YAML, and use standard language features like loops, functions, classes, and package management that you already know and love.

For example, create three web servers:

import * as aws from "@pulumi/aws";

const ami = aws.ec2.getAmiOutput({
    mostRecent: true,
    owners: ["amazon"],
    filters: [{ name: "name", values: ["al2023-ami-*-x86_64"] }],
});

const sg = new aws.ec2.SecurityGroup("web-sg", {
    ingress: [{ protocol: "tcp", fromPort: 80, toPort: 80, cidrBlocks: ["0.0.0.0/0"] }],
});

for (const i of [0, 1, 2]) {
    new aws.ec2.Instance(`web-${i}`, {
        ami: ami.id,
        instanceType: "t3.micro",
        vpcSecurityGroupIds: [sg.id],
        userData: `#!/bin/bash
            echo "Hello, World!" > index.html
            nohup python3 -m http.server 80 &`,
    });
}

Or a simple serverless timer that archives Hacker News every day at 8:30AM:

import * as aws from "@pulumi/aws";
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { DynamoDBDocumentClient, PutCommand } from "@aws-sdk/lib-dynamodb";

const snapshots = new aws.dynamodb.Table("snapshots", {
    attributes: [{ name: "id", type: "S" }],
    hashKey: "id",
    billingMode: "PAY_PER_REQUEST",
});

aws.cloudwatch.onSchedule("daily-yc-snapshot", "cron(30 8 * * ? *)", async () => {
    const res = await fetch("https://news.ycombinator.com");
    const content = await res.text();

    const client = DynamoDBDocumentClient.from(new DynamoDBClient({}));
    await client.send(new PutCommand({
        TableName: snapshots.name.get(),
        Item: { id: `${Date.now()}`, content },
    }));
});

Many examples are available spanning containers, serverless, and infrastructure in pulumi/examples.

Pulumi is open source under the Apache 2.0 license, supports many languages and clouds, and is easy to extend. This repo contains the pulumi CLI, language SDKs, and core Pulumi engine, and individual libraries are in their own repos.

Welcome

  • Get Started with Pulumi: Deploy a simple application in AWS, Azure, Google Cloud, or Kubernetes using Pulumi.

  • Learn: Follow Pulumi learning pathways to learn best practices and architectural patterns through authentic examples.

  • Examples: Browse several examples across many languages, clouds, and scenarios including containers, serverless, and infrastructure.

  • Docs: Learn about Pulumi concepts, follow user-guides, and consult the reference documentation.

  • Registry: Find the Pulumi Package with the resources you need. Install the package directly into your project, browse the API documentation, and start building.

  • Secrets Management: Tame secrets sprawl and configuration complexity securely across all your cloud infrastructure and applications with Pulumi ESC.

  • Community Slack: Join us in Pulumi Community Slack. All conversations and questions are welcome.

  • GitHub Discussions: Ask questions or share what you're building with Pulumi.

Getting Started

Watch the video

See the Get Started guide to quickly get started with Pulumi on your platform and cloud of choice.

Otherwise, the following steps demonstrate how to deploy your first Pulumi program, using AWS Serverless Lambdas, in minutes:

  1. Install:

    To install the latest Pulumi release, run the following (see full installation instructions for additional installation options):

    curl -fsSL https://get.pulumi.com/ | sh
    
  2. Create a Project:

    After installing, you can get started with the pulumi new command:

    mkdir pulumi-demo && cd pulumi-demo
    pulumi new serverless-aws-typescript
    

    The new command offers templates for all languages and clouds. Run it without an argument and it'll prompt you with available projects. This command creates an AWS Serverless Lambda project written in TypeScript.

  3. Deploy to the Cloud:

    Run pulumi up to get your code to the cloud:

    pulumi up
    

    This makes all cloud resources needed to run your code. Simply make edits to your project, and subsequent pulumi ups will compute the minimal diff to deploy your changes.

  4. Use Your Program:

    Now that your code is deployed, you can interact with it. In the above example, we can curl the endpoint:

    curl $(pulumi stack output url)
    
  5. Access the Logs:

    If you're using containers or functions, Pulumi's unified logging command will show all of your logs:

    pulumi logs -f
    
  6. Destroy your Resources:

    After you're done, you can remove all resources created by your program:

    pulumi destroy -y
    

To learn more, head over to pulumi.com for much more information, including tutorials, examples, and details of the core Pulumi CLI and programming model concepts.

Platform

Languages

Language Status Runtime Versions
JavaScript Stable Node.js Current, Active and Maintenance LTS versions
TypeScript Stable Node.js Current, Active and Maintenance LTS versions
Python Stable Python [Supported versions](ht

readme truncated — read the full docs on github

Frequently asked questions

Is Pulumi free to use?

Pulumi is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does Pulumi do?

Infrastructure as code in your favorite language

What is Pulumi written in?

Pulumi is primarily written in Go. Its source is publicly available at https://github.com/pulumi/pulumi, and it has 25,694 GitHub stars.