# Add an Envbuilder template

A Coder administrator adds an Envbuilder-compatible template to Coder. This allows the template to prompt the developer for their dev container repository's URL as a [parameter](/content/docs/admin/templates/extending-templates/parameters/index.html) when they create their workspace. Envbuilder clones the repo and builds a container from the `devcontainer.json` specified in the repo.

You can create template files through the Coder dashboard, CLI, or you can choose a template from the [Coder registry](https://registry.coder.com/templates):

## Creating Templates

1. In the Coder dashboard, select **Templates** > **New Template**. The template builder opens.
2. The template builder does not currently include dev-container-compatible base templates. Select **Upload an existing template** at the bottom of the page to upload your Terraform files directly.
3. Upload your `.zip` or `.tar.gz` file, enter the details, then select **Create template**.
4. Edit the template files to fit your deployment.

To set variables such as the namespace, go to the template in your Coder dashboard and select **Settings** from the **⋮** (vertical ellipsis) menu:

## Envbuilder Terraform provider

When using the [Envbuilder Terraform provider](https://registry.terraform.io/providers/coder/envbuilder/latest/docs), a previously built and cached image can be reused directly, allowing dev containers to start instantaneously.

Developers can edit the `devcontainer.json` in their workspace to customize their development environments:

```json
# …
{
  "features": {
      "ghcr.io/devcontainers/features/common-utils:2": {}
  }
}
# …
```

## Example templates

| Template | Description |
| --- | --- |
| [Docker dev containers](https://github.com/coder/coder/tree/v2.35.3/examples/templates/docker-devcontainer) | Docker provisions a development container. |
| [Kubernetes dev containers](https://github.com/coder/coder/tree/v2.35.3/examples/templates/kubernetes-devcontainer) | Provisions a development container on the Kubernetes cluster. |
| [Google Compute Engine dev container](https://github.com/coder/coder/tree/v2.35.3/examples/templates/gcp-devcontainer) | Runs a development container inside a single GCP instance. It also mounts the Docker socket from the VM inside the container to enable Docker inside the workspace. |
| [AWS EC2 dev container](https://github.com/coder/coder/tree/v2.35.3/examples/templates/aws-devcontainer) | Runs a development container inside a single EC2 instance. It also mounts the Docker socket from the VM inside the container to enable Docker inside the workspace. |

Your template can prompt the user for a repo URL with [parameters](/content/docs/admin/templates/extending-templates/parameters/index.html):

## Dev container lifecycle scripts

The `onCreateCommand`, `updateContentCommand`, `postCreateCommand`, and `postStartCommand` lifecycle scripts are run each time the container is started. This could be used, for example, to fetch or update project dependencies before a user begins using the workspace.

Lifecycle scripts are managed by project developers.
