Installation
See the installation instructions for details, but it's easy:
- macOS:
brew install ddev/ddev/ddev
or justbrew upgrade ddev
. - Linux: Use
apt install ddev
orapt upgrade ddev
see apt/yum installation - Windows and WSL2: Download the ddev_windows_amd64_installer.v1.24.8.exe; you can run it for install or upgrade.
- Consider
ddev delete images
orddev delete images --all
after upgrading to free up disk space used by previous Docker image versions. This does no harm. - Consider
ddev config --auto
to update your projects to current configuration.
NEW: Docker Buildx is now required for Docker Compose
Warning: Docker Compose is configured to build using Bake, but buildx isn't installed
Docker Compose changed its default builder to Bake in v2.37.0.
DDEV v1.24.7 and below used the legacy builder, but v1.24.8 has switched to the new Bake builder, which needs Docker Buildx to be installed.
Solution: Ensure Docker Buildx is installed on your system. Most modern Docker installations include Buildx by default, but if you encounter this error, you may need to update Docker or manually install the Buildx plugin.
Highlights
- Experimental support for add-ons written primarily in PHP
ddev add-on get
can now automatically download add-on dependenciesddev add-on get <your **PRIVATE** GitHub repo>
: Support forDDEV_GITHUB_TOKEN
as a bearer token for GitHub downloads and private GitHub add-ons- Parallel Docker image pulls for faster performance, thanks to @glensc for the idea
- Improved Pantheon provider support,
.ddev/providers/pantheon.yaml
provided by default - Upsun support for multiple apps and multiple databases
- https://docs.ddev.com/ is now the canonical documentation source (replaces https://ddev.readthedocs.io/)
- Dynamic DDEV project sponsorship information if provided once a day on
ddev start
.
Features
ddev debug download-images --all
now pulls all images for all projectsddev heidisql
now works on Linux, thanks to @punkrock34- Support for alternative GitHub token environment variables:
DDEV_GITHUB_TOKEN
(highest priority),GH_TOKEN
(lower priority thanDDEV_GITHUB_TOKEN
),GITHUB_TOKEN
(lowest priority) - New
ddev npx
global command, thanks to @dragonwize host.docker.internal
now available in all containers, not justweb
- Pantheon provider now always pulls current upstream database (instead of a backup) and uses the Terminus rsync plugin for file push, thanks to @danny2p
- Traefik healthcheck extended to validate file routers and detect config errors
- Improved support for
ddev config global --no-bind-mounts
with automated testing - Manual testing with macOS 26 Tahoe (beta) shows no obvious problems; All Docker providers were casually tested.
Bug Fixes
- Fix non-working
ddev-hostname
for Homebrew installations on Linux - Add missing ephemeral port handling to XHGui service, thanks to @AkibaAT
- Allow
.DS_Store
files inddev composer create-project
- Fix
ddev describe
to show exposed ports correctly on new Docker Desktop versions - Fix nginx configuration for Backdrop routes conflicting with directories
- Use stable branch for
magerun
autocompletion script - Don't edit Laravel database config in
.env
when no database is present, thanks to @cyppe - Remove obsolete PHP 8.4
php.ini
configuration, thanks to @kaystrobach for the report - Improve handling of "Failed to copy script" errors in the Windows installer
Internal Improvements
- Major refactoring of internal Docker logic to reduce API calls and improve error handling
- Set 20-minute download timeout for
docker-compose
and retry with doubled timeout on context deadline exceeded - Remove
docker context inspect
calls from eachddev
command and use the Docker CLI API ddev auth ssh
now uses the Docker API instead ofdocker run
and supports stdin- Better reporting of MariaDB/MySQL/PostgreSQL client installation failures; removed download timeouts
- Replace the Docker image
busybox:stable
withddev/ddev-utilities:latest
for internal use
Minor Updates
- PHP 8.3.25 and 8.4.12
- Xdebug 3.4.5
- Docker Compose v2.39.3
- Add SVG support to TYPO3 nginx rewrite rules, thanks to @dhuf
- Disable
innodb_use_native_aio
for MariaDB 10.6 (upstream change) - Forward
*_PROXY
andDDEV_*
environment variables forroot
user inweb
container - Add DDEV version output to
ddev describe
, thanks to @tomasnorre - Add warnings for empty pull/push operations in hosting providers
What's Changed
- docs: Add CLAUDE.md to provide general prompts about behavior by @rfay in https://github.com/ddev/ddev/pull/7467
- fix: Allow .DS_Store when doing ddev composer create-project [skip ci] by @rfay in https://github.com/ddev/ddev/pull/7469
- ci: install
ddev
on Windows before test by @stasadev in https://github.com/ddev/ddev/pull/7471 - refactor: use
compose-spec/compose-go/v2
forfixupComposeYaml
by @stasadev in https://github.com/ddev/ddev/pull/7422 - test: add a no-interaction flag to the install command in ibexa bats file by @rpkoller in https://github.com/ddev/ddev/pull/7479
- docs: note about
Flags
annotation with unknown flags, for [#7451] by @stasadev in https://github.com/ddev/ddev/pull/7478 - feat: update Pantheon provider to use environment variables, fixes [#4760] by @rfay in https://github.com/ddev/ddev/pull/7475
- docs: Fix links pantheon.yaml.example -> pantheon.yaml by @rfay in https://github.com/ddev/ddev/pull/7481
- fix: Attempt to resolve windows installer problems with 'Failed to copy script', fixes [#7485], for [#7477] by @rfay in https://github.com/ddev/ddev/pull/7493
- docs: explain how to make
build
stage indocker-compose.*.yaml
work offline by @stasadev in https://github.com/ddev/ddev/pull/7480 - feat: extend Traefik healthcheck to validate file routers and config errors, fixes [#6463], fixes [#6553] by @stasadev in https://github.com/ddev/ddev/pull/7442
- feat: parallel
docker-compose pull
, improveddev debug download-images
, fixes [#7163] by @stasadev in https://github.com/ddev/ddev/pull/7483 - test: ngrok broke their installation moving to bookworm, fix it by @rfay in https://github.com/ddev/ddev/pull/7501
- build: use ddev/ddev-utilities instead of busybox, fixes [#7499] by @rfay in https://github.com/ddev/ddev/pull/7500
- fix: Update obsolete WSL2 install scripts to reflect new ddev-wsl2 and not needing ddev.exe, fixes [#7464] [skip ci] by @rfay in https://github.com/ddev/ddev/pull/7474
- ci: enforce conventional commits format for PR titles [skip buildkite] by @rfay in https://github.com/ddev/ddev/pull/7513
- docs(claude): enhance CLAUDE.md with GitHub workflow guidance [skip buildkite] by @rfay in https://github.com/ddev/ddev/pull/7497
- docs(wsl): add
wsl --update
command for Windows by @adiati98 in https://github.com/ddev/ddev/pull/7476 - refactor: add svg to rewrite rule for TYPO3 by @dhuf in https://github.com/ddev/ddev/pull/7482
- ci(pr-check): loosen start and middle rules for message [skip ci], for [#7513] by @stasadev in https://github.com/ddev/ddev/pull/7515
- feat(sponsorship): add ability to download sponsorship data and other generic data, for [#6892] by @rfay in https://github.com/ddev/ddev/pull/7502
- chore: revert 3 github copilot commits that it (I) shouldn't have done [skip ci] by @rfay in https://github.com/ddev/ddev/pull/7517
- fix(ddev-hostname): sudo can't find ddev-hostname in linuxbrew, fixes [#7510] by @rfay in https://github.com/ddev/ddev/pull/7512
- chore(localdev): add path management to .envrc [skip ci] by @rfay in https://github.com/ddev/ddev/pull/7516
- fix(traefik): improve router port discovery and optimize YAML writes, fixes ddev/ddev-mongo#24 by @stasadev in https://github.com/ddev/ddev/pull/7507
- build(deps): bump actions/checkout from 4 to 5 by @dependabot[bot] in https://github.com/ddev/ddev/pull/7521
- build(direnv): Make direnv .envrc idempotent so it doesn't do all that work all the time by @rfay in https://github.com/ddev/ddev/pull/7520
- build(mariadb): turn off innodb_use_native_aio for mariadb:10.6 by @rfay in https://github.com/ddev/ddev/pull/7525
- refactor: replace
docker context
withdocker/cli
library, fixes [#5862], fixes [#6557] by @stasadev in https://github.com/ddev/ddev/pull/7189 - fix(testddevexportdb): postgres:14 output dump statement was suddenly more than 80 characters from end by @rfay in https://github.com/ddev/ddev/pull/7528
- feat: replace
docker run
inddev auth ssh
with Docker API and accept stdin by @stasadev in https://github.com/ddev/ddev/pull/7511 - docs: enhance CLAUDE.md development workflow documentation [skip ci] by @rfay in https://github.com/ddev/ddev/pull/7532
- feat(tools): consolidate development tool installations into unified script [skip ci] by @rfay in https://github.com/ddev/ddev/pull/7530
- docs(troubleshooting): add more links to mutagen troubleshooting by @rfay in https://github.com/ddev/ddev/pull/7529
- fix: make ddev describe work correctly with new Docker Desktop, for docker/for-mac#7742 by @rfay in https://github.com/ddev/ddev/pull/7531
- build: add optional notarization skip via DISABLE_NOTARIZATION variable [skip ci] by @rfay in https://github.com/ddev/ddev/pull/7534
- build(webserver): add
*_PROXY
andDDEV_*
env for sudo; testing docs, fixes [#7413] by @stasadev in https://github.com/ddev/ddev/pull/7535 - refactor(docker): suppress any output (stdout, stderr) from docker/cli, for [#7189] by @stasadev in https://github.com/ddev/ddev/pull/7536
- feat: Upsun support for PLATFORM_APP and PLATFORM_PRIMARY_RELATIONSHIP by @stasadev in https://github.com/ddev/ddev/pull/7437
- feat: add Linux support for heidisql command by @punkrock34 in https://github.com/ddev/ddev/pull/7399
- fix(backdrop): Fix nginx config for routes conflicting with directories, fixes [#7495] by @rfay in https://github.com/ddev/ddev/pull/7496
- fix(pantheon): update Pantheon database pull to get fresh DB and file push to be CMS-agnostic, fixes [#5215], fixes [#4760] by @danny2p in https://github.com/ddev/ddev/pull/7486
- docs: fiddle with sponsorship title [skip ci] by @rfay in https://github.com/ddev/ddev/pull/7540
- fix: quote DDEV_PRIMARY_URL expansion in launch script to handle empty values, fixes [#7424] by @rfay in https://github.com/ddev/ddev/pull/7548
- fix: add mutagen sync flush after XHProf enable to prevent intermittent test failures by @rfay in https://github.com/ddev/ddev/pull/7543
- chore(deps): bump docker-compose to v2.39.2, remove
COMPOSE_BAKE=false
by @stasadev in https://github.com/ddev/ddev/pull/7545 - feat: add ddev version to ddev describe command, fixes [#7398] by @tomasnorre in https://github.com/ddev/ddev/pull/7541
- docs: add sponsorship banner to documentation, for [#6892] by @rfay in https://github.com/ddev/ddev/pull/7551
- docs: Use docs.ddev.com instead of ddev.readthedocs.io by @rfay in https://github.com/ddev/ddev/pull/7552
- feat: support add-ons written primarily in PHP, fixes [#7316] by @rfay in https://github.com/ddev/ddev/pull/7523
- docs: Fix blog link in main nav by @mxr576 in https://github.com/ddev/ddev/pull/7566
- test: jq is not available on Windows, use docker run -i ddev/ddev-utilities by @rfay in https://github.com/ddev/ddev/pull/7564
- test: Skip TestComposerCreateProjectCmd on Windows where it hangs by @rfay in https://github.com/ddev/ddev/pull/7565
- fix(magerun): use stable branch for autocompletion by @stasadev in https://github.com/ddev/ddev/pull/7567
- test(buildkite): do better cleaning up volumes before running test by @rfay in https://github.com/ddev/ddev/pull/7568
- test(buildkite): Minor fixup for buildkite timeout by @rfay in https://github.com/ddev/ddev/pull/7571
- chore(mkdocs): disable privacy plugin for local builds, for [#6027] [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/7569
- build(deps): bump 1password/load-secrets-action from 2 to 3 [skip buildkite] by @dependabot[bot] in https://github.com/ddev/ddev/pull/7561
- build(dbserver): switch to
bitnamilegacy/mysql
for MySQL 8.0 and 8.4, for [#7470] by @stasadev in https://github.com/ddev/ddev/pull/7570 - build: go back to stable spf/cobra, reverting [#7445], bump go-viper/mapstructure, replaces [#7547] by @rfay in https://github.com/ddev/ddev/pull/7580
- fix: add missing ephemeral port handling to xhgui service, fixes [#7557] by @AkibaAT in https://github.com/ddev/ddev/pull/7560
- fix(provider): add warnings for empty pull/push, fixes [#7576] by @stasadev in https://github.com/ddev/ddev/pull/7578
- fix: report MariaDB/MySQL/PostgreSQL client install failures and refactor timeout logic by @rfay in https://github.com/ddev/ddev/pull/7542
- docs(provider): soften language about use of provider push by @rfay in https://github.com/ddev/ddev/pull/7581
- fix: cache
WarningOnce
, reduceNewApp
calls, handleGetDockerClient
errors, for [#7472] by @stasadev in https://github.com/ddev/ddev/pull/7574 - fix: set 20m download timeout and retry with doubled timeout on "context deadline exceeded", fixes [#7298] by @stasadev in https://github.com/ddev/ddev/pull/7575
- build: gitignore/CLAUDE.md nitpicks [skip ci] by @rfay in https://github.com/ddev/ddev/pull/7588
- refactor: add dockerManager singleton, split dockerutils.go, add IsWindows/IsMacOS/IsLinux by @stasadev in https://github.com/ddev/ddev/pull/7587
- test(buildkite): buildkite can take a few minutes to pull new images [skip ci] by @rfay in https://github.com/ddev/ddev/pull/7596
- build(deps): bump actions/setup-go from 5 to 6 by @dependabot[bot] in https://github.com/ddev/ddev/pull/7602
- build(deps): bump actions/setup-python from 5.6.0 to 6.0.0 by @dependabot[bot] in https://github.com/ddev/ddev/pull/7601
- build(deps): bump actions/github-script from 7 to 8 by @dependabot[bot] in https://github.com/ddev/ddev/pull/7600
- feat: provide
host.docker.internal
for all services, fixes [#7537] by @stasadev in https://github.com/ddev/ddev/pull/7572 - test(xhgui): add more retries for GetLocalHTTPResponse, for [#7543] by @stasadev in https://github.com/ddev/ddev/pull/7606
- feat(add-ons): add-on dependencies should be automatically downloaded, fixes [#5337] by @rfay in https://github.com/ddev/ddev/pull/7586
- test: re-enable no-bind-mounts test since it's used some places [skip buildkite] by @rfay in https://github.com/ddev/ddev/pull/7591
- fix(laravel): don't edit database config in
.env
when there's no database by @cyppe in https://github.com/ddev/ddev/pull/7584 - feat: use DDEV_GITHUB_TOKEN as bearer token for downloads from GitHub, fixes [#5285] by @stasadev in https://github.com/ddev/ddev/pull/7598
- refactor(add-ons): dependencies in add-ons must be canonical, can't be relative or absolute by @rfay in https://github.com/ddev/ddev/pull/7613
- docs: fix typo in documentation by @hockdudu in https://github.com/ddev/ddev/pull/7618
- fix(ddev-php-base): Remove php8.4-obsolete config, fixes [#7616] by @rfay in https://github.com/ddev/ddev/pull/7617
- docs: remove Prerequisite section by @gitressa in https://github.com/ddev/ddev/pull/7621
- docs: clarify comments in the Drupal 10 and 11 quickstarts, fixes [#7619] by @brookemahoney in https://github.com/ddev/ddev/pull/7620
- feat: add
ddev npx
command by @dragonwize in https://github.com/ddev/ddev/pull/7599 - docs: offer help on out-of-disk-space warning, fixes [#7592] by @rfay in https://github.com/ddev/ddev/pull/7622
- build: bump
docker-compose
to v2.39.3 by @stasadev in https://github.com/ddev/ddev/pull/7623 - docs: add GitHub Copilot instructions, fixes [#7626] by @Copilot in https://github.com/ddev/ddev/pull/7627
- build: bump Docker images to v1.24.8 for release, for [#7526] by @stasadev in https://github.com/ddev/ddev/pull/7628
- fix: don't show timeout suggestion for ddev-router and ddev-ssh-agent on
ddev start
by @stasadev in https://github.com/ddev/ddev/pull/7633 - chore: update
schema.json
,global_config.yaml
,config.yaml
templates by @stasadev in https://github.com/ddev/ddev/pull/7634 - feat: improve
ddev debug test
by @stasadev in https://github.com/ddev/ddev/pull/7636
New Contributors
- @adiati98 made their first contribution in https://github.com/ddev/ddev/pull/7476
- @dhuf made their first contribution in https://github.com/ddev/ddev/pull/7482
- @punkrock34 made their first contribution in https://github.com/ddev/ddev/pull/7399
- @danny2p made their first contribution in https://github.com/ddev/ddev/pull/7486
- @cyppe made their first contribution in https://github.com/ddev/ddev/pull/7584
- @hockdudu made their first contribution in https://github.com/ddev/ddev/pull/7618
- @brookemahoney made their first contribution in https://github.com/ddev/ddev/pull/7620
- @dragonwize made their first contribution in https://github.com/ddev/ddev/pull/7599
- @Copilot made their first contribution in https://github.com/ddev/ddev/pull/7627
Full Changelog: https://github.com/ddev/ddev/compare/v1.24.7...v1.24.8