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 ⚠️ Linux apt/yum users: packages are now served from Cloudsmith (packages.ddev.com). Your existing Gemfury (pkg.ddev.com) setup keeps working, but please re-run the Linux installation steps to switch over. - 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
- Database seeding and reset:
ddev start --seed-snapshot=<name-or-path>fills a new database from any snapshot, andddev start --reset-databasedeletes the current database and starts fresh, see Snapshots and Database Seeding below - MySQL 9.7 LTS support, and MySQL 8.0/8.4 now build from Docker Hardened Images (
dhi.io/mysql) instead ofbitnamilegacy/mysql, which gets no updates - Env files:
.env.localfor values you don't want in Git, several files per service separated by a label, and global files that apply to every project, see Environment Variables - Set things once for every project: global Dockerfiles in
~/.ddev/web-build/and~/.ddev/db-build/, and global env files in~/.ddev/.env*, see Global Configuration below - apt/rpm packages are now published to Cloudsmith (
packages.ddev.com) as well as Gemfury, and the yum repo now verifies package signatures, which the Gemfury one never did. Gemfury (pkg.ddev.com) is still supported but will be retired eventually; see the Linux note above to switch over
Snapshots and Database Seeding
ddev start --seed-snapshotfills a new database from a snapshot in.ddev/db_snapshots, or from a path to one anywhere else on your machine. A snapshot outside the project is read where it is instead of being copied, so a multi-GB file is not duplicated. A snapshot namedseedis used automatically, with no flag. Works for MariaDB, MySQL, and PostgreSQLddev start --reset-databasedeletes the database and starts fresh. It takes a snapshot first, using the database version that created the data, so this also works when you already changeddatabase:in your config.ddev config --database=now warns instead of failing, andddev deleteno longer refuses to work on a project whose data came from a different database serverddev snapshot restore --forcerestores a snapshot made by a different version of the same database serverddev snapshot --listshows each snapshot's size and database versionddev snapshot restoreandddev snapshot --listalso see snapshots from other Git worktrees of the same repository, so a database doesn't have to be copied between worktrees by hand- Snapshots and the database seed can skip compression with
--uncompressed: more disk space, faster restore. Thebase_dbseed also reads zstd now, not only gzip, which is much faster for a customdbimagewith a large database built into it, thanks to @weitzman
Global Configuration
These apply to every project on your machine, so you set them once instead of in each project.
- New global Dockerfiles in
~/.ddev/web-build/and~/.ddev/db-build/add the same image changes to every project - CA certificates, system tools, extra apt packages. If a project has a file with the same name in its own.ddev/web-build/, the project file is used, thanks to @rmott-littler - New global env files
~/.ddev/.envand~/.ddev/.env.<service>set variables for every project. This is the only way to set a variable globally for a container other thanweb, sinceweb_environmentonly reachesweb. If a project sets the same variable, the project value is used. Write these files withddev dotenv global set - Add-on install actions now see
.ddev/.envand the global~/.ddev/.env*files, not only.ddev/.env.<addon>. If you set aDDEV_*variable in.ddev/.env, that value is used there. A.ddev/.env.<service>.<label>file is also passed into that service's container now; before, it was only used to fill in variables in your docker-compose files
Features
- Two new project types: MODX Revolution 2.x/3.x, thanks to @casparml, and Maho, thanks to @fballiano
- Shopware 6 projects get
shopware-cliin the web image, plusddev admin-watchandddev storefront-watchwith the ports they need, so the ddev-shopware-cli add-on isn't needed, thanks to @vanWittlaer - New
ddev add-on updatechecks installed add-ons against their latest GitHub release and updates the outdated ones, with--dry-runto see what would change - New
ddev utility download-ddevfetches theddevandddev-hostnamebinaries for a PR, branch, commit, release tag, latest stable, ormainHEAD, without touching your installed DDEV - New
ddev utility delete-volumeremoves one of the project's Docker volumes by name or from an interactive list, for add-ons like ddev-solr that create their own ddev launch --print-urlandDDEV_LAUNCH_PRINT_URL=true ddev launchprint the URL instead of opening a browser, for SSH, containers, and CI, thanks to @steffenmaechtel- New
ddev tableprohost command for the TablePro database client on macOS, thanks to @datlechin - New
nodejs_rootletsnodejs_version: auto/engineread the version file from a subdirectory such asweb/themes/custom/mytheme. Both now require that file to exist; before, if it was missing, DDEV installed its default version without telling you, thanks to @dpacassi - The
dbimageconfig option works again after a long absence, mirroringwebimage, along withddev config --db-image/--db-image-default - If you pin a custom
webimageordbimage,ddev startwarns you when that image was built from an older DDEV image than this version expects, instead of failing later in a way that gives no hint why. Official images now record the DDEV version they were built for, so the warning starts working after you rebuild your own image, thanks to @weitzman ddev sshandddev execpass yourTERMandCOLORTERMinto interactive sessions, so you get more than 16 colors, thanks to @wazumddev startwarns when DDEV itself is an unreleased build from a PR or a local branch, andddev versionshows where it came from- Drupal
settings.ddev.phpconfiguressymfony_mailer_litethe way it already configuredsymfony_mailer, thanks to @mxr576 - The FAQ explains how to move from Homebrew to a specific DDEV version, thanks to @joachim-n
Bug Fixes for Regressions from v1.25.3
- Project image builds are fast again. Permissions on the Node.js directory were being changed recursively on every build, and now they are set once when the image is built
- Add-ons and apps that write log files straight into
/var/logcan do that again, after the directory was locked down to root only - A site that generates
/robots.txtitself works again, including Drupal's RobotsTxt module. An nginx rule was answering/robots.txtbefore your site could, and it is now removed - Projects that pin the web service to a specific platform, like
platform: linux/amd64on an Apple Silicon Mac, start again - Orphan containers get removed again, so Docker Compose stops warning about them
Bug Fixes
ddev wpuses the path from your project's ownwp-cli.ymlagain, and only falls back to the docroot when that file doesn't set one, which is what the docs always said. Since v1.24.5 it always added--path=$DDEV_DOCROOT, which broke Bedrock and any layout where WordPress isn't in the docroot- Running
ddevin a subdirectory that has its own.ddev/config.yaml, like a Drupal contrib module or a Git submodule, keeps using the outer project and tells you which one it chose. Before, it switched to the nested project silently, and the outer project's custom commands stopped working.ddev startthere asks whether you want the nested project - DDEV stops writing database connection settings into your CMS config when there's no db container or you configured a different database. That fixes TYPO3 projects using
omit_containers: [db], which failed to install withgetaddrinfo for db failed, and a TYPO3 SQLite setup that got switched back to MySQL on every restart. thanks to @staatzstreich for the diagnosis and the original fix, made general here so Drupal and Backdrop get it too ddev pull acquiahandles long application names, where the Acquia CLI breaks the database filename across several lines, thanks to @danepowell- Your
pre-/post-import-dbandpre-/post-import-fileshooks now run when a provider does its own importing withdb_import_command/files_import_command, and those pulls no longer print a "skipping database pull" warning that wasn't true - When port 80 or 443 is already taken and DDEV uses a different port instead,
ddev-routerremembers that. Before, after the program using that port stopped, starting another project rebuilt the router for no reason - Drupal 10, 11, and 12 projects handle a page with unusually large HTTP headers instead of failing with a 502 error. Drupal test runs hit this, since they report deprecation notices in the response headers, thanks to @phenaproxima
- The bundled
settings.phpfor thedrupal11anddrupal12project types is refreshed from upstream, and drupal11'ssettings.ddev.phpgets the garbage-collection threshold that drupal12 already had, thanks to @rpkoller
Breaking Changes
xdebug_enabledis gone fromddev describe -j. It reported project config, not live Xdebug status, so useddev xdebug statusfor that. This only affects a custom GUI or script that read the field, thanks to @jonesrussell
Security Changes
- A malicious archive can no longer create an absolute symlink that a later file in the same archive follows, to write files outside the folder being extracted - your shell startup files, for example. This was reachable through
ddev add-on getandddev import-db/import-files, and it completes the fix for CVE-2026-32885. thanks to @arpitjain099 for the report, see GHSA-9hq4-hm3j-jmph - A
docrootorupload_dirsvalue in.ddev/config.yaml, or a path you pass toddev dotenv, now gives a clear error when it points outside the project, instead of DDEV silently reading and writing files there
Internal Changes
ddev-webserverexplains the 403s and 404s it generates itself instead of serving a bare error page, since those usually mean a wrongdocrootor a project that isn't installed yet, andddev-routerdoes the same for a hostname that matches no project. A 403 or 404 from your own application is passed through unchanged. This replaces the "docroot may be wrong" warning onddev start, which you couldn't see in a browser and which warned wrongly when.htaccessrewrites into a subdirectoryddev-php-baseis consolidated intoddev-webserveras local build stages, so a new base image no longer has to be pushed to Docker Hub beforeddev-webservercan reference it.ddev/ddev-php-baseandddev/ddev-php-prodare no longer published and stay at their last-pushed tag; theddev-webserverimage itself behaves the same- Per-project certificates no longer carry a shared
*.<TLD>wildcard SAN, which Traefik 3.7.6+ would use to serve one project's certificate for every hostname on a shared custom TLD. v1.25.3 shipped Traefik 3.6.13, which isn't affected. The obsolete*.ddev.localSAN is also gone from the global default certificate - Under rootless Docker or Podman, the host's
usr.sbin.mysqldAppArmor profile attaches to the container's mysqld and left it unable to read/etc/my.cnf. That profile is loaded on any Linux machine withmysql-serverinstalled, and the newdhi.io/mysqlbase puts mysqld at the path it matches. MySQL 8.0, 8.4, and 9.7 now load their config with an explicit--defaults-fileinstead - A nightly performance benchmark harness feeding a performance history dashboard, plus CI test runtime tracking per test type across GitHub Actions and Buildkite
- Rootless Podman CI setup reworked,
podman-rootCI dropped DDEV_DOCKER_ORGpoints a binary at a different Docker Hub organization, so a release built outsideddev/ddevcan be pull-tested end to endlast_started_versionis recorded by every command that starts containers, not onlyddev start/ddev restart, so you stop being asked for addev poweroffthat isn't needed.ddev start -yrecords it too- Three fixes toward Apple Container and socktainer support (#7372): bound host ports fall back to
NetworkSettings.PortswhenHostConfig.PortBindingscomes back empty, a running project's database version is read by exec instead of a second mount of an already-attached volume, andddev startsurvives achownfailure on/mnt/ddev-global-cachewhere the filesystem rejects it even though ownership is already correct
Minor Updates
- PHP 8.5.9, 8.4.24, 8.3.33, and 8.2.33
- Composer 2.10.3, Node.js 24.20.0, npm 11.19.0
- MariaDB client 11.8.9; bundled MySQL clients 9.7 (new), 8.4.10, and 8.0.46
What's Changed
- test(shopware): remove pin for Twig, for [#8557] (#8568) [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/8568
- test(php): remove skip for php8.5-solr, for [#7697] (#8569) [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/8569
- ci(linkspector): remove skip for 429 error, for [#7270] (#8570) [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/8570
- chore: remove unused "default" provider (#8571) [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/8571
- fix(mysql): build mysql 8.0/8.4 from Docker Hardened Images, fixes [#7962] by @rfay in https://github.com/ddev/ddev/pull/8535
- fix(mysql): bump webserver mysql client to 8.0.46/8.4.10 by @rfay in https://github.com/ddev/ddev/pull/8576
- ci(github): update dependabot.yml (#8565) [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/8565
- docs(commands): add precision about
launchwhich start project, fixes [#8583] by @MrYamous in https://github.com/ddev/ddev/pull/8585 - fix(router): stop sharing wildcard SANs across per-project certs, fixes [#8562] by @stasadev in https://github.com/ddev/ddev/pull/8563
- fix(router): remove obsolete *.ddev.local from generated certs, fixes [#8586] by @rfay in https://github.com/ddev/ddev/pull/8589
- docs(diagnostics): document all opt-in instrumentation events (#8592) [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/8592
- feat(commands): add
ddev tableproglobal host command by @datlechin in https://github.com/ddev/ddev/pull/8580 - fix(build): honor service platform override when building images, fixes [#8578] by @rfay in https://github.com/ddev/ddev/pull/8579
- feat(router): serve informative message for unmatched routes, fixes [#8587] by @rfay in https://github.com/ddev/ddev/pull/8591
- chore: Updates to the settings.php for the drupal11 and drupal12 project types by @rpkoller in https://github.com/ddev/ddev/pull/8581
- docs(quickstart): update Shopware 6 references to up-to-date information by @vanWittlaer in https://github.com/ddev/ddev/pull/8593
- fix(buildkite): run orb start/stop synchronously so orbstack reliably ends up running (#8605) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8605
- feat(webserver): explain webserver-level 404s, fixes [#8588] by @rfay in https://github.com/ddev/ddev/pull/8590
- chore: replace github.com/sponsors/ddev with ddev.com/sponsor by @stasadev in https://github.com/ddev/ddev/pull/8615
- docs: expand CLAUDE.md language rules to curb AI-nonsense words and ego-stroking [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8619
- docs(quickstart): work around Drush/Guzzle 8 conflict in Drupal 12 install (#8618) [skip buildkite] by @rfay in https://github.com/ddev/ddev/pull/8618
- docs(shopware): fix quickstart for php-http/discovery no longer prompting by @rfay in https://github.com/ddev/ddev/pull/8620
- docs(quickstart): revert Drush/Guzzle 8 workaround for Drupal 12 by @rfay in https://github.com/ddev/ddev/pull/8621
- docs: add details on changing from Homebrew to a specific version (#8459) [skip ci] by @joachim-n in https://github.com/ddev/ddev/pull/8459
- feat: add support for global Dockerfiles, fixes [#8406] (#8405) [skip ci] by @rmott-littler in https://github.com/ddev/ddev/pull/8405
- fix(nodejs): stop recursively chgrp/chmod'ing /usr/local/n on every project build, fixes [#8600] by @rfay in https://github.com/ddev/ddev/pull/8603
- test(silverstripe): update fixture to test-silverstripe 6.2.2 (#8626) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8626
- fix(describe): omit xdebug_enabled from describe output, fixes [#8159] (#8360) [skip ci] by @jonesrussell in https://github.com/ddev/ddev/pull/8360
- fix: don't write CMS db connection settings when db container is omitted or another driver is configured, for [#8582] (#8594) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8594
- feat(maho): add Maho project type by @fballiano in https://github.com/ddev/ddev/pull/8606
- docs(quickstart): pin quickstart to Symfony LTS, fixes symfony.bats failures [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8628
- fix: reject symlinks with rooted/absolute targets in Untar, for [#8213] (#8625) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8625
- perf(router): update network aliases in place instead of recreating on start, for [#8132] (#8561) [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/8561
- build(docker): consolidate ddev-php-base into ddev-webserver, fixes [#8012] by @rfay in https://github.com/ddev/ddev/pull/8604
- ci(podman): force k8s-file log driver to avoid conmon journald crash (#8630) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8630
- ci(podman): force nftables firewall backend to avoid intermittent netavark failure [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8633
- test(macos-docker-desktop): skip tests hitting a Docker Desktop connection reset by @rfay in https://github.com/ddev/ddev/pull/8627
- feat: add MySQL 9.7 LTS support, fixes [#8514] by @rfay in https://github.com/ddev/ddev/pull/8629
- feat(config): re-implement dbimage config option, mirroring webimage by @rfay in https://github.com/ddev/ddev/pull/8610
- test(router): make TestUseEphemeralPort resilient to host port races, fixes [#8293] (#8638) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8638
- fix(settings): close file handles in TYPO3/Drupal settings writers (Traditional Windows test failures), for [#8582] (#8632) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8632
- fix(webserver): tolerate a stale non-FIFO /var/tmp/logpipe on container start (#8635) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8635
- fix(compose): remove BuildKit snapshot race retry logic, for [#8136] by @rfay in https://github.com/ddev/ddev/pull/8637
- fix(docker): quiet per-layer image pull progress in non-interactive output, fixes [#8624] by @rfay in https://github.com/ddev/ddev/pull/8636
- docs: Remove obsolete Lullabot nodejs link (#8645) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8645
- build: bump actions/setup-go from 6 to 7 in the actions group (#8646) [skip ci] by @dependabot[bot] in https://github.com/ddev/ddev/pull/8646
- fix(docker): restore /usr/local/n and make /var/log group-0-writable, fixes [#8640], fixes [#8574] by @rfay in https://github.com/ddev/ddev/pull/8647
- fix(router): skip TestRouterNotRebuiltOnHostnameChange on Windows, fixes [#8644] (#8649) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8649
- docs(webserver): condense the 404 explanation comments, for [#8590] (#8639) [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/8639
- feat(webserver): explain webserver-level 403s, fixes [#8595], fixes [#7345] (#8641) [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/8641
- feat(apptypes): add MODX Revolution (2.x/3.x) as a project type by @casparml in https://github.com/ddev/ddev/pull/8560
- docs: explain how to avoid hard line breaks in gh issue/PR/comment bodies (#8662) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8662
- fix(webserver): don't let a failing global-cache chown kill the container by @rfay in https://github.com/ddev/ddev/pull/8659
- feat(dbserver): support zstd-compressed base_db for faster first-boot restore by @weitzman in https://github.com/ddev/ddev/pull/8608
- test(db): fix filepath formatting in test [skip github] by @rfay in https://github.com/ddev/ddev/pull/8666
- ci(github): pin setup-homebrew, drop dead setup-sandbox input (#8667) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8667
- ci(podman): add rootless Podman setup and diagnostic script, fix dockercheck buildx test (#8650) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8650
- feat(perf): add nightly performance benchmark harness by @rfay in https://github.com/ddev/ddev/pull/8622
- fix(perf): fix bugs found validating the nightly benchmark harness end-to-end (#8668) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8668
- fix(perf): make the nightly collector resilient to one bad leg [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8670
- fix(perf): install drush in the nightly Linux perf project by @rfay in https://github.com/ddev/ddev/pull/8673
- docs: update config.md for minor typo (#8674) [skip ci] by @brookemahoney in https://github.com/ddev/ddev/pull/8674
- test(quickstart): statamic output changed, fix assertion by @rfay in https://github.com/ddev/ddev/pull/8675
- build: bump the actions group with 4 updates by @dependabot[bot] in https://github.com/ddev/ddev/pull/8678
- docs: update config.md for minor typos, for [#8674] (#8689) [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/8689
- fix(modx): add missing 403 in nginx, use
ddev php, for [#8560] by @stasadev in https://github.com/ddev/ddev/pull/8687 - docs: note that base_db/initializer seeding doesn't support PostgreSQL (#8690) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8690
- test(quickstart): derive URLs from
ddev describe -jinstead of hardcoding ddev.site [skip buildkite] by @rfay in https://github.com/ddev/ddev/pull/8676 - feat(snapshot): show size and DB version in
ddev snapshot --listby @rfay in https://github.com/ddev/ddev/pull/8642 - fix(dockerutil): fall back to NetworkSettings.Ports in GetBoundHostPorts (#8657) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8657
- fix(dev-tools): put installed tools on PATH and verify they work (#8651) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8651
- feat: forward TERM and COLORTERM to ddev ssh/exec sessions, fixes [#6174] (#8669) [skip ci] by @wazum in https://github.com/ddev/ddev/pull/8669
- fix: record last_started_version from every command that starts containers, fixes [#8520] by @rfay in https://github.com/ddev/ddev/pull/8677
- fix(ddevapp): read db version from a running container via exec, not a second volume mount (#8658) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8658
- ci(podman): rework the rootless setup script and docs, drop podman-root CI by @rfay in https://github.com/ddev/ddev/pull/8688
- docs: reorganize README to put getting started first (#8693) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8693
- fix(nginx): remove robots.txt location block, fixes [#8607] (#8663) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8663
- test(windows): use forward slashes for paths fed to the db-version bash script on Windows [skip github] (#8701) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8701
- fix(ddevapp): attach command output to failing provider and hook commands (#8672) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8672
- fix(provider): run import hooks for custom db/files import commands (#8671) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8671
- feat(images): record image tag in a com.ddev.image-tag label and warn when a pinned image is stale by @rfay in https://github.com/ddev/ddev/pull/8682
- docs(readme): add in-kind sponsors section (#8700) [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/8700
- docs: sharpen CLAUDE.md guidance on Windows pitfalls and comment length, improve templates, fixes [#8255] (#8702) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8702
- fix(router): record ephemeral port substitutions on the ddev-router container, fixes [#8644] by @rfay in https://github.com/ddev/ddev/pull/8653
- feat(containers): auto-detect content changes and tag/rebuild docker base images locally, for [#8609] (#8612) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8612
- fix(acquia): broken db import with long application names by @danepowell in https://github.com/ddev/ddev/pull/8643
- ci: add placeholder image-build/image-push workflows for [#8609] (#8706) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8706
- fix(ci): quote placeholder workflow strings so [#8609] isn't parsed as a YAML comment (#8708) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8708
- build: bump 1password/load-secrets-action from 4 to 5 by @dependabot[bot] in https://github.com/ddev/ddev/pull/8709
- build(public-variables): Add DOCKER_ORG [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8711
- feat(images): Automatically push and then test new images when changes made, fixes [#8609] by @rfay in https://github.com/ddev/ddev/pull/8707
- feat(shopware6): bundle shopware-cli and hot-reload watchers by @vanWittlaer in https://github.com/ddev/ddev/pull/8597
- build(hash-paths): fix hash-paths.sh portability problem on windows (#8714) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8714
- docs(comments): Clean up comments missed in [#8653] [skip ci] (#8710) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8710
- feat: publish apt/rpm packages to Cloudsmith to replace (gradually) Gemfury, fixes [#3997] by @rfay in https://github.com/ddev/ddev/pull/8698
- fix(ci): wait for pushed images reliably, fixes [#8609] by @rfay in https://github.com/ddev/ddev/pull/8712
- test(mutagen): Minor test cleaup [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8719
- fix(images): gate fork image builds on approval earlier, skip it for authorized authors (#8715) [skip buildkite] by @rfay in https://github.com/ddev/ddev/pull/8715
- build(go): modernize for go 1.27, latest golangci-lint (#8722) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8722
- fix(addon): tolerate numeric default_branch in add-on registry JSON (#8723) [skip buildkite] by @rfay in https://github.com/ddev/ddev/pull/8723
- test(gob-decode): regenerate stale test-addon-data.gob fixture (#8724) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8724
- feat(amplitude): report add-on repository to Amplitude, fixes [#8599] by @rfay in https://github.com/ddev/ddev/pull/8716
- feat(snapshot): support uncompressed mariabackup/xtrabackup snapshots and seeds by @rfay in https://github.com/ddev/ddev/pull/8704
- docs(claude): convince claude to use simpler language (#8729) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8729
- ci(perf): track total CI runtime per test type across GitHub Actions and Buildkite (#8728) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8728
- feat(add-on): add
ddev add-on updateto update all installed add-ons, fixes [#4979] (#8717) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8717 - test: skip tests that don't need to repeat across every CI wrapper workflow, for [#8696] (#8725) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8725
- feat(database): add --seed-snapshot and --reset-database, rename 'initializer' to 'seed', fixes [#8661], fixes [#8322] by @rfay in https://github.com/ddev/ddev/pull/8705
- docs(claude): extend description-length discipline to issues, cap section length (#8732) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8732
- test(mutagen): we don't need some mutagen testing [skip buildkite] (#8735) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8735
- fix(nginx): Increase FastCGI buffer sizes (for Drupal CMS tests) by @phenaproxima in https://github.com/ddev/ddev/pull/8734
- fix(config): warn about unreleased DDEV builds, fixes [#8739] by @rfay in https://github.com/ddev/ddev/pull/8740
- ci: comment on PRs included in a release (#8558) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8558
- feat: add
ddev utility download-ddevto download CI and release builds by @stasadev in https://github.com/ddev/ddev/pull/8611 - chore: remove version-history.md, fixes [#8744] (#8752) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8752
- fix: perf dashboard legs checkbox shows "undefined" (#8755) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8755
- fix(wordpress): let wp-cli.yml override the docroot, fixes [#7881] by @stasadev in https://github.com/ddev/ddev/pull/8745
- feat(docker): resolve released image tags to vX.Y.Z instead of content hash, fixes [#8751] (#8754) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8754
- fix: show image branch hint inline in ddev version, drop it from JSON (#8747) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8747
- fix: reject path traversal in docroot, upload_dirs, and dotenv path validation by @rfay in https://github.com/ddev/ddev/pull/8749
- build(go): bump all go.mod dependencies (#8758) [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/8758
- feat(snapshot): offer snapshots from sibling Git worktrees, by name, latest, or --list (#8733) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8733
- fix(compose): always use RemoveOrphans option, fixes [#8757] by @stasadev in https://github.com/ddev/ddev/pull/8759
- chore(compose): remove unused COMPOSE_REMOVE_ORPHANS, for [#8759] by @stasadev in https://github.com/ddev/ddev/pull/8761
- fix(buildx): skip sha verification on macOS for versions before v0.36.0, for [#8758] by @stasadev in https://github.com/ddev/ddev/pull/8762
- feat: add
ddev utility delete-volumeto remove a project's Docker volume, fixes [#6961] by @rfay in https://github.com/ddev/ddev/pull/8756 - build: bump actions/upload-artifact from 4 to 7 in the actions group (#8770) [skip ci] by @dependabot[bot] in https://github.com/ddev/ddev/pull/8770
- build(deps): pin docker/buildx past the policy-dependency fix, fixes [#8764] (#8767) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8767
- feat(docker): allow overriding the image org with DDEV_DOCKER_ORG, fixes [#8753] (#8765) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8765
- fix: float wsl2-setup.sh's default Go install to latest stable (#8775) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8775
- feat: add gitignored .env.local, labeled, and global .env files, fixes [#7235], fixes [#7309] by @stasadev in https://github.com/ddev/ddev/pull/8738
- feat: add ddev launch --print-url flag and DDEV_LAUNCH_PRINT_URL env var, fixes [#8771] (#8772) [skip ci] by @steffenmaechtel in https://github.com/ddev/ddev/pull/8772
- feat(drupal): support symfony_mailer_lite in settings.ddev.php, fixes [#8776] (#8778) [skip ci] by @mxr576 in https://github.com/ddev/ddev/pull/8778
- fix: don't use nested project unless it's registered, fixes [#8321] by @stasadev in https://github.com/ddev/ddev/pull/8327
- fix: resolve TestGetVersionInfo failure and duplicate tag in
ddev versionoutput (#8781) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8781 - feat: add nodejs_root so Node.js version auto-detection can read a subdirectory, fixes [#8730] (#8760) [skip ci] by @dpacassi in https://github.com/ddev/ddev/pull/8760
- fix(dbserver): pin secure_file_priv for mysql 8.0, 8.4, and 9.7 by @rfay in https://github.com/ddev/ddev/pull/8783
- ci(debug): replace tmate with upterm [skip ci] by @stasadev in https://github.com/ddev/ddev/pull/8789
- fix: update TestCmdVersion for release-tag image resolution (#8787) [skip ci] by @rfay in https://github.com/ddev/ddev/pull/8787
- fix(dbserver): survive host AppArmor mysqld confinement on rootless Docker/Podman CI by @rfay in https://github.com/ddev/ddev/pull/8788
- docs(quickstart): Fix fragile drupal cms test; expectation changed by @rfay in https://github.com/ddev/ddev/pull/8792
- build(docker): bump images to v1.25.4 for release, fixes [#8703] by @stasadev in https://github.com/ddev/ddev/pull/8780
New Contributors
- @MrYamous made their first contribution in https://github.com/ddev/ddev/pull/8585
- @datlechin made their first contribution in https://github.com/ddev/ddev/pull/8580
- @rmott-littler made their first contribution in https://github.com/ddev/ddev/pull/8405
- @fballiano made their first contribution in https://github.com/ddev/ddev/pull/8606
- @casparml made their first contribution in https://github.com/ddev/ddev/pull/8560
- @steffenmaechtel made their first contribution in https://github.com/ddev/ddev/pull/8772
- @dpacassi made their first contribution in https://github.com/ddev/ddev/pull/8760
Full Changelog: https://github.com/ddev/ddev/compare/v1.25.3...v1.25.4