---
title: YAML
url: /docs/iac/languages-sdks/yaml/
---

Pulumi supports writing your infrastructure as code using Pulumi YAML. Pulumi YAML is a
configuration language designed to make describing infrastructure as simple as possible. It supports
managing infrastructure on any cloud, including Azure, AWS, and Google Cloud.

## Prerequisites

All you need to use Pulumi YAML is the [Pulumi CLI](/docs/install/).

## Example

```yaml
name: simple-yaml
runtime: yaml
config:
  message:
    default: Hello, world!
    type: string
resources:
  my-bucket:
    type: aws:s3:Bucket
  my-bucket-website:
    type: aws:s3:BucketWebsiteConfigurationV2
    properties:
      bucket: ${my-bucket.bucket}
      indexDocument:
        suffix: index.html
  ownership-controls:
    type: aws:s3:BucketOwnershipControls
    properties:
      bucket: ${my-bucket.id}
      rule:
        objectOwnership: ObjectWriter
  public-access-block:
    type: aws:s3:BucketPublicAccessBlock
    properties:
      bucket: ${my-bucket.id}
      blockPublicAcls: false
  index.html:
    type: aws:s3:BucketObject
    properties:
      bucket: ${my-bucket}
      source:
        fn::stringAsset: 
# ${message}

      acl: public-read
      contentType: text/html
    options:
      dependsOn:
        - ${ownership-controls}
        - ${public-access-block}
outputs:
  bucketEndpoint: http://${my-bucket.websiteEndpoint}
```

> **Note:** The example is a fully valid and self-contained Pulumi project. You only need one file to create resources in Pulumi YAML.

Further examples are given in the [Pulumi YAML GitHub
repository](https://github.com/pulumi/pulumi-yaml/tree/main/examples). The specification for Pulumi
YAML documents is in the [Pulumi YAML reference](/docs/languages-sdks/yaml/yaml-language-reference/).

## Templates

The fastest way to start a new project is to use a template. The template will initialize a Pulumi
project and set up starter resources for the chosen cloud. The `yaml` template is cloud agnostic.

- `pulumi new aws-yaml`: creates a starter AWS Pulumi YAML project
- `pulumi new azure-yaml`: creates a starter Azure Pulumi YAML project
- `pulumi new gcp-yaml`: creates a starter Google Cloud Pulumi YAML project
- `pulumi new kubernetes-yaml`: creates a starter Kubernetes Pulumi YAML project

By default, `pulumi new` provides a number of templates provided by Pulumi, but it can also use your own custom templates.

To learn more about building and working with custom templates, see [Custom Templates](/docs/idp/concepts/templates) and the [`pulumi new`](/docs/iac/cli/commands/pulumi_new/) docs.

## Pulumi Programming Model

The Pulumi programming model defines the core concepts you will use when creating infrastructure as
code programs using Pulumi. [Concepts](/docs/intro/concepts)
describes these concepts with examples available in all supported languages, including Pulumi YAML.

To learn how the Pulumi Programming Model is implemented for Pulumi YAML, refer
to the [Pulumi YAML Reference Guide](/docs/languages-sdks/yaml/yaml-language-reference/).

## Compiler support

Pulumi YAML includes native support for languages that compile to YAML/JSON via
the `compiler` runtime option.

```yaml
name: generated-from-cue
runtime:
  name: yaml
  options:
    compiler: cue export
```

Pulumi will run whatever program and arguments are specified in `compiler` and
interpret the output as a Pulumi YAML program.

## YAML Packages

The [Pulumi Registry](/registry/) houses 100+ YAML packages.
