# Pulumi everywhere

> Can I provision every tool on this page from one codebase? Almost. Pulumi uses any Terraform provider, so AWS, Cloudflare, GitHub, Tailscale, Neon, Resend, PostHog, OpenRouter and Stripe are all code.

- A decision guide from The Stack by Nicolas Dao (Cloudless Labs, Sydney)
- Web page: https://cloudlesslabs.com/stack/guides/pulumi-everywhere/. The whole stack in one file: https://cloudlesslabs.com/stack/brief.md
- Tools: [Pulumi](https://cloudlesslabs.com/stack/pulumi/index.md) (My default), [Terraform / OpenTofu](https://cloudlesslabs.com/stack/terraform/index.md) (Use when it fits)

| How it's provisioned | Services |
|---|---|
| Official Pulumi package | AWS, Cloudflare, GitHub, Tailscale, Auth0. Stripe in public preview. |
| Any Terraform provider, vendor-maintained | PostHog, OpenRouter, Axiom, Better Stack, Hostinger |
| Any Terraform provider, community-maintained (often one person) | Neon, Resend, Postmark, Clerk. Pin versions. |
| AWS-native only (for now) | Lambda Web Functions (`@pulumi/aws-native` ≥ v1.82.0) |
| No provider | Loops, Customer.io, Inngest, Trigger.dev, Dashlane |

```
pulumi package add terraform-provider <namespace>/<name>
```

That one command generates a Pulumi SDK from any Terraform or OpenTofu provider.

**What IaC can't manage:** email templates and contact lists (Resend, SES), individual Durable Objects (created on first use), and purchases like Savings Plans.

## Related

- [Provisioning everything](https://cloudlesslabs.com/stack/use-cases/infra.md): the use case this guide works through
- [Pulumi](https://cloudlesslabs.com/stack/pulumi/index.md): the full entry (verdict, pricing, gotchas)
- [Terraform / OpenTofu](https://cloudlesslabs.com/stack/terraform/index.md): the full entry (verdict, pricing, gotchas)
- [Every decision guide](https://cloudlesslabs.com/stack/brief.md): listed at the end of the brief
- [Map of every Markdown file on cloudlesslabs.com, with what each one answers](https://ask.cloudlesslabs.com)
