# Dev Containers

Dev containers allow developers to define their development environment as code using the [Dev Container specification](https://containers.dev/).
Configuration lives in a `devcontainer.json` file alongside source code, enabling consistent, reproducible environments.

By adopting dev containers, organizations can:

* **Standardize environments**:
  Eliminate "works on my machine" issues while still allowing developers to customize their tools within approved boundaries.
* **Scale efficiently**:
  Let developers maintain their own environment definitions, reducing the burden on platform teams.
* **Improve security**:
  Use hardened base images and controlled package registries to enforce security policies while enabling developer self-service.

Coder supports two approaches for running dev containers.
Choose based on your infrastructure and workflow requirements.

<Callout type="success" title="Tip">
  Nix flakes are an alternate way to handle dependency management.
  With Nix flakes, developers and template administrators define environments and manage dependencies at a much deeper level, without requiring a container runtime.

  To learn how to use them in Coder with or without NixOS, visit the [Nix(OS)](/docs/admin/integrations/nix/) page.
</Callout>

## Dev Containers Integration

The Dev Containers Integration uses the standard `@devcontainers/cli` and Docker to run containers inside your workspace.
This is the recommended approach for most use cases.

**Best for:**

* Workspaces with Docker available (Docker-in-Docker or mounted socket)
* Dev container management in the Coder dashboard (discovery, status, rebuild)
* Multiple dev containers per workspace

[Configure Dev Containers Integration](/docs/admin/integrations/devcontainers/integration/)

For user documentation, see the [Dev Containers user guide](/docs/user-guides/devcontainers/).

## Envbuilder

<Callout type="warn" title="Warning">
  Envbuilder is in **maintenance mode** with no new features planned.

  The recommended way to use dev containers in Coder is the built-in [Dev Containers Integration](/docs/admin/integrations/devcontainers/integration/).
  To find the best approach for your deployment, join our [community](https://coder.com/community) to be guided towards the best approach.
</Callout>

Envbuilder transforms the workspace image itself from a `devcontainer.json`, rather than running containers inside the workspace.
It does not require a Docker daemon.

**Best for:**

* Environments where Docker is unavailable or restricted
* Infrastructure-level control over image builds, caching, and security scanning
* Kubernetes-native deployments without privileged containers

[Configure Envbuilder](/docs/admin/integrations/devcontainers/envbuilder/)
