# Devcontainers (alpha)

[Devcontainers](https://containers.dev) are an open source specification for
defining development environments.
[envbuilder](https://github.com/coder/envbuilder) is an open source project by
Coder that runs devcontainers via Coder templates and your underlying
infrastructure.

There are several benefits to adding a devcontainer-compatible template to
Coder:

- Drop-in migration from Codespaces (or any existing repositories that use
  devcontainers)
- Easier to start projects from Coder (new workspace, pick starter devcontainer)
- Developer teams can "bring their own image." No need for platform teams to
  manage complex images, registries, and CI pipelines.

## How it works

- Coder admins add a devcontainer-compatible template to Coder (envbuilder can
  run on Docker or Kubernetes)

- Developers enter their repository URL as a [parameter](./parameters.md) when
  they create their workspace. [envbuilder](https://github.com/coder/envbuilder)
  clones the repo and builds a container from the `devcontainer.json` specified
  in the repo.

- Developers can edit the `devcontainer.json` in their workspace to rebuild to
  iterate on their development environments.

## Example templates

- [Docker](https://github.com/coder/coder/tree/main/examples/templates/devcontainer-docker)
- [Kubernetes](https://github.com/coder/coder/tree/main/examples/templates/devcontainer-kubernetes)

![Devcontainer parameter screen](../images/templates/devcontainers.png)

[Parameters](./parameters.md) can be used to prompt the user for a repo URL when
they are creating a workspace.

## Authentication

You may need to authenticate to your container registry (e.g. Artifactory) or
git provider (e.g. GitLab) to use envbuilder. Refer to the
[envbuilder documentation](https://github.com/coder/envbuilder/) for more
information.

## Caching

To improve build times, devcontainers can be cached. Refer to the
[envbuilder documentation](https://github.com/coder/envbuilder/) for more
information.

## Other features & known issues

Envbuilder is still under active development. Refer to the
[envbuilder GitHub repo](https://github.com/coder/envbuilder/) for more
information and to submit feature requests.
