---
title_tag: "YAML | Languages & SDKs"
meta_desc: An overview of how to use Pulumi YAML for infrastructure as code on any cloud (AWS, Azure, Google Cloud, Kubernetes, etc.).
title: YAML
h1: Pulumi & YAML
meta_image: /images/docs/meta-images/docs-meta.png
menu:
languages:
identifier: yaml-language
weight: 6
aliases:
- /yaml/
- /docs/intro/languages/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
properties:
website:
indexDocument: 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}
```
{{% notes "info" %}}
The example is a fully valid and self-contained Pulumi project. You only need one file to create resources in Pulumi YAML.
{{% /notes %}}
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/pulumi-cloud/developer-portals/templates) and the [`pulumi new`](/docs/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.