An Agent Skill for automating DDEV environment setup in TYPO3 extension projects
This is an Agent Skill following the open standard originally developed by Anthropic and released for cross-platform use.
Supported Platforms:
- β Claude Code (Anthropic)
- β Cursor
- β Windsurf
- β GitHub Copilot
- β Other skills-compatible AI agents
Skills are portable packages of procedural knowledge that work across any AI agent supporting the Agent Skills specification.
This skill helps TYPO3 extension developers quickly set up a complete DDEV development environment with multiple TYPO3 versions. Instead of manually configuring DDEV, this skill automates the entire process - from detecting your extension metadata to generating all configuration files and installing TYPO3.
- β Detects TYPO3 extension projects automatically
- β Extracts extension metadata (key, package name, namespace)
- β Generates complete DDEV configuration
- β Creates multi-version TYPO3 testing environment (11.5, 12.4, 13.4 LTS)
- β Provides backend and frontend access with preconfigured credentials
- β Includes custom DDEV commands for easy TYPO3 installation
- TYPO3 extension developers
- Teams working on TYPO3 extensions
- Developers needing to test extensions across multiple TYPO3 versions
- Anyone wanting a quick, reproducible TYPO3 development environment
Before using this skill, ensure you have:
- DDEV installed
- Docker running
- A TYPO3 extension project (with
ext_emconf.phporcomposer.json) - A skills-compatible AI agent (Claude Code, Cursor, Windsurf, GitHub Copilot, etc.)
Add the Netresearch marketplace once, then browse and install skills:
# Claude Code
/plugin marketplace add netresearch/claude-code-marketplacenpx (skills.sh)
Install with any Agent Skills-compatible agent:
npx skills add https://github.com/netresearch/typo3-ddev-skill --skill typo3-ddevDownload the latest release and extract to your agent's skills directory.
git clone https://github.com/netresearch/typo3-ddev-skill.gitcomposer require netresearch/typo3-ddev-skillRequires netresearch/composer-agent-skill-plugin.
Once installed, invoke the skill in your TYPO3 extension project directory:
Via slash command:
/typo3-ddev
Via natural language:
Set up DDEV for my TYPO3 extension
The skill will:
- Validate prerequisites (DDEV, Docker, TYPO3 extension structure)
- Extract your extension metadata
- Confirm configuration with you
- Generate all
.ddev/files with proper values - Guide you through starting DDEV and installing TYPO3
After setup, you'll have:
project-root/
βββ .ddev/
β βββ config.yaml
β βββ docker-compose.web.yaml
β βββ apache/
β β βββ apache-site.conf
β βββ web-build/
β β βββ Dockerfile
β βββ commands/
β βββ web/
β βββ install-v11
β βββ install-v12
β βββ install-v13
β βββ install-all
βββ Classes/
βββ Configuration/
βββ ext_emconf.php
βββ composer.json
Once installed, access TYPO3 at:
Overview Dashboard:
https://your-ext.ddev.site/
TYPO3 14.3 LTS (default / gold standard):
- Frontend:
https://v14.your-ext.ddev.site/ - Backend:
https://v14.your-ext.ddev.site/typo3/
TYPO3 13.4 LTS:
- Frontend:
https://v13.your-ext.ddev.site/ - Backend:
https://v13.your-ext.ddev.site/typo3/
TYPO3 12.4 LTS:
- Frontend:
https://v12.your-ext.ddev.site/ - Backend:
https://v12.your-ext.ddev.site/typo3/
TYPO3 11.5 LTS (ELTS):
- Frontend:
https://v11.your-ext.ddev.site/ - Backend:
https://v11.your-ext.ddev.site/typo3/
Username: admin
Password: Joh316!!
The overview dashboard automatically uses branded templates based on your project:
| Vendor | Template | Branding |
|---|---|---|
netresearch/* |
Netresearch | Turquoise (#2F99A4), [n] logo |
| All others | TYPO3 | Orange (#FF8700), TYPO3 swoosh |
Features:
- Three-state theme switcher (Light / System / Dark)
- Git branch and commit info display
- Links to TER, Packagist, GitHub, Documentation, Mailpit
- TYPO3 version cards with Frontend/Backend links
- Composer package name display
Generate or regenerate the landing page:
ddev generate-indexTemplate Variables (auto-detected from composer.json):
{{EXTENSION_NAME}}- Human-readable extension name{{COMPOSER_PACKAGE}}- Composer package name{{TER_EXTENSION_KEY}}- TER extension key{{GITHUB_REPO}}- GitHub repository URL{{GIT_BRANCH}}- Current git branch{{GIT_COMMIT_SHORT}}- Short commit hash
The skill creates these custom commands:
# Install specific TYPO3 version
ddev install-v14 # TYPO3 14.3 LTS (default / gold standard)
ddev install-v13 # TYPO3 13.4 LTS
ddev install-v12 # TYPO3 12.4 LTS
ddev install-v11 # TYPO3 11.5 LTS (ELTS)
# Install all versions at once
ddev install-all
# Install Introduction Package (demo content)
ddev install-introduction v13Test your extension with realistic content using the TYPO3 Introduction Package:
# Install Introduction Package
ddev install-introduction v13Includes:
- 86+ pages with example content
- 226+ content elements (text, images, forms, tables)
- Multi-language support (EN, DE, DA)
- Bootstrap Package responsive theme
- Perfect for testing RTE features
For extensions needing additional setup (RTE config, TSconfig, TypoScript), create a custom configuration command:
# Copy template
cp .ddev/templates/commands/web/configure-extension.optional \
.ddev/commands/web/configure-myext
# Customize for your extension's needs
# Add: RTE YAML, Page TSConfig, TypoScript, site package setup
# Run after TYPO3 installation
ddev configure-myext v13Use Cases:
- RTE/CKEditor plugins - Configure toolbar, import plugin YAML
- Backend modules - Set up TSconfig, permissions
- Frontend plugins - TypoScript configuration, example content
Pattern Benefits:
- One-command post-install setup
- Consistent team configuration
- Includes demo content automatically
- Reduces manual configuration errors
See SKILL.md for detailed examples and template structure.
If reinstalling TYPO3:
ddev mysql -e "DROP DATABASE IF EXISTS v13; CREATE DATABASE v13;"
ddev install-v13Check and restart services:
docker ps --filter "name=ddev-your-ext"
ddev restartFlush caches:
ddev exec -d /var/www/html/v13 vendor/bin/typo3 cache:flushThe setup creates a unique multi-version environment:
- Extension Source: Mounted at
/var/www/{{EXTENSION_KEY}}(your project root) - TYPO3 Installations: Separate directories for each version (
/var/www/html/v11,v12,v13) - Extension Installation: Installed via Composer path repository in each TYPO3 version
- Persistent Data: Docker volumes for each TYPO3 version database and files
This architecture allows you to:
- Develop extension code in your project root
- Test immediately across all TYPO3 versions
- Keep TYPO3 installations separate and clean
- Avoid committing TYPO3 core files to your extension repository
By default, the skill supports:
- TYPO3 14.3 LTS (PHP 8.2+, up to 8.5) β default / gold standard
- TYPO3 13.4 LTS (PHP 8.2+)
- TYPO3 12.4 LTS (PHP 8.1+)
- TYPO3 11.5 LTS (PHP 8.0+) β ELTS
PHP version is set to 8.2 for maximum compatibility.
After generation, you can customize:
PHP Version (.ddev/config.yaml):
php_version: "8.3" # Change to 8.1, 8.3, or 8.5 if neededPHP Patch Upgrades (.ddev/web-build/Dockerfile.apt):
When DDEV ships an older PHP patch (e.g., 8.5.0RC3) and you need a newer one (e.g., 8.5.1):
# .ddev/web-build/Dockerfile.apt
RUN apt-get update
RUN apt-get install --only-upgrade -y php${PHP_VERSION}-*Then run ddev restart.
PHP Extensions (.ddev/web-build/Dockerfile):
# Use apt-get, NOT pecl (pecl not available in DDEV)
RUN apt-get update && apt-get install -y php${PHP_VERSION}-pcov
RUN apt-get update && apt-get install -y php${PHP_VERSION}-redisCustom PHP Settings (.ddev/php/custom.ini):
memory_limit = 512M
max_execution_time = 300XDebug (enable/disable):
ddev xdebug on # Enable
ddev xdebug off # DisableDatabase (Tiered Selection: SQLite/MariaDB/PostgreSQL/MySQL):
The skill uses intelligent tiered database selection based on extension complexity:
π― Tier 1: SQLite (Simple Extensions - Development Optimized)
For extensions using only TYPO3 Core APIs (no custom tables, no raw SQL):
# No .ddev/config.yaml database config needed
# TYPO3 installation automatically uses SQLiteBenefits:
- β‘ Startup: 5-10 seconds faster per ddev start
- πΎ RAM: 900 MB saved (no container)
- πΏ Disk: 744 MB saved
- π Perfect v11/v12/v13 isolation
π§ Tier 2: MariaDB 10.11 (Complex Extensions - Production Parity)
For extensions with custom tables, raw SQL, or unknown complexity:
# Default for complex extensions (.ddev/config.yaml)
database:
type: mariadb
version: "10.11"Why MariaDB 10.11? Production standard (95% hosting), extension compatibility, 13-36% faster than MySQL 8.
π Tier 3 & 4: Specialized Databases
# PostgreSQL 16 (for GIS, analytics, full-text search)
database:
type: postgres
version: "16"
# MariaDB 11 (forward-looking performance)
database:
type: mariadb
version: "11.4"
# MySQL 8.0 (corporate/Oracle ecosystem)
database:
type: mysql
version: "8.0"For detailed rationale, see docs/adr/0002-mariadb-default-with-database-alternatives.md.
Caching Service (Valkey or Redis):
The skill provides Valkey 8 as the default caching service (open source, future-proof):
# Default: Valkey 8
cp .ddev/templates/docker-compose.services.yaml.optional .ddev/docker-compose.services.yaml
# Alternative: Redis 7 (for legacy production parity)
cp .ddev/templates/docker-compose.services-redis.yaml.optional .ddev/docker-compose.services.yaml
# Restart DDEV
ddev restartWhy Valkey? True open source (BSD-3), AWS/Google/Oracle backing, 30% smaller than Redis 8, cost-effective. See docs/adr/0001-valkey-default-with-redis-alternative.md for details.
Additional Services (add to .ddev/docker-compose.services.yaml):
# The services template includes: Valkey/Redis, MailPit, Ofelia
# See SKILL.md for complete documentationPort Conflicts:
# Check what's using ports 80/443
sudo lsof -i :80
sudo lsof -i :443
# Option 1: Stop conflicting services
# Option 2: Change ports in .ddev/config.yaml
router_http_port: "8080"
router_https_port: "8443"If DDEV ships with an older PHP patch version:
# Create .ddev/web-build/Dockerfile.apt
echo 'RUN apt-get update' > .ddev/web-build/Dockerfile.apt
echo 'RUN apt-get install --only-upgrade -y php${PHP_VERSION}-*' >> .ddev/web-build/Dockerfile.apt
ddev restartDDEV doesn't include pecl. Use apt-get instead:
# In .ddev/web-build/Dockerfile
RUN apt-get update && apt-get install -y php${PHP_VERSION}-pcovPlace settings in .ddev/php/custom.ini, NOT in /usr/local/etc/php/conf.d/:
# .ddev/php/custom.ini (correct location)
memory_limit = 512MCheck Composer Issues:
ddev ssh
composer diagnoseView Installation Logs:
ddev logsRetry Installation:
# For specific version
ddev ssh
rm -rf /var/www/html/v13/*
exit
ddev install-v13Verify Extension Key:
ddev ssh
echo $EXTENSION_KEY # Should match your ext_emconf.phpCheck Composer Repository:
ddev ssh
cd /var/www/html/v13
composer config repositoriesFor complete troubleshooting guide, see references/troubleshooting.md.
Contributions welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This skill is based on the excellent work by Armin Vieweg in ddev-for-typo3-extensions.
This project uses split licensing:
- Code (scripts, workflows, configs): MIT
- Content (skill definitions, documentation, references): CC-BY-SA-4.0
See the individual license files for full terms.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- TYPO3 Slack: #ddev channel
Made with β€οΈ for the TYPO3 Community by Netresearch DTT GmbH