Skip to content

Migration from v1 to v2

dde v2 is a complete rewrite. v1 and v2 cannot run side by side — you must fully remove v1 before installing v2.

Componentv1v2
LanguageBashPHP 8.5 + static-php-cli
Reverse proxynginx-proxyTraefik v3
TLS certificatesCustom openssl CAmkcert (OS-trusted root CA)
Mail catcherMailCrabMailpit
ConfigurationShell variablesYAML (~/.dde/config.yml, .dde/config.yml)
Worktree supportNoneAutomatic hostname per worktree
Plugin systemNone.dde/plugins/ directory
Global configNone~/.dde/config.yml

Stop every running dde project. To remove only dde-managed containers:

Terminal window
docker rm -f $(docker ps -a --filter "name=dde-" -q)

Warning: Do not use docker rm -f $(docker ps -aq) as this removes all containers on your machine, including those unrelated to dde.

Terminal window
dde system:destroy

Remove the dde v1 aliases and autocomplete from your ~/.zshrc or ~/.bashrc.

Terminal window
rm -rf ~/dde

Warning: This deletes all database contents managed by v1. Make backups first if needed.

Install the v2 binary following the installation guide, then run the system setup:

Terminal window
dde system:install

Navigate to each project and initialize it for v2:

Terminal window
cd ~/projects/my-app
dde project:init
dde project:up

project:init creates the .dde/ directory, detects your docker-compose.yml, adds the dde network and Traefik labels, and configures SSH agent volume mounts.

Open https://my-app.test in your browser to verify.

v1 command/featurev2 equivalentNotes
dde project fix-permissionsRemovedNo longer needed (automatic UID/GID mapping)
dde project exec-rootdde project:exec --rootNow a flag on project:exec
VIRTUAL_HOST env varTraefik labels (auto-generated)Set automatically by project:init
Custom openssl CAmkcert root CAInstalled via system:install
MailCrabMailpitDifferent web UI, same SMTP interface
nginx-proxyTraefik v3Routing via labels instead of env vars