Installation
See the installation instructions for details, but it's easy:
- macOS:
brew install ddev/ddev/ddevor justbrew upgrade ddev. - Linux: Use
sudo apt-get update && sudo apt-get install ddev, see apt/yum installation - Windows and WSL2: Download the Windows Installer; you can run it for install or upgrade.
⚠️ Traditional Windows users (not WSL2): If needed, the installer will prompt you to uninstall the previous system-wide installation to avoid conflicts with the new per-user installation. - Consider
ddev delete imagesorddev delete images --allafter upgrading to free up disk space used by previous Docker image versions. This does no harm. - Consider
ddev config --autoto update your projects to current configuration.
Highlights
- Faster
ddev start: Reduced fresh-router healthcheck wait - New project types and quickstarts: 3 new project types (
wp-bedrock,asterios,joomla) and 2 new quickstarts (Tempest, October CMS) - Auto-start on command: DDEV now automatically starts stopped projects when you run
ddev exec,ddev ssh,ddev share,ddev xhgui,ddev pull,ddev push, orddev snapshot restore - New diagnostic commands:
ddev utility port-diagnoseto identify port conflicts,ddev utility check-custom-configto detect unexpected configuration,ddev utility tls-diagnoseto identify TLS/SSL problems with DDEV projects.
Quickstarts
- Add
wp-bedrockproject type, thanks to @jonesrussell - Add
asteriosproject type, thanks to @asteriosphp - Add
joomlaproject type, thanks to @renekreijveld - Add Tempest quickstart
- Add October CMS quickstart, thanks to @daftspunk
- Update Contao quickstart to use 5.7 LTS, thanks to @fkaminski
- Update Laravel quickstart to latest version, thanks to @tyler36
- Update Moodle quickstart to set admin email during installation
Features
- Support bare variable names in
web_environmentfor host environment passthrough - Add project path to the interactive dashboard, thanks to @yanniboi
- Add global
omit_snapshot_on_deletesetting, thanks to @marklabrecque-ab - Add
--projectflag toddev exec, thanks to @penyaskito - Use runtime environment variables in
wp-config-ddev.phpfor WordPress, thanks to @jonesrussell - Add support for
symfony_mailer2.x in Drupal config, thanks to @hchonov - Display project info (name and environment) when calling
ddev pull/ddev push, thanks to @mariano-dagostino - Support
virtioproxyWSL2 networking mode - Support
"1"/"0"forDDEV_*environment variables (e.g.DDEV_DEBUG=1), thanks to @deviantintegral - Automatically set
com.ddev.*labels for Docker images, containers, and networks - Add
aggregate_gc_threshold=0to Drupal 12 config, thanks to @rpkoller
Bug Fixes
- Detect custom configuration files and show unexpected configuration on
ddev start - Prevent Path Traversal (ZipSlip), thanks to @SnailSploit
- Normalize
PHP_IDE_CONFIG(PhpStorm) for uppercase project names - Reduce file permissions for system directories
/usr/binand/usr/sbininside the container, thanks to @AkibaAT - Ensure
ddev-ssh-agentandddev-routerare up to date on DDEV upgrade - Respect
webimagefor all use cases; don't pull the default web image when it's not in use - Simplify
ddev composer create-projectby removing thecomposer updatestep - Add timeout to
yarn config setinstart.shfor theddev-webserverDocker image - Fix malformed
WSLENVon Windows install/uninstall
Internal Improvements
- Implement config model using Viper, thanks to @agviu
- Improve testing in GoLand by prebuilding the
ddevbinary, thanks to @jonesrussell - Add missing
php8.5-memcachedfor ARM64 toddev-webserverDocker image - Use newer deb822 format (
*.sourcesinstead of*.list) for Docker and DDEV repositories (Linux and WSL2)
Minor Updates
- PHP 8.4.20 and 8.5.5
- Docker Compose v5.1.3
- Remove obsolete
ddev sequelprocommand and vestiges in documentation
What's Changed
- fix(commands): use /usr/bin/env bash in web console command by @tyler36 in #8182
- build(deps): bump actions/upload-artifact from 6 to 7 by @dependabot[bot] in #8193
- fix(composer): ddev composer create-project can ignore .devcontainer [skip buildkite] by @rfay in #8192
- docs(buildkite): Minor fixups to WSL2 buildkite setup by @rfay in #8172
- build(deps): bump goreleaser/goreleaser-action from 6 to 7 by @dependabot[bot] in #8175
- docs(quickstart): Use mkdir -p and more descriptive names [skip buildkite] by @rfay in #8200
- docs: suggest trivial project in troubleshooting by @rfay in #8199
- build(deps): bump docker/login-action from 3 to 4 (#8211) [skip ci] by @dependabot[bot] in #8211
- build(deps): bump docker/setup-buildx-action from 3 to 4 by @dependabot[bot] in #8210
- docs: clarify usage for TUI by @stasadev in #8203
- test(quickstart): pause d12 bats test in github actions by @rpkoller in #8217
- chore(docs): remove Plausible [skip ci] by @stasadev in #8228
- fix(quickstart): do not use gunicorn for wagtail by @stasadev in #8229
- feat: support bare variable names in web_environment for host env passthrough by @rfay in #8209
- fix(buildkite): use proper check for skip by @stasadev in #8231
- build: update go deps, vendor docker-compose SDK, for #8234 by @stasadev in #8198
- style: Fix minor typo: skiped → skipped by @penyaskito in #8243
- chore(quickstart): Make quickstart drupal.bats drush launch usage less fragile by @rfay in #8247
- fix: prevent path traversal (ZipSlip) in Untar and Unzip by @rfay in #8213
- fix: lowercase PHP_IDE_CONFIG serverName for uppercase project names, fixes #8225 (#8248) [skip ci] by @rfay in #8248
- docs(sharing): Improve ngrok setup instructions, fixes #8101 (#8205) [skip ci] by @samcrichard in #8205
- refactor: bump Laravel to latest version by @tyler36 in #8238
- chore(go): Use go fix to update golang usage, fixes #7963 by @rfay in #8249
- feat(tui): Added ddev project path to TUI project browser, for #8184 by @yanniboi in #8185
- build: update go deps, vendor viper, for #8181 by @dependabot[bot] in #8237
- fix: reduce world writeable directories and files, fixes #8194 by @AkibaAT in #8195
- feat: add aggregate_gc_threshold of 0 to drupal12 settings.ddev.php (#8215) [skip ci] by @rpkoller in #8215
- build(pecl): add php8.5-memcached for ARM64, fixes ddev/ddev-memcached#20 by @stasadev in #8252
- docs: document Mailpit
plus-addressauto-tagging and how to disable it (#8222) [skip ci] by @maks-oleksyuk in #8222 - fix: use Lstat in PurgeDirectory to handle symlinks without following them by @rfay in #8254
- build: bump 1password/load-secrets-action from 3 to 4 (#8266) [skip ci] by @dependabot[bot] in #8266
- fix(test): check for GitHub token in TestAddonGetCircularDependencies by @stasadev in #8257
- fix(docker): use ContainerInspect polling instead of ContainerWait to avoid hangs by @stasadev in #8265
- fix: bump action-linkspector from v1.3.5 to v1.4.0 to resolve setup-node@v4 warning [skip ci] by @rfay in #8269
- fix: use deb822 format for DDEV and Docker apt repositories, fixes #8232 (#8233) [skip ci] by @stasadev in #8233
- feat(autostart): automatically start projects on command when project stopped, fixes #8245 by @rfay in #8258
- test(lagoon): use new amazee.io testing environment for Lagoon integration (#8270) [skip ci] by @rocketeerbkw in #8270
- build(arm64): php8.5-memcached from repos, refactor ddev-webserver tests, for #8252 by @stasadev in #8268
- test(webserver): wait for FPM reload to settle after xdebug disable (#8272) [skip ci] by @stasadev in #8272
- refactor: implement config model using viper, fixes #5763 (#8181) [skip ci] by @agviu in #8181
- feat(cmd):
ddev execaccepts a--projectflag, fixes #8241 by @penyaskito in #8244 - feat(wordpress): use runtime DDEV_PRIMARY_URL for WP_HOME, fixes #8098 by @jonesrussell in #8176
- chore(drupal): add support for symfony_mailer 2.x to drupal settings.ddev.php by @hchonov in #8274
- test(wsl2): add cleanup for ddev/docker apt sources leftovers, for #8233 by @stasadev in #8275
- feat: Display project info (name and environment) when calling ddev pull/push, fixes #8201 by @mariano-dagostino in #8202
- fix(config): detect custom files, add
ddev utility check-custom-configby @stasadev in #8218 - fix(docker): use ddev-utilities image for volume/utility RunSimpleContainer calls to fix Lima/Colima 10-30m hangs by @rfay in #8271
- test(traefik): skip TestCustomGlobalConfig on Rancher Desktop, fixes #8167 (#8283) [skip ci] by @rfay in #8283
- fix(docker): use ddev-utilities for remaining RunSimpleContainer calls (#8282) [skip ci] by @rfay in #8282
- fix(mutagen): tolerate transient staging files during volume chown by @rfay in #8281
- refactor: detect custom files in
ddev utility diagnoseby @stasadev in #8279 - docs: Update Contao Quickstart Recipe (#8278) [skip ci] by @fkaminski in #8278
- docs: improve AI agent instructions and dev workflow guidance [skip ci] (#8284) [skip ci] by @rfay in #8284
- fix(addons): sleep 500ms after creating config files on Lima/Colima/Rancher Desktop (#8288) [skip ci] by @rfay in #8288
- chore: remove obsolete commands, fixes #8291 (#8292) [skip ci] by @stasadev in #8292
- fix: normalize path separators in check-custom-config output on Windows by @rfay in #8286
- docs: add october cms to quickstart instructions (#8285) [skip ci] by @daftspunk in #8285
- test: fail fast when command tests would use PATH ddev by @jonesrussell in #8280
- build(ci): pin textlint@15.5.2 by @stasadev in #8300
- refactor(wordpress): make wp-config-ddev.php a static asset, fixes #8098 by @rfay in #8287
- docs: rewrite Windows installation instructions, fixes #7996, fixes #7703 (#8290) [skip ci] by @rfay in #8290
- docs(quickstart): add Tempest (#8299) [skip ci] by @stasadev in #8299
- feat: support "virtioproxy" WSL2 networking mode, fixes #8220 by @rfay in #8262
- build(ci): remove pin for textlint, for #8300 (#8303) [skip ci] by @stasadev in #8303
- fix: ensure up-to-date images for ddev-ssh-agent and ddev-router (#8305) [skip ci] by @stasadev in #8305
- fix(webserver): always use webimage from app config (#8304) [skip ci] by @stasadev in #8304
- feat: add global omit_snapshot_on_delete setting, fixes #8263 (#8264) [skiop ci] by @marklabrecque-ab in #8264
- feat: support "1" for environment variables by @deviantintegral in #8246
- chore: add link to blog about buildx requirement, for #8234 (#8310) [skip ci] by @stasadev in #8310
- build: bump actions/github-script from 8 to 9 by @dependabot[bot] in #8314
- fix(composer): remove
composer updatefrom create-project, for #7864 (#8315) [skip ci] by @stasadev in #8315 - fix(webserver): add timeout to
yarn config setin start.sh (#8309) [skip ci] by @stasadev in #8309 - refactor(debug): simplify RunSimpleContainer reporting, for #8271 (#8311) [skip ci] by @stasadev in #8311
- feat: add
ddev utility port-diagnosecommand to identify port conflicts, fixes #8085 (#8260) [skip ci] by @rfay in #8260 - feat: add wp-bedrock project type, fixes #8179 by @jonesrussell in #8219
- feat(docker): set ddev labels for images, containers, networks, fixes #7389 by @stasadev in #8312
- refactor(debug): improve reporting for RunSimpleContainer timeout, for #8311 by @stasadev in #8317
- perf(router): reduce fresh-router healthcheck wait, refs #8096 by @rfay in #8316
- test: update moodle quickstart by @stasadev in #8319
- fix(test): use local apt repo with fake packages to avoid flakiness in TestExtraPackages by @stasadev in #8323
- feat(asterios): Add Asterios project type (#8313) [skip ci] by @asteriosphp in #8313
- feat: add ddev utility tls-diagnose command, fixes #8224 (#8259) [skip ci] by @rfay in #8259
- fix(installer): fix malformed WSLENV on Windows install/uninstall, fixes #8324 (#8325) [skip ci] by @rfay in #8325
- fix(traefik): don't mark README.txt as stale (#8329) [skip ci] by @stasadev in #8329
- build(deps): bump go.mod and docker-compose to v5.1.3 by @stasadev in #8318
- test(wsl): mkcert installation on Windows too hard for WSL by @rfay in #8333
- refactor: remove obsolete
ddev sequelprocommand (#8331) [skip ci] by @rfay in #8331 - feat: add joomla project type by @renekreijveld in #8226
- build(docker): bump images to v1.25.2 for release, fixes #8320 by @stasadev in #8332
- build(ci): remove -failfast, support MAKE_TARGET/TESTPKG/TESTFILE for targeted test runs, increase timeout to 6h by @rfay in #8336
- ci: improve Buildkite test result visibility for FAIL/PASS/SKIP (#8338) [skip ci] by @rfay in #8338
- test(wsl): fix CAROOT propagation for buildkite-agent on WSL2 by @rfay in #8334
- chore(assets): add
.ddev/addon-metadata/README.txt(#8343) [skip ci] by @stasadev in #8343 - fix: flush Mutagen before container chmod and after settings file write, fixes #8340 (#8341) [skip ci] by @rfay in #8341
- fix: warn instead of silently ignoring RemoveProjectInfo error, for #8339 (#8342) [skip ci] by @rfay in #8342
- fix(installer): prevent CI timeout in WSL2 Docker CE installer test by @rfay in #8337
New Contributors
- @samcrichard made their first contribution in #8205
- @hchonov made their first contribution in #8274
- @mariano-dagostino made their first contribution in #8202
- @daftspunk made their first contribution in #8285
- @marklabrecque-ab made their first contribution in #8264
- @asteriosphp made their first contribution in #8313
- @renekreijveld made their first contribution in #8226
Full Changelog: v1.25.1...v1.25.2