Adding New Project Types¶
Adding and maintaining project types (like
magento2, etc.) is not too hard. Please update and add to this doc when you find things that have been missed.
To add a new project type:
- Add the new type to the list in
- Add to
- Create a new go file for your project type, like
- Implement the functions that you think are needed for your project type and add references to them in your
appTypeMatrixstanza. There are lots of examples that you can start with in places like
shopware6.go, etc. The comments in the code in
appTypeFuncsfor each type of action tell what these are for, but here’s a quick summary.
settingsCreatoris the function that will create a main settings file if none exists.
uploadDirreturns the filepath of the user-uploaded files directory for the project type, like
sites/default/filesfor Drupal or
hookDefaultCommentsadds comments to config.yaml about hooks with an example for that project type. It’s probably not useful at all.
apptypeSettingsPathsreturns the paths for the main settings file and the extra settings file that DDEV may create (like settings.ddev.php for Drupal).
appTypeDetectis a function that determines whether the project is of the type you’re implementing.
postImportDBActioncan do something after db import. I don’t see it implemented anywhere.
configOverrideActioncan change default config for your project type. For example, your CMS may require
php8.3, so a
configOverrideActioncan change the php version.
postConfigActiongives a chance to do something at the end of config, but it doesn’t seem to be used anywhere.
postStartActionadds actions at the end of
ddev start. You’ll see several implementations of this, for things like creating needed default directories, or setting permissions on files, etc.
ddev import-filesworks for this project type.
defaultWorkingDirMapallows the project type to override the project’s
ddev execstart by default). This is mostly not done anymore, as the
working_diris typically the project root.
composerCreateAllowedPathsspecifies the paths that can exist in a directory when
ddev composer createis being used.
- You’ll likely need templates for settings files, use the Drupal or TYPO3 templates as examples, for example
pkg/ddevapp/typo3. Those templates have to be loaded at runtime as well.
- Once your project type starts working and behaving as you’d like, you’ll need to add test artifacts for it and try testing it (locally first).
- Add your project to
- Create a DDEV project named
testpkg<projectype>somewhere and get it going and working with a database and files you can export.
- Export the database, files, and (optionally) code to tarballs or
.sql.gz. Put them somewhere on the internet—they’ll end up in
ddev/ddev_test_tarballs. I can give you permissions on that if you like. The
magento2project has descriptions explaining how each tarball gets created. Do that for yours as well.
- Run the test and get it working. I usually use the trick of setting
GOTEST_SHORT=7. Then set that environment variable in the GoLand profile or your environment.
export GOTEST_SHORT=7 && make testpkg TEST_ARGS="-run TestDdevFullsiteSetup"
- Add your project to