Envbuilder is here: Enable developers to customize their environments with Dev Containers

author avatar
Cian Johnston
 on October 1st, 2024
Updated on October 5th, 2024
4 min read

We’re thrilled to announce the first release of Envbuilder, an open-source project inspired by an idea from our co-founder, Kyle Carberry. Built on the Dev Container standard, Envbuilder allows developers to take control of their dependencies and environments without waiting on platform teams. If you're not familiar with Dev Containers, you can read a helpful summary here.

In this post, we’ll dig into what Envbuilder is, who it’s for, and how it works. If you’re looking for an example of how to use Envbuilder to run dev containers on Kubernetes, check out this blog post.

Why Envbuilder?

What if you could just "run" a Dev Container in your Kubernetes cluster straight from a Git repository? Without Docker-in-Docker?

It's hard to keep your development experience consistent and smooth while scaling your developer platform. You might decide to build pre-approved, standardized images for your development teams, but you then face the prospect of maintaining all of those different images. Why not let your development teams do this themselves? Envbuilder allows users to define their own dependencies and environments, helping break through these barriers and scale past thousands of daily active users. And it doesn't need Docker-in-Docker to work!

You can integrate pre-approved tools from sources like Artifactory to streamline workflows, reduce bottlenecks, and accelerate project delivery—all while maintaining the highest levels of security! Envbuilder eliminates the delays and frustrations of traditional environment setups and empowers teams to customize their own workspaces and enhance their own development experience.

Envbuilder runs inside a small container image, but does not require a Docker daemon in order to build a dev container! Instead, it builds in-place and then gets out of your way. This is useful in environments where you may not have access to a Docker socket for security reasons, but still need to work with a container.

To keep builds quick, Envbuilder can also use a Docker registry as a cache to store intermediate build stages.

Finally, Envbuilder is open-source and free for anyone to use!

Who should use Envbuilder?

Envbuilder is a good fit for developer teams who are familiar with Docker and/or dev containers and already using containerized development environments. If you have a large number of projects with different toolchains, dependencies, or that depend on a particular Linux distribution, Envbuilder will make it easier to quickly context switch between projects.

Envbuilder is also a great fit for more restricted environments where you may not have access to a Docker daemon—it doesn't need one to work!

How does Envbuilder work?

Envbuilder will:

  1. Clone a Git repository that contains a devcontainer.json or Dockerfile
  2. Build the Dev container/Dockerfile in-place
  3. Execute a customizable command in the built environment once the build is complete

If there is a problem building the Dev container, Envbuilder can instead use a 'fallback' image.

If you're developing a new dev container, you can use Envbuilder in a local workflow simply by mounting in a folder containing your devcontainer.json. You can see an example here of how to do this.

Envbuilder can also leverage a Docker registry to store intermediate build stages, allowing them to be re-used later on if there are no changes. To further improve build speeds, we have also created a Terraform provider that allows you to perform a 'dry-run' build of a dev container and start your workspace directly from a pre-built image, if it exists. This enables CI workflows that ensure your development teams' environments are always ready to go.

Envbuilder is distributed as a Docker image. The image is small (~74MB) and contains only a single binary.

Envbuilder leverages the following open-source utilities and libraries: - Kaniko allows building containers without the need for a Docker daemon. - Go-Git is a pure-Go library that allows Envbuilder to clone Git repositories without the need for a local git executable.

Next Steps

Try out Envbuilder for yourself by visiting our GitHub repository. Want to see how it fits into your development workflows? Let’s talk about how we can help you integrate Envbuilder into your processes and improve your developer experience.

Subscribe to our Newsletter

Want to stay up to date on all things Coder? Subscribe to our monthly newsletter and be the first to know when we release new things!