v0.2.0 — now with AI coding CLIs NEW

Assemble your dev environment like LEGO bricks.

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.

One Docker image GPU-ready (NVIDIA base) Browser, web terminal & SSH MIT licensed
What is DevLEGO

One container, built from the bricks you pick

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.

Modular by design

Each component is one shell script. Add, remove, or rearrange bricks without touching the rest of your setup.

Reach it anywhere

Full IDEs and notebooks in the browser, a terminal in a tab, plus an always-on SSH server for remote shells and tunneling.

GPU-ready

Built on nvcr.io/nvidia/mxnet:24.06-py3 with a GPU reservation in Compose, so accelerated workloads run from the start.

The bricks

Pick your components

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.

Code Server

VS Code in the browser — a full IDE in a tab. Toggle: ENABLE_CODE_SERVER=false

port 38001

JupyterLab

Notebooks plus a full IDE workspace. Toggle: ENABLE_JUPYTER_LAB=false

port 38002

Jupyter Notebook

The classic notebook interface. Toggle: ENABLE_JUPYTER_NOTEBOOK=false

port 38003

ttyd

A full terminal in a browser tab. Toggle: ENABLE_TTYD=false

port 38004

SSH server

Remote shell and tunneling. Always on — there is no toggle to disable it.

port 38000

Conda

Miniconda environment manager, always installed. No port needed.

status always installed

uv

Fast Python package and environment manager, always installed. No port needed.

status always installed
New · pre-installed

Claude Code

Anthropic's agentic coding CLI (@anthropic-ai/claude-code), ready in any terminal. No port, no toggle.

access CLI
New · pre-installed

Codex

OpenAI's coding CLI (@openai/codex), ready in any terminal. No port, no toggle.

access CLI

Also baked into every image

git git-lfs vim nano htop ncdu cmake build-essential g++ ffmpeg wget curl screen
New in 0.2.0

Agentic coding, pre-installed

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.

Claude Code

@anthropic-ai/claude-code

Anthropic's agentic coding CLI — ready to use in any DevLEGO terminal the moment the container boots.

  • Pre-installed; no port and no toggle
  • Auth via ANTHROPIC_API_KEY
  • Optional ANTHROPIC_AUTH_TOKEN and ANTHROPIC_BASE_URL

Codex

@openai/codex

OpenAI's coding CLI — also baked in and available everywhere, alongside Conda, uv, and the rest of your toolchain.

  • Pre-installed; no port and no toggle
  • Auth via OPENAI_API_KEY
  • Optional CODEX_API_KEY for a single codex exec run

Supplying your keys

Provide 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.

ANTHROPIC_API_KEY ANTHROPIC_AUTH_TOKEN ANTHROPIC_BASE_URL OPENAI_API_KEY CODEX_API_KEY
.env
# .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
Quickstart

Up and running in five steps

Copy and paste. Note the Compose V2 syntax — docker compose, two words.

bash
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
Open http://localhost:38001 for Code Server. Default credentials from docker-compose.yml: USERNAME=devlego, PASSWORD=changeme — change these before exposing it.
Prefer to pick your ports first? Use the Builder to generate a ready-to-paste docker run command.
Configuration

Tune it — or make your own brick

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.

docker-compose.yml

Username and password, mounted volumes, the GPU reservation, and the API-key environment passthrough for the AI CLIs.

ports.sh

Host and container port numbers for every service brick — SSH on 38000 through ttyd on 38004.

versions.sh

Pinned tool versions and VS Code extension versions, so your environment is reproducible across rebuilds.

ENABLE_* toggles

The four service bricks default to ON. Set any ENABLE_* variable to false to leave that brick out. SSH always runs.

Build your own brick

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.

  1. Add a script: component/my-tool.sh
  2. Add a COPY line to the Dockerfile
  3. Add a RUN line to execute it during the build
  4. docker compose up -d --build
component/
# 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

Snap your stack together

Pick the bricks, bake the image, and code from anywhere. Start in five commands, or design your container visually in the Builder.