Modular by design
Each component is one shell script. Add, remove, or rearrange bricks without touching the rest of your setup.
DevLEGO is a modular, Docker-based development environment. Pick the bricks you want, snap them together, and bake them into one GPU-ready container you reach from the browser, a web terminal, or SSH.
Built on the NVIDIA base image nvcr.io/nvidia/mxnet:24.06-py3 — CUDA-ready out of the box.
Every tool is a brick: a small shell script in component/. Choose the bricks you want, and DevLEGO bakes them into a single image you open in a browser tab, a web terminal, or over SSH — all running on a GPU-ready NVIDIA Docker base so your CUDA workloads just work.
Each component is one shell script. Add, remove, or rearrange bricks without touching the rest of your setup.
Full IDEs and notebooks in the browser, a terminal in a tab, plus an always-on SSH server for remote shells and tunneling.
Built on nvcr.io/nvidia/mxnet:24.06-py3 with a GPU reservation in Compose, so accelerated workloads run from the start.
The four service bricks default to ON — disable any with its ENABLE_* environment variable set to false. SSH always runs. The AI CLIs are always installed in every terminal.
VS Code in the browser — a full IDE in a tab. Toggle: ENABLE_CODE_SERVER=false
Notebooks plus a full IDE workspace. Toggle: ENABLE_JUPYTER_LAB=false
The classic notebook interface. Toggle: ENABLE_JUPYTER_NOTEBOOK=false
A full terminal in a browser tab. Toggle: ENABLE_TTYD=false
Remote shell and tunneling. Always on — there is no toggle to disable it.
port 38000Miniconda environment manager, always installed. No port needed.
status always installedFast Python package and environment manager, always installed. No port needed.
status always installedAnthropic's agentic coding CLI (@anthropic-ai/claude-code), ready in any terminal. No port, no toggle.
OpenAI's coding CLI (@openai/codex), ready in any terminal. No port, no toggle.
Also baked into every image
Claude Code and Codex ship inside the image — available in every terminal, with no port and no toggle. Drop in your API keys and start prompting.
Anthropic's agentic coding CLI — ready to use in any DevLEGO terminal the moment the container boots.
ANTHROPIC_API_KEYANTHROPIC_AUTH_TOKEN and ANTHROPIC_BASE_URLOpenAI's coding CLI — also baked in and available everywhere, alongside Conda, uv, and the rest of your toolchain.
OPENAI_API_KEYCODEX_API_KEY for a single codex exec runProvide API keys via a .env file next to docker-compose.yml (Compose auto-loads it) or through your host shell. Start by copying .env.example to .env. Unset keys are simply omitted from the container, so every key is optional.
# .env — sits next to docker-compose.yml, auto-loaded by Compose
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
# optional overrides (leave out what you don't need):
# ANTHROPIC_BASE_URL=https://your-gateway.example.com
Copy and paste. Note the Compose V2 syntax — docker compose, two words.
1# Clone the repo and step in
git clone https://github.com/voidful/DevLEGO.git && cd DevLEGO
2# Create the Docker network
docker network create devlego
3# Copy the env template (add API keys if you want the AI CLIs authenticated — optional)
cp .env.example .env
4# Build and start everything in the background
docker compose up -d --build
5# Open Code Server in your browser — default password: changeme
open http://localhost:38001
docker-compose.yml: USERNAME=devlego, PASSWORD=changeme — change these before exposing it.
Everything is plain shell scripts and YAML. Change credentials, ports, and versions in a few files, flip the ENABLE_* toggles, or add a brick of your own.
Username and password, mounted volumes, the GPU reservation, and the API-key environment passthrough for the AI CLIs.
Host and container port numbers for every service brick — SSH on 38000 through ttyd on 38004.
Pinned tool versions and VS Code extension versions, so your environment is reproducible across rebuilds.
The four service bricks default to ON. Set any ENABLE_* variable to false to leave that brick out. SSH always runs.
A component is just a shell script in component/. Drop yours in, wire two lines into the Dockerfile, and rebuild — your brick snaps into the same container as the rest.
component/my-tool.shCOPY line to the DockerfileRUN line to execute it during the builddocker compose up -d --build# one script per brick
component/code-server.sh
component/jupyter.sh
component/ttyd.sh
component/ai-cli.sh
# … drop your own here
component/my-tool.sh
Pick the bricks, bake the image, and code from anywhere. Start in five commands, or design your container visually in the Builder.