Skip to content

dde — Docker Development Environment

Your existing Docker images work as-is. No custom Dockerfile layers needed.
  • Automatic HTTPS — Traefik v3 reverse proxy with mkcert-generated certificates trusted by your OS. No browser warnings.
  • Local DNS — dnsmasq resolves *.test domains to localhost. No /etc/hosts editing required.
  • Per-project services — MariaDB, PostgreSQL, Valkey, and Mailpit with version pinning — isolated per project.
  • Git worktree support — Each worktree gets its own hostname and TLS certificate for parallel feature development.
  • SSH agent forwarding — A shared SSH agent container makes your host keys available inside all containers.
  • Hook system — Run custom scripts on project:up and project:down lifecycle events.
  • Plugin system — Extend dde with project-local or global plugins to add custom commands.
  • Shell completion — Bash and Zsh completions installed automatically via dde system:install.

Prerequisites: Docker and mkcert must be installed.

macOS

Terminal window
brew tap whatwedo/dde && brew install dde

Debian/Ubuntu

Terminal window
curl -fsSL https://packages.dde.sh/apt/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/dde.gpg
echo "deb [signed-by=/usr/share/keyrings/dde.gpg] https://packages.dde.sh/apt stable main" | sudo tee /etc/apt/sources.list.d/dde.list
sudo apt update && sudo apt install dde

Alpine

Terminal window
curl -fsSL https://packages.dde.sh/alpine/key.rsa.pub -o /etc/apk/keys/dde.rsa.pub
echo "https://packages.dde.sh/alpine/main" >> /etc/apk/repositories
apk add dde

Then set up the system and initialize your first project:

Terminal window
dde system:install # configure Traefik, dnsmasq, mkcert
cd ~/projects/my-app
dde project:init # create .dde/config.yml
dde project:up # start containers

Your application is now available at https://my-app.test with a trusted TLS certificate.

DDEV is the most mature tool in this space — well-documented, actively maintained, and great for standard setups. However, DDEV wraps every web image in its own Dockerfile layers (user setup, PHP-FPM config, Xdebug, Mailpit). This means you can’t run your production images directly.

dde takes a different approach: your existing Docker images work as-is. dde adds a thin runtime layer that remaps the container user’s UID/GID to match the host, and uses service adapters (nginx, php-fpm, apache) to reconfigure processes at startup. The same image you deploy to production runs locally.

ddeDDEV
Custom prod imagesWorks as-isRequires DDEV image layers
Image managementYour Dockerfiles, unchangedDDEV-managed Dockerfiles
Runtime overheadThin entrypoint (UID remap)Full image rebuild per project
LanguagePHP (single binary via static-php-cli)Go
LicenseAGPL-3.0Apache-2.0
OSArchitecture
macOSx86_64, arm64
Linuxx86_64, arm64