Drupal development tooling skill for DDEV local environments and Drush command-line operations (Drupal 8-11+)...
Enable expert-level Drupal development tooling capabilities with comprehensive guidance for DDEV Docker-based local development environments and Drush command-line operations for Drupal 8, 9, 10, and 11+.
Invoke this skill when working with:
Manage Docker-based local Drupal environments efficiently:
Project initialization:
# Initialize new Drupal project
ddev config --project-type=drupal10 --docroot=web --create-docroot
# Start containers
ddev start
# Install Drupal via Composer
ddev composer create drupal/recommended-project
# Install Drupal site
ddev drush site:install standard --account-name=admin --account-pass=admin
Daily operations:
# Start/stop project
ddev start
ddev stop
ddev restart
# SSH into container
ddev ssh
# Launch site in browser
ddev launch
# View logs
ddev logs
ddev logs -f # Follow logs
Database operations:
# Import database
ddev import-db --src=database.sql.gz
# Export database
ddev export-db --file=backup.sql.gz --gzip
# Create snapshot
ddev snapshot
# Restore snapshot
ddev snapshot restore
# Access MySQL CLI
ddev mysql
Reference documentation:
references/ddev.md - Complete DDEV referenceExecute site management tasks efficiently:
Cache management:
# Rebuild cache (most common)
ddev drush cr
# Clear specific cache
ddev drush cache:clear css-js
ddev drush cache:clear render
Configuration management:
# Export configuration
ddev drush config:export
ddev drush cex
# Import configuration
ddev drush config:import
ddev drush cim
# View configuration
ddev drush config:get system.site
ddev drush cget system.site
# Set configuration
ddev drush config:set system.site name "My Site"
ddev drush cset system.site name "My Site"
Module management:
# Enable module
ddev drush pm:enable mymodule -y
ddev drush en mymodule -y
# Uninstall module
ddev drush pm:uninstall mymodule -y
ddev drush pmu mymodule -y
# List modules
ddev drush pm:list
ddev drush pml
# Download module
ddev drush pm:download webform
Database updates:
# Run pending database updates
ddev drush updatedb -y
ddev drush updb -y
User management:
# One-time login URL
ddev drush user:login
ddev drush uli
# Login as specific user
ddev drush uli admin
# Create user
ddev drush user:create newuser --mail="user@example.com" --password="pass"
# Change password
ddev drush user:password admin "newpassword"
Reference documentation:
references/drush.md - Complete Drush referenceCommon development and deployment workflows:
Standard deployment:
# Run database updates
ddev drush updb -y
# Import configuration
ddev drush cim -y
# Clear cache
ddev drush cr
# One-liner version
ddev drush updb -y && ddev drush cim -y && ddev drush cr
Fresh site setup:
# Clone repository
git clone <repo> myproject
cd myproject
# Start DDEV
ddev start
# Install dependencies
ddev composer install
# Import database and files
ddev import-db --src=database.sql.gz
ddev import-files --src=files.tar.gz
# Clear cache
ddev drush cr
# Launch site
ddev launch
Theme/module development:
# Start work
ddev start
# Clear cache frequently
ddev drush cr
# Watch for changes (if using build tools)
ddev exec npm run watch
# View logs
ddev drush watchdog:tail
Use Drush generators to scaffold code:
# Generate module
ddev drush generate module
# Generate controller
ddev drush generate controller
# Generate form
ddev drush generate form
# Generate plugin block
ddev drush generate plugin:block
# Generate service
ddev drush generate service
# Generate theme
ddev drush generate theme
# Generate hook
ddev drush generate hook
# List all generators
ddev drush generate --help
Debug and monitor your Drupal site:
Enable Xdebug:
# Enable Xdebug
ddev xdebug on
# Disable Xdebug (improves performance)
ddev xdebug off
# Check status
ddev xdebug status
View logs:
# Recent watchdog messages
ddev drush watchdog:show
# Follow watchdog logs
ddev drush watchdog:tail
# Container logs
ddev logs -s web
ddev logs -s db
Project information:
# Show project details
ddev describe
# Drupal status
ddev drush status
ddev drush st
# List all DDEV projects
ddev list
ddev drush, ddev composer, ddev npm.ddev/config.yaml to share configurationddev stop before system shutdowncr, cex, cim, uli)-y flag to skip confirmations&& for sequential operationsupdb) before config import (cim)cd existing-project
# Configure DDEV
ddev config
# Start containers
ddev start
# Install dependencies
ddev composer install
# Import database (if available)
ddev import-db --src=backup.sql.gz
# Clear cache
ddev drush cr
# Configure Drush alias for remote site
# Then pull database and files
ddev pull @production
# Or pull separately
ddev drush sql:sync @production @self
ddev rsync @production:%files @self:%files
# Backup first
ddev snapshot
# Update with Composer
ddev composer update drupal/core "drupal/core-*" --with-all-dependencies
# Run database updates
ddev drush updb -y
# Clear cache
ddev drush cr
# Copy development settings
cp sites/example.settings.local.php sites/default/settings.local.php
# Disable CSS/JS aggregation via Drush
ddev drush config:set system.performance css.preprocess 0 -y
ddev drush config:set system.performance js.preprocess 0 -y
# Enable Twig debugging
# Edit sites/default/services.yml:
# twig.config:
# debug: true
# auto_reload: true
# cache: false
# Clear cache
ddev drush cr
Containers won't start:
# Check Docker is running
docker ps
# Restart DDEV
ddev restart
# Power off and restart
ddev poweroff
ddev start
# Clean restart
ddev restart --clean
Port conflicts:
# Check what's using ports
ddev describe
# Change ports in .ddev/config.yaml:
# router_http_port: "8080"
# router_https_port: "8443"
# Restart
ddev restart
Permission issues:
# Fix file permissions
ddev exec chmod -R 755 web/sites/default/files
ddev exec chown -R www-data:www-data web/sites/default/files
Drush not found:
# Always run through DDEV
ddev drush status
# Not just: drush status
Configuration sync failures:
# Check for overridden configuration
ddev drush config:status
# Force import
ddev drush cim -y --partial
# Check specific config
ddev drush config:get system.site
Database update failures:
# Run with verbose output
ddev drush updb -v
# Check specific module updates
ddev drush updatedb:status
# Check logs
ddev drush watchdog:show
Enable Mutagen:
# In .ddev/config.yaml
ddev config --mutagen-enabled
# Restart
ddev restart
Enable NFS:
# In .ddev/config.yaml
ddev config --nfs-mount-enabled
# Restart
ddev restart
Disable Xdebug when not debugging:
ddev xdebug off
Use specific commands instead of aliases:
# Faster (loads less)
ddev drush cache:rebuild
# vs
ddev drush cr
references/ddev.md - Complete DDEV reference
references/drush.md - Complete Drush reference
# Find DDEV command
grep -r "ddev snapshot" references/
# Find Drush command
grep -r "config:import" references/
# Find deployment info
grep -r "deployment" references/
git clone <repo>ddev configddev startddev composer installddev import-db --src=db.sql.gzddev drush crddev launchddev drush cex -ygit add config/ && git commitgit pushdrush cim -y && drush crddev xdebug onddev launchddev xdebug offbrew upgrade ddev (Mac) or platform equivalent