DDEV https://brookemahoney.com/ en DDEV https://brookemahoney.com/blog/ddev <span class="field field--name-title field--type-string field--label-hidden">DDEV</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__items"> <div class="field__item"><p>Just some notes about DDEV</p><p><code>ddev snapshot --name=seed</code>&nbsp;</p><p><code>ddev delete</code></p><p><code>ddev start</code></p><h2>Addons for base Drupal configurations</h2><h3>Descriptions of 4 common ways to setup DDEV</h3><table><thead><tr><th>Add-on</th><th>Best for</th><th>Typical project layout</th></tr></thead><tbody><tr><td><a href="https://github.com/UltraBob/ddev-drupal-code-quality"><code>UltraBob/ddev-drupal-code-quality</code></a></td><td>Full Drupal website projects where your site repo already contains Drupal code and custom code.</td><td>Existing site/project repo; installs code-quality configs and IDE shims in-place.</td></tr><tr><td><a href="https://github.com/ddev/ddev-drupal-contrib"><code>ddev/ddev-drupal-contrib</code></a></td><td>Drupal contrib module/theme development where the contrib project is the center of the repo.</td><td>Contrib project repo with Drupal scaffolded around it (symlink workflow).</td></tr><tr><td><a href="https://github.com/justafish/ddev-drupal-core-dev"><code>justafish/ddev-drupal-core-dev</code></a> / <a href="https://github.com/joachim-n/ddev-drupal-core-dev"><code>joachim-n/ddev-drupal-core-dev</code></a></td><td>Drupal core development.</td><td>Drupal core checkout or core-dev project template.</td></tr><tr><td><a href="https://addons.ddev.com/addons/amateescu/ddev-drupal-dev">https://addons.ddev.com/addons/amateescu/ddev-drupal-dev</a></td><td>Drupal core and contrib combined, see below</td><td>core git checkout as the project root.</td></tr></tbody></table><h3>DDEV Drupal Dev from Andrei Mateescu of Tag1</h3><p>A DDEV add-on for working on Drupal core and contrib modules together, using a core git checkout as the project root.</p><p>Other add-ons target either core or contrib in isolation. This one is for when you need both: developing a contrib module against the latest core, fixing a core bug that affects contrib, or running contrib tests on a core patch.</p><p>Extra dependencies (contrib modules, Drush, dev tools) are managed through a <code>composer.local.json</code> overlay, keeping core's <code>composer.json</code> and <code>composer.lock</code> untouched.</p><p>"You can work on multiple modules this way; each gets its own git checkout that you can commit and push to independently."</p></div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>brooke</span></span> <span class="field field--name-created field--type-created field--label-hidden"><time datetime="2026-11-02T11:59:42-08:00" title="Monday, 2 November 2026 - 11:59" class="datetime">Mon, 2 Nov 2026 - 11:59</time> </span> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Tags</div> <div class="field__items"> <div class="field__item"><a href="https://brookemahoney.com/tags/drupal" hreflang="en">Drupal</a></div> <div class="field__item"><a href="https://brookemahoney.com/tags/ddev" hreflang="en">DDEV</a></div> </div> </div> Mon, 02 Nov 2026 19:59:42 +0000 brooke 180 at https://brookemahoney.com Contrib Drupal Module Development https://brookemahoney.com/blog/contrib-drupal-module-development <span class="field field--name-title field--type-string field--label-hidden">Contrib Drupal Module Development</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__items"> <div class="field__item"><p>One way to set up local Development for a contrib module using e0ipso's AI suite. See <a href="https://www.youtube.com/watch?v=q0R9e7KhBsg">Agentic Coding Harness for Drupal&nbsp;</a></p><ul><li>opt out of T3 telemetry by adding the following to <code>~/.ddev/.env</code><ul><li><code>T3CODE_TELEMETRY_ENABLED=false</code></li></ul></li><li>Install <a href="https://github.com/e0ipso/self-review">https://github.com/e0ipso/self-review</a></li><li>Then:</li></ul><pre><code class="language-plaintext">BDEV_CURRENT_SITE="config_suite" cd ~/Sites git clone git@git.drupal.org:project/$BDEV_CURRENT_SITE.git cd $BDEV_CURRENT_SITE cp ~/projects/.gitignore-ddev .gitignore ddev config --project-type=drupal11 --docroot=web orb ddev add-on get ddev/ddev-drupal-contrib ddev add-on get hanoii/ddev-drupal-contrib-extras ddev start ddev poser ddev symlink-project ddev config --update ddev restart ddev drush si -y ddev drush en $BDEV_CURRENT_SITE -y open $(ddev drush uli) ddev exec "cd web/core &amp;&amp; yarn install" # Temporary workaround on Mac because e0ipso's plugin only works for Linux for importing local OpenCode config mkdir -p $HOME/Sites/$BDEV_CURRENT_SITE/.ddev/homeadditions/.local/share ln -s $HOME/.local/share/opencode $HOME/Sites/$BDEV_CURRENT_SITE/.ddev/homeadditions/.local/share/opencode ddev add-on get e0ipso/ddev-playwright-cli ddev add-on get e0ipso/ddev-assistant-opencode ddev add-on get e0ipso/ddev-assistant-t3 ddev restart # Allows running playwright-cli from inside the container # without having to use the --config option # Symlinks .claude playwright skills to .agents folder for other harnesses. ddev ssh rm .playwright/cli.config.json ln -s "$(pwd)/.ddev/playwright-cli/cli.config.json" .playwright/cli.config.json mkdir -p .agents/skills ln -s "$(pwd)/.claude/skills/playwright-cli" .agents/skills/playwright-cli exit npx kenkeep init --harnesses opencode npx kenkeep doctor npx kenkeep pack import e0ipso/kenkeep-pack-drupal npx strikethroo init --harnesses opencode npx skills add e0ipso/strikethroo </code></pre><p>Strikethroo workflow: <a href="https://strikethroo.canpicasoft.com/workflow.html">https://strikethroo.canpicasoft.com/workflow.html</a> Kenkeep docs: <a href="https://kenkeep.canpicasoft.com/">https://kenkeep.canpicasoft.com/</a></p><ul><li><code>ddev t3 start</code></li><li><code>npx strikethroo serve</code></li><li><code>/st-create-plan display a welcome message to new users</code></li><li><code>/st-refine-plan 1, see review.xml</code></li><li><code>/st-execute-blueprint 1</code></li><li><code>/st-code-review 1, line 95 in example.module has a typo: "piece" should be "peace"</code></li></ul></div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>brooke</span></span> <span class="field field--name-created field--type-created field--label-hidden"><time datetime="2026-11-02T11:58:32-08:00" title="Monday, 2 November 2026 - 11:58" class="datetime">Mon, 2 Nov 2026 - 11:58</time> </span> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Tags</div> <div class="field__items"> <div class="field__item"><a href="https://brookemahoney.com/tags/ai" hreflang="en">AI</a></div> <div class="field__item"><a href="https://brookemahoney.com/tags/drupal" hreflang="en">Drupal</a></div> <div class="field__item"><a href="https://brookemahoney.com/tags/ddev" hreflang="en">DDEV</a></div> </div> </div> Mon, 02 Nov 2026 19:58:32 +0000 brooke 179 at https://brookemahoney.com