Infrastructure as Code
in Real Programming Languages
Looking for an infrastructure as code tool? Pulumi lets you define cloud infrastructure in Python, TypeScript, Go, C#, Java, or YAML — with full IDE support, testing, and package management. Deploy to 170+ providers including AWS, Azure, Google Cloud, and Kubernetes. Free and open source.
Trusted by innovative companies

“Pulumi supercharged our infrastructure team by helping us create reusable building blocks that developers can leverage to provision new resources and enforce organizational policies for logging, permissions, resource tagging, and security.”
Igor Shapiro, Principal Engineer, Lemonade
Author in any language, deploy to any cloud
Pulumi Infrastructure as Code Engine
Stop learning DSLs. Author infrastructure as code using programming languages you already know — Python, TypeScript, Go, C#, Java, and YAML. Get auto-completion, type checking, and refactoring from your IDE. Deploy to 170+ providers.
Code faster with real languages
Write infrastructure in TypeScript, Python, Go, .NET, Java, and YAML. Use loops, conditionals, functions, and classes — not DSL workarounds.
Build on any cloud
Access the full breadth of services in AWS, Azure, GCP, and 170+ providers through a complete and consistent SDK interface.
Test and preview changes
Write unit tests with standard frameworks. Run integration tests against ephemeral infrastructure. Preview every change before deploying.
Build infrastructure faster with reusable components
Pulumi Packages
Build and reuse higher-level abstractions for cloud architectures with multi-language Pulumi Packages. Create a VPC component once, share it across your organization, and let every team deploy consistently. Real package managers, real versioning, real code reuse.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
// Create an S3 bucket for static hosting.
const bucket = new aws.s3.Bucket("my-site", {
website: { indexDocument: "index.html" },
});
// Upload a file to the bucket.
const index = new aws.s3.BucketObject("index.html", {
bucket: bucket.id,
content: "<h1>Hello, Pulumi!</h1>",
contentType: "text/html",
});
export const url = bucket.websiteEndpoint;
import pulumi
import pulumi_aws as aws
# Create an S3 bucket for static hosting.
bucket = aws.s3.Bucket("my-site",
website={"index_document": "index.html"},
)
# Upload a file to the bucket.
index = aws.s3.BucketObject("index.html",
bucket=bucket.id,
content="<h1>Hello, Pulumi!</h1>",
content_type="text/html",
)
pulumi.export("url", bucket.website_endpoint)
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
// Create an S3 bucket for static hosting.
bucket, err := s3.NewBucket(ctx, "my-site", &s3.BucketArgs{
Website: &s3.BucketWebsiteArgs{
IndexDocument: pulumi.String("index.html"),
},
})
if err != nil {
return err
}
ctx.Export("url", bucket.WebsiteEndpoint)
return nil
})
}
using Pulumi;
using Pulumi.Aws.S3;
await Deployment.RunAsync(() =>
{
// Create an S3 bucket for static hosting.
var bucket = new Bucket("my-site", new()
{
Website = new BucketWebsiteArgs
{
IndexDocument = "index.html",
},
});
return new Dictionary<string, object?>
{
["url"] = bucket.WebsiteEndpoint,
};
});
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.aws.s3.Bucket;
import com.pulumi.aws.s3.BucketArgs;
import com.pulumi.aws.s3.inputs.BucketWebsiteArgs;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
private static void stack(Context ctx) {
// Create an S3 bucket for static hosting.
var bucket = new Bucket("my-site", BucketArgs.builder()
.website(BucketWebsiteArgs.builder()
.indexDocument("index.html")
.build())
.build());
ctx.export("url", bucket.websiteEndpoint());
}
}
resources:
my-site:
type: aws:s3:Bucket
properties:
website:
indexDocument: index.html
outputs:
url: ${my-site.websiteEndpoint}
170+ cloud providers
Full API coverage for AWS, Azure, Google Cloud, Kubernetes, and 170+ more providers. Same-day updates when new services launch.
Reusable components
Build higher-level abstractions and share them as packages through npm, PyPI, NuGet, or Go modules. Real versioning, real dependency management.
AI-powered infrastructure
Generate Pulumi programs from natural language, or convert existing Terraform and CloudFormation with built-in migration tools.
Deliver infrastructure through software delivery pipelines
CI/CD Integrations
Version, review, test, and deploy infrastructure code through the same tools and processes used for your application code.

Version and review
Manage infrastructure code in Git and approve changes through pull requests.
Shift left
Get rapid feedback on your code with fast unit tests, and run integration tests against ephemeral infrastructure.
Continuous delivery
Integrate your CI/CD provider with Pulumi or use GitOps to manage Kubernetes clusters.
Trusted by thousands of companies
Pulumi’s Infrastructure as Code CLI and SDK is an open-source project that’s supported by an active community. We maintain a public roadmap and welcome feedback and contributions.
350,000+
Community members
4,000+
Companies in production
170+
Cloud and service integrations
Customers innovating with Pulumi Cloud
Snowflake
Built a multi-cloud, Kubernetes-based platform to standardize all deployments.