Run AEM as a Cloud Service locally inside a VS Code devcontainer using Docker-in-Docker.
- One-command setup —
curl | bashadds everything to an existing project (no Node.js required) - Interactive wizard — numbered menus and colored output
- Agentic coding — optional install of Claude Code or Codex inside the devcontainer
- Configurable ports — choose the AEM author port and JVM debug port
- Docker-in-Docker — AEM runs in its own container with a persistent
crx-quickstartvolume - Maven included — full Maven build toolchain available out of the box
- VS Code with the Dev Containers extension
- Docker Desktop
Add the AEM devcontainer to an existing project:
curl -fsSL https://raw.githubusercontent.com/bpauli/devcontainer-aem/main/install.sh | bashOr download and inspect first:
curl -fsSL https://raw.githubusercontent.com/bpauli/devcontainer-aem/main/install.sh -o install.sh
bash install.shThe wizard will guide you through:
- Coding agent — pick Claude Code, Codex, or skip
- AEM author port — defaults to
4502 - JVM debug port — defaults to
5005
Then follow the steps below starting from Download the AEM SDK.
Download the latest AEM SDK from the Software Distribution portal (requires Adobe ID with AEM as a Cloud Service access).
Navigate to AEM as a Cloud Service and download the latest AEM SDK zip file.
See Set up Local AEM Runtime for details.
Unzip the downloaded SDK zip:
unzip aem-sdk-2026.2.24288.20260204T121510Z-260100.zipThis produces a quickstart JAR like aem-sdk-quickstart-2026.2.24288.20260204T121510Z-260100.jar. Rename it:
mv aem-sdk-quickstart-*.jar aem-sdk-quickstart.jarThe file aem-sdk-quickstart.jar must be in the project root before building.
cp .env.example .envEdit .env if needed (defaults work for most setups).
./build.shOpen this folder in VS Code and reopen in the devcontainer when prompted. AEM will start automatically and be available at http://localhost:4502 (or the port you chose during setup).
AEM starts automatically when the devcontainer opens. To restart manually:
.devcontainer/start-aem.sh.devcontainer/stop-aem.shTo stop and clear all AEM data:
.devcontainer/stop-aem.sh --clearAEM logs are available at .devcontainer/crx-quickstart/logs/ via the volume mount.
JVM remote debugging is always enabled. Attach your debugger to localhost:5005 (or the port you chose during setup). The JVM starts with suspend=n, so AEM does not wait for a debugger to connect.
The installer can pre-configure the devcontainer to include an AI coding agent:
| Agent | What gets installed |
|---|---|
| Claude Code | npm install -g @anthropic-ai/claude-code — Anthropic's CLI for autonomous coding |
| Codex | npm install -g @openai/codex — OpenAI's coding agent CLI |
The selected agent is installed automatically via postCreateCommand when the devcontainer starts. You will need to provide your own API key inside the container.