Config Options¶
DDEV configuration is stored in YAML files that come in two flavors:
- Project
.ddev/config.yaml
settings, with optional environmental override variants. - Global
$HOME/.ddev/global_config.yaml
settings that can apply to all projects.
Most of these settings take effect when you run ddev start
.
Managing Configuration¶
Setting Options¶
You can hand-edit the YAML files DDEV creates for you after running ddev config
, and you can also define most settings with equivalent CLI arguments:
Environmental Overrides¶
You can override the per-project config.yaml
with files named config.*.yaml
, which are gitignored by default and not checked in.
Many teams use config.local.yaml
for configuration that’s specific to one environment, and not checked into the team’s default config.yaml
. You might enable Mutagen or enable NFS for the project, for example, just on your machine. Or maybe use a different database type.
For examples, see the Extending and Customizing Environments page.
additional_fqdns
¶
An array of extra fully-qualified domain names to be used for a project.
Type | Default | Usage |
---|---|---|
project | [] |
Example: additional_fqdns: ["example.com", "sub1.example.com"]
would provide HTTP and HTTPS URLs for example.com
and sub1.example.com
.
Warning
Take care with additional_fqdns
; it adds items to your /etc/hosts
file which can cause confusion.
additional_hostnames
¶
An array of extra hostnames to be used for a project.
Type | Default | Usage |
---|---|---|
project | [] |
Example: additional_hostnames: ["somename", "someothername", "*.thirdname"]
would provide HTTP and HTTPS URLs for somename.ddev.site
, someothername.ddev.site
, and one.thirdname.ddev.site
+ two.thirdname.ddev.site
.
The wildcard (*
) setting only works if you’re using DNS to resolve hostnames (default) and connected to the internet.
composer_root
¶
The relative path, from the project root, to the directory containing composer.json
. (This is where all Composer-related commands are executed.)
Type | Default | Usage |
---|---|---|
project |
composer_version
¶
Composer version for the web container and the ddev composer
command.
Type | Default | Usage |
---|---|---|
project | 2 | Can be 2 , 1 , or empty ("" ) for latest major version at container build time.Can also be a minor version like 2.2 for the latest release of that branch, an explicit version like 1.0.22 , or a keyword like stable , preview or snapshot . See Composer documentation. |
database
¶
The type and version of the database engine the project should use.
Type | Default | Usage |
---|---|---|
project | MariaDB 10.4 | Can be MariaDB 5.5–10.8, MySQL 5.5–8.0, or PostgreSQL 9–15. See Database Server Types for examples and caveats. |
Note
DDEV v1.18 and earlier used mariadb_version
and mysql_version
, which are now automatically converted to the database
format.
dbimage_extra_packages
¶
Extra Debian packages for the project’s database container.
Type | Default | Usage |
---|---|---|
project | [] |
Example: dbimage_extra_packages: ["less"]
will add the less
package when the database container is built.
default_container_timeout
¶
Seconds DDEV will wait for all containers to become ready.
Type | Default | Usage |
---|---|---|
project | 120 | Can be adjusted to avoid timeouts on slower systems or for huge snapshot restores. |
developer_mode
¶
Not currently used.
Type | Default | Usage |
---|---|---|
global | false | Can true or false . |
disable_http2
¶
Whether to disable http/2 listen in ddev-router
.
Type | Default | Usage |
---|---|---|
global | false | Can be true or false . |
When true
, nginx will not listen for http/2, but just use http/1.1 SSL. (Some browsers don’t work well with http/2.)
disable_settings_management
¶
Whether to disable CMS-specific settings file management.
Type | Default | Usage |
---|---|---|
project | false | Can be true or false . |
When true
, DDEV will not create or update CMS-specific settings files.
docroot
¶
Relative path to the document root containing index.php
or index.html
.
Type | Default | Usage |
---|---|---|
project | automatic | DDEV will attempt to detect this and set it for you, otherwise falling back to the current directory. |
fail_on_hook_fail
¶
Whether ddev start
should be interrupted by a failing hook, on a single project or for all projects if used globally.
Type | Default | Usage |
---|---|---|
project global | false | Can be true or false . |
hooks
¶
DDEV-specific lifecycle hooks to be executed.
Type | Default | Usage |
---|---|---|
project | `` |
host_db_port
¶
Port for binding database server to localhost interface.
Type | Default | Usage |
---|---|---|
project | automatic |
Not commonly used. Can be a specific port number for a fixed database port. If unset, the port will be assigned automatically and change each time ddev start
is run.
Can be a specific port number for a fixed database port, which can be useful for configuration of host-side database clients. (May still be easier to use ddev mysql
, ddev psql
, ddev sequelace
, etc., which handle changing ports automatically, as does the sample command ddev mysqlworkbench
.)
host_https_port
¶
Specific, persistent HTTPS port for direct binding to localhost interface.
Type | Default | Usage |
---|---|---|
project | automatic |
Not commonly used. Can be a specific port number for a fixed HTTPS URL. If unset, the port will be assigned automatically and change each time ddev start
is run.
Example: 59001
will have the project always use https://127.0.0.1:59001
for the localhost URL—used less commonly than the named URL which is better to rely on.
host_webserver_port
¶
Specific, persistent HTTP port for direct binding to localhost interface.
Type | Default | Usage |
---|---|---|
project | automatic |
Not commonly used. Can be a specific port number for a fixed HTTP URL. If unset, the port will be assigned automatically and change each time ddev start
is run.
Example: 59000
will have the project always use http://127.0.0.1:59000
for the localhost URL—used less commonly than the named URL which is better to rely on.
instrumentation_opt_in
¶
Whether to allow instrumentation reporting.
Type | Default | Usage |
---|---|---|
global | true | Can be true or false . |
When true
, anonymous usage information is collected via Segment.
internet_detection_timeout_ms
¶
Internet detection timeout in milliseconds.
Type | Default | Usage |
---|---|---|
global | 1000 (1 second) | Can be any integer. |
DDEV must detect whether the internet is working to determine whether to add hostnames to /etc/hosts
. In rare cases, you may need to increase this value if you have slow but working internet. See FAQ and GitHub issue.
letsencrypt_email
¶
Email associated with Let’s Encrypt feature. (Works in conjunction with use_letsencrypt
.) (Not currently compatible with Traefik router.)
Type | Default | Usage |
---|---|---|
global | `` |
Set with ddev config global --letsencrypt-email=me@example.com
. Used with the casual hosting feature.
mailhog_https_port
¶
Port for project’s MailHog HTTPS URL.
Type | Default | Usage |
---|---|---|
project | 8026 | Can be changed to avoid a port conflict. |
mailhog_port
¶
Port for project’s MailHog HTTP URL.
Type | Default | Usage |
---|---|---|
project | 8025 | Can be changed to avoid a port conflict. |
mutagen_enabled
¶
Whether to enable Mutagen asynchronous caching for all projects.
Type | Default | Usage |
---|---|---|
project global | false | Can be true or false ; only true has any effect. |
This overrides NFS mounting as it’s incompatible with NFS.
name
¶
The URL-friendly name DDEV should use to reference the project.
Type | Default | Usage |
---|---|---|
project | enclosing directory name | Must be unique; no two projects can have the same name. It’s best if this matches the directory name. If this option is omitted, the project will take the name of the enclosing directory. |
nfs_mount_enabled
¶
Whether to use NFS to mount the project into the container for performance. (Mostly superseded by mutagen_enabled
.)
Type | Default | Usage |
---|---|---|
project global | false | Can be true or false ; only true has any effect. |
Workstation configuration required!
See the NFS section on the Performance page.
This is typically a global setting. If it’s ever set in both places, the global config will override the project-specific value.
ngrok_args
¶
Extra flags for configuring ngrok when sharing projects with the ddev share
command.
Type | Default | Usage |
---|---|---|
project | `` |
Example: --basic-auth username:pass1234
.
no_bind_mounts
¶
Whether to not use Docker bind mounts.
Type | Default | Usage |
---|---|---|
global | false | Can true or false . |
Some Docker environments (like remote Docker) do not allow bind mounts, so when true
this turns those off, turns on Mutagen, and uses volume copies to do what bind mounts would otherwise do.
no_project_mount
¶
Whether to skip mounting project into web container.
Type | Default | Usage |
---|---|---|
project | false | Can be true or false . |
Advanced users only!
When true
, project will not be mounted by DDEV into the web container. Enables experimentation with alternate file mounting strategies.
nodejs_version
¶
Node.js version for the web container’s “system” version.
Type | Default | Usage |
---|---|---|
project | current LTS version | Can be 14 , 16 , or 18 . |
nvm
is also available inside the container and via ddev nvm
, and can be set to any valid version including much older ones.
omit_containers
¶
Containers that should not be loaded automatically for one or more projects.
Type | Default | Usage |
---|---|---|
project global | [] | For projects, can include db , dba , and ddev-ssh-agent .Globally, can include dba and ddev-ssh-agent only. |
Example: omit_containers: [db, dba, ddev-ssh-agent]
starts the project without a db
container, phpMyAdmin, and SSH agent. Some containers can be omitted globally in ~/.ddev/global_config.yaml
and the result is additive; all containers named in both places will be omitted.
Warning
Omitting the db
container will cause database-dependent DDEV features to be unstable.
override_config
¶
Whether to override config values instead of merging.
Type | Default | Usage |
---|---|---|
project | false | Can be true or false . |
When true
, the config.*.yaml
file with the option will have its settings override rather than merge with others. Allows statements like nfs_mount_enabled: false
or additional_hostnames: []
to work.
See Extending config.yaml
with Custom config.*.yaml
Files.
php_version
¶
The PHP version the project should use.
Type | Default | Usage |
---|---|---|
project | 8.0 | Can be 5.6 , 7.0 , 7.1 , 7.2 , 7.3 , 7.4 , 8.0 , 8.1 , or 8.2 . |
You can only specify the major version (7.3
), not a minor version (7.3.2
), from those explicitly available.
phpmyadmin_https_port
¶
Port for project’s phpMyAdmin HTTPS URL.
Type | Default | Usage |
---|---|---|
project | 8037 | Can be changed to avoid a port conflict. |
phpmyadmin_port
¶
Port for project’s phpMyAdmin HTTP URL.
Type | Default | Usage |
---|---|---|
project | 8036 | Can be changed to avoid a port conflict. |
project_tld
¶
Default TLD to be used for a project’s domains, or globally for all project domains.
Type | Default | Usage |
---|---|---|
project global | ddev.site | Can be changed to any TLD you’d prefer. |
required_docker_compose_version
¶
Specific docker-compose version for download.
Type | Default | Usage |
---|---|---|
global |
If set to v2.8.0
, for example, it will download and use that version instead of the expected version for docker-compose.
Troubleshooting Only!
This should only be used in specific cases like troubleshooting. Best avoided otherwise.
router_bind_all_interfaces
¶
Whether to bind ddev-router
‘s ports on all network interfaces.
Type | Default | Usage |
---|---|---|
global | false | Can be true or false . |
When true
, ddev-router
will bind on all network interfaces instead of only localhost
, exposing DDEV projects to your local network. If you set this to true
, consider setting omit_containers: ["dba"]
so phpMyAdmin is not available.
router_http_port
¶
Port for DDEV router’s HTTP traffic.
Type | Default | Usage |
---|---|---|
project | 80 | Usually changed only if there’s a conflicting process using that port. |
See the Troubleshooting page for more on addressing port conflicts.
router_https_port
¶
Port for DDEV router’s HTTPS traffic.
Type | Default | Usage |
---|---|---|
project | 443 | Usually changed only if there’s a conflicting process using that port. |
See the Troubleshooting page for more on addressing port conflicts.
simple-formatting
¶
Whether to disable most ddev list
and ddev describe
table formatting.
Type | Default | Usage |
---|---|---|
global | false | Can be true or false . |
When true
, turns off most table formatting in ddev list
and ddev describe
and suppresses colorized text everywhere.
table-style
¶
Style for ddev list
and ddev describe
.
Type | Default | Usage |
---|---|---|
global | default | Can be default , bold , and bright . |
bright
is a pleasant, colorful output some people may prefer.
timezone
¶
Timezone for container and PHP configuration.
Type | Default | Usage |
---|---|---|
project | UTC | Can be any valid timezone, like Europe/Dublin or MST7MDT . |
type
¶
The DDEV-specific project type.
Type | Default | Usage |
---|---|---|
project | php | Can be backdrop , craftcms , drupal6 , drupal7 , drupal8 , drupal9 , drupal10 , laravel , magento , magento2 , php , shopware6 , typo3 , or wordpress . |
The php
type doesn’t attempt CMS configuration or settings file management and can work with any project.
upload_dir
¶
Path from the project’s docroot to the user-generated files directory targeted by ddev import-files
.
Type | Default | Usage |
---|---|---|
project |
use_dns_when_possible
¶
Whether to use DNS instead of editing /etc/hosts
.
Type | Default | Usage |
---|---|---|
project | true | Can be true or false . |
When false
, DDEV will always update the /etc/hosts
file with the project hostname instead of using DNS for name resolution.
See Using DDEV Offline.
use_docker_compose_from_path
¶
Whether to use the system-installed docker-compose. You can otherwise use required_docker_compose_version
to specify a version for download.
Type | Default | Usage |
---|---|---|
global | false | Can true or false . |
When true
, DDEV will use the docker-compose found in on your system’s path instead of using its private, known-good, docker-compose version.
Troubleshooting Only!
This should only be used in specific cases like troubleshooting. Best avoided otherwise.
use_hardened_images
¶
Whether to use hardened images for internet deployment.
Type | Default | Usage |
---|---|---|
global | false | Can true or false . |
When true
, more secure hardened images are used for an internet deployment. These do not include sudo in the web container, and the container is run without elevated privileges. Generally used with the casual hosting feature.
use_letsencrypt
¶
Whether to enable Let’s Encrypt integration. (Works in conjunction with letsencrypt_email
.) (Not currently compatible with Traefik router.)
Type | Default | Usage |
---|---|---|
global | false | Can true or false . |
May also be set via ddev config global --use-letsencrypt
or ddev config global --use-letsencrypt=false
. When true
, letsencrypt_email
must also be set and the system must be available on the internet. Used with the casual hosting feature.
use_traefik
¶
Whether to enable the traefik router.
Type | Default | Usage |
---|---|---|
global | false | Can true or false . |
May also be set via ddev config global --use-traefik
or ddev config global --use-traefik=false
.
web_environment
¶
Additional custom environment variables for a project’s web container. (Or for all projects if used globally.)
Type | Default | Usage |
---|---|---|
project global | [] |
web_extra_daemons
¶
Additional daemons that should automatically be started in the web container.
Type | Default | Usage |
---|---|---|
project | [] |
web_extra_exposed_ports
¶
Additional named sets of ports to expose via ddev-router
.
Type | Default | Usage |
---|---|---|
project | [] |
webimage
¶
The Docker image to use for the web server.
Type | Default | Usage |
---|---|---|
project | drud/ddev-webserver | Specify your own image based on drud/ddev-webserver. |
Proceed with caution
It’s unusual to change this, and we don’t recommend it without Docker experience and a good reason. Typically, this means additions to the existing web image using a .ddev/web-build/Dockerfile.*
.
webimage_extra_packages
¶
Extra Debian packages for the project’s web container.
Type | Default | Usage |
---|---|---|
project | [] |
Example: webimage_extra_packages: [php-yaml, php-bcmath]
will add the php-yaml
and php-bcmath
packages when the web container is built.
webserver_type
¶
Which available web server type should be used.
Type | Default | Usage |
---|---|---|
project | nginx-fpm | Can be nginx-fpm or apache-fpm . |
To change from the default nginx-fpm
to apache-fpm
, for example, you would need to edit your project’s .ddev/config.yaml
to include the following:
Then run the ddev restart
command to have the change take effect.
working_dir
¶
Working directories used by ddev exec
and ddev ssh
.
Type | Default | Usage |
---|---|---|
project |
Example: working_dir: { web: "/var/www", db: "/etc" }
sets the working directories for the web
and db
containers.
wsl2_no_windows_hosts_mgt
¶
(WSL2 only) Whether to disable the management and checking of the Windows hosts file. By default, when using WSL2, DDEV manages the system-wide hosts file on the Windows side (normally C:\Windows\system32\drivers\etc\hosts
) by using ddev.exe
installed on the Windows side. This normally works better for all applications, including browsers and IDEs. However, this behavior can be disabled by setting wsl_no_windows_hosts_mgt: true
.
Type | Default | Usage |
---|---|---|
global | false | Can true or false . |
May also be set via ddev config global --wsl2-no-windows-hosts-mgt
or ddev config global --wsl2-no-windows-hosts-mgt=false
.
xdebug_enabled
¶
Whether Xdebug should be enabled for step debugging or profiling.
Type | Default | Usage |
---|---|---|
project | false | Please leave this false in most cases. Most people use ddev xdebug and ddev xdebug off commands. |
xdebug_ide_location
¶
Adjust Xdebug listen location for WSL2 or in-container.
Type | Default | Usage |
---|---|---|
global | "" | Can be empty ("" ), "wsl2" , "container" , or an explicit IP address. |
For PhpStorm running inside WSL2 (or JetBrains Gateway), use "wsl2"
. For in-container like VS Code Language Server, set to "container"
. It can also be set to an explicit IP address.