MCPcopy Create free account
hub / github.com/coder/envbuilder

github.com/coder/envbuilder @v1.3.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.3.0 ↗ · + Follow
296 symbols 1,254 edges 38 files 105 documented · 35% updated 54d agov1.3.0 · 2026-03-06★ 29762 open issues

Browse by type

Functions 257 Types & classes 39
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Envbuilder

envbuilder

(Video created using asciinema and agg)

Build development environments from a Dockerfile on Docker, Kubernetes, and OpenShift. Allow developers to modify their environment in a tight feedback loop.

  • Supports devcontainer.json and Dockerfile
  • Cache image layers with registries for speedy builds
  • Runs on Kubernetes, Docker, and OpenShift

Getting Started

The easiest way to get started is by running the envbuilder Docker container that clones a repository specified by ENVBUILDER_GIT_URL, builds the image from a Dockerfile or devcontainer.json, and runs the $ENVBUILDER_INIT_SCRIPT in the freshly built container.

Tips: - The /tmp/envbuilder directory persists demo data between commands. You can choose a different directory if needed. - To clone a different branch, you append it to ENVBUILDER_GIT_URL in the form #refs/heads/my-branch. For example: https://github.com/coder/envbuilder-starter-devcontainer#refs/heads/boring-prompt.

docker run -it --rm \
    -v /tmp/envbuilder:/workspaces \
    -e ENVBUILDER_GIT_URL=https://github.com/coder/envbuilder-starter-devcontainer \
    -e ENVBUILDER_INIT_SCRIPT=bash \
    ghcr.io/coder/envbuilder

Edit .devcontainer/Dockerfile to add htop:

vim .devcontainer/Dockerfile
- RUN apt-get install vim sudo -y
+ RUN apt-get install vim sudo htop -y

Exit the container and re-run the docker run command. After the build completes, htop should be available in the container! 🥳

To explore more examples, tips, and advanced usage, check out the following guides:

Setup Script

The ENVBUILDER_SETUP_SCRIPT environment variable dynamically configures the user and init command (PID 1) after the container build process.

Note: TARGET_USER is passed to the setup script to specify who will execute ENVBUILDER_INIT_COMMAND (e.g., code).

Write the following to $ENVBUILDER_ENV to shape the container's init process:

  • TARGET_USER: Identifies the ENVBUILDER_INIT_COMMAND executor (e.g., root).
  • ENVBUILDER_INIT_COMMAND: Defines the command executed by TARGET_USER (e.g. /bin/bash).
  • ENVBUILDER_INIT_ARGS: Arguments provided to ENVBUILDER_INIT_COMMAND (e.g., -c 'sleep infinity').
# init.sh - Change the init if systemd exists
if command -v systemd >/dev/null; then
  echo "Hey 👋 $TARGET_USER"
  echo ENVBUILDER_INIT_COMMAND=systemd >> $ENVBUILDER_ENV
else
  echo ENVBUILDER_INIT_COMMAND=bash >> $ENVBUILDER_ENV
fi

# Run envbuilder with the setup script
docker run -it --rm \
  -v ./:/some-dir \
  -e ENVBUILDER_SETUP_SCRIPT=/some-dir/init.sh \
  ...

Environment Variables

You can see all the supported environment variables in this document.

Development Containers

This document keeps track of what parts of the Dev Container specification Envbuilder currently supports.

Feel free to create a new issue if you'd like Envbuilder to support a particular feature.

Devfile

Devfiles automate and simplify development by adopting existing devfiles available in the public community registry.

Issue: #113

Contributing

See Development for build instructions, dependency management notes, and common troubleshooting.

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Function 175
Method 82
Struct 34
FuncType 2
Interface 2
TypeAlias 1

Languages

Go100%

Modules by API surface

integration/integration_test.go52 symbols
envbuilder.go29 symbols
internal/ebutil/remount.go23 symbols
internal/ebutil/mock_mounter_test.go22 symbols
internal/ebutil/remount_internal_test.go15 symbols
devcontainer/devcontainer.go15 symbols
devcontainer/devcontainer_test.go13 symbols
git/git.go11 symbols
log/coder.go10 symbols
testutil/gittest/gittest.go9 symbols
options/options.go8 symbols
log/coder_internal_test.go8 symbols

For agents

$ claude mcp add envbuilder \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page