A CLI tool that manages local Docker development environments with automatic HTTPS, DNS, database services, and per-project isolation.
- Automatic HTTPS -- Traefik v3 reverse proxy with mkcert-generated certificates trusted by your OS
- Local DNS -- dnsmasq resolves
*.testdomains to localhost, no/etc/hostsediting - Per-project services -- MariaDB, PostgreSQL, Valkey, and Mailpit with version pinning
- Git worktree support -- Each worktree gets its own hostname and TLS certificate
- SSH agent forwarding -- Shared SSH agent container for all projects
- Shell completion -- Bash and Zsh completions installed automatically
- Hook system -- Run custom scripts on
project:upandproject:downlifecycle events - Plugin system -- Extend dde with project-local or global plugins
Prerequisites: Docker and mkcert must be installed.
# macOS
brew tap whatwedo/dde && brew install dde
# Debian/Ubuntu
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
curl -fsSL https://packages.dde.sh/alpine/key.rsa.pub -o /etc/apk/keys/dde.rsa.pub
echo "https://packages.dde.sh/alpine" >> /etc/apk/repositories
apk add dde
# Arch Linux
echo -e '\n[dde]\nServer = https://packages.dde.sh/arch/$arch\nSigLevel = Required DatabaseOptional' | sudo tee -a /etc/pacman.conf
curl -fsSL https://packages.dde.sh/arch/key.gpg | sudo pacman-key --add -
sudo pacman-key --lsign-key "$(curl -fsSL https://packages.dde.sh/arch/key.gpg | gpg --with-colons --import-options show-only --import 2>/dev/null | awk -F: '/^fpr/{print $10; exit}')"
sudo pacman -Sy ddeThen set up the system and start your first project:
dde system:install
cd ~/projects/my-app
dde project:init
dde project:upYour 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 — DDEV requires you to adopt its image ecosystem.
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. There is no custom Dockerfile layer — the same image you deploy to production runs locally.
| dde | DDEV | |
|---|---|---|
| Custom prod images | Works as-is | Requires DDEV image layers |
| Image management | Your Dockerfiles, unchanged | DDEV-managed Dockerfiles |
| Runtime overhead | Thin entrypoint (UID remap) | Full image rebuild per project |
| Language | PHP (single binary via static-php-cli) | Go |
| License | AGPL-3.0 | Apache-2.0 |
| OS | Architecture |
|---|---|
| macOS | x86_64, arm64 |
| Linux | x86_64, arm64 |
Full documentation is available in the docs/ directory:
Getting Started
Guides
Services
- Overview -- MariaDB -- PostgreSQL -- Valkey -- Mailpit -- Traefik -- SSH-Agent -- Custom Versions
Extending
- Hooks -- Plugins -- Service Adapters
Internals
- Auto Layer -- Dev Layer Builder -- Docker Compose Override -- Entrypoint -- Config Loader -- Plugin Loader
Contributing
- Development Setup -- Architecture -- Testing -- Release Process -- Adding a Command -- Adding a Service -- Adding an Adapter
- Testing basic commands and migration from v1 to v2
- Testing database commands and worktree support
- Testing agent integrations
- Notify users when a new release is available
- Add Sentry error tracking
- GitHub Pages documentation site
- Detect Dockerfile or docker-compose changes and prompt the user to update the project
- Arch Linux package
- Windows x64 build and Chocolatey package
This project is licensed under the AGPL-3.0-or-later license.