Run AEM as a Cloud Service locally inside a VS Code devcontainer using Docker-in-Docker.
- One-command setup —
npx github:bpauli/devcontainer-aemadds everything to an existing project - Interactive wizard — arrow-key menus, colored output, and animated spinners
- Agentic coding — optional install of Claude Code or Codex inside the devcontainer
- Configurable ports — choose the AEM author port and enable JVM remote debugging
- 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:
npx github:bpauli/devcontainer-aemThe wizard will guide you through:
- Coding agent — pick Claude Code, Codex, or skip
- AEM author port — defaults to
4502 - JVM remote debugging — enable and choose a debug port (default
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.
If you enabled remote debugging during setup, attach your debugger to localhost:5005 (or the port you chose). 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.