PHPackages                             augustash/ddev-drupal - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [DevOps &amp; Deployment](/categories/devops)
4. /
5. augustash/ddev-drupal

ActiveLibrary[DevOps &amp; Deployment](/categories/devops)

augustash/ddev-drupal
=====================

AugustAsh ddev installer.

1.1.59(2w ago)16.2k↑204.4%1MITPHPPHP &gt;=7

Since Jul 17Pushed 4w ago4 watchersCompare

[ Source](https://github.com/augustash/ddev-drupal)[ Packagist](https://packagist.org/packages/augustash/ddev-drupal)[ RSS](/packages/augustash-ddev-drupal/feed)WikiDiscussions master Synced 2d ago

READMEChangelogDependencies (2)Versions (73)Used By (0)

Setup
=====

[](#setup)

### Single line

[](#single-line)

```
ddev composer config --json --merge extra.drupal-scaffold.allowed-packages '["augustash/ddev-drupal"]' && ddev composer config scripts.ddev-setup "Augustash\\Ddev::postPackageInstall" && ddev composer config scripts.post-update-cmd "Augustash\\Ddev::postUpdate" && ddev composer require --dev augustash/ddev-drupal && ddev composer ddev-setup
```

> **Why scalar `composer config`, not `--json`?** The two script values contain backslashes (the `Augustash\Ddev` namespace separator). Passing them as inline JSON through `ddev composer config --json '[...]'` lets the double shell (host → container) eat the backslashes, so Composer stores the value as a quoted *string*— `"[\"Augustash\\Ddev::postUpdate\"]"` — instead of an array. The next `composer update` then fails with `Class "[\"Augustash\Ddev ... is not autoloadable`. The scalar form above sidesteps it: a single hook is a valid scalar script value. (The `allowed-packages` line keeps `--json` safely — it has no backslashes.)
>
> **Already have a `post-update-cmd`?** (e.g. a Pantheon `DrupalComposerManaged\ComposerScripts::postUpdate` hook) the scalar command *replaces* it. Skip that one segment and instead add `Augustash\Ddev::postUpdate`to the existing array by editing `composer.json` directly, so both hooks run:
>
> ```
> "post-update-cmd": [
>     "DrupalComposerManaged\\ComposerScripts::postUpdate",
>     "Augustash\\Ddev::postUpdate"
> ]
> ```

Updating
========

[](#updating)

The generated scaffolding and hooks refresh **automatically** on every `composer update`: the `post-update-cmd` hook (`Augustash\Ddev::postUpdate`) re-runs setup in update mode without re-prompting. So pulling the latest `ddev-drupal` is normally all you need:

```
ddev composer update augustash/ddev-drupal
```

Update mode keeps your existing `config.yaml` values (client code, docroot, Drupal/PHP version, subdomains) and only rebuilds what may have changed — Selenium, BrowserSync, Solr (if already enabled), the Terminus image, and the Pantheon add-on hook (upgraded in place to track `develop`). Run `ddev restart`afterward to rebuild the containers and re-pull add-ons.

To force a refresh **without** updating the package — or to run the one-time wkhtmltopdf→dompdf migration, which the automatic hook skips — re-run setup manually in update mode (`-u`):

```
ddev composer ddev-setup -- -u
```

Omit `-u` to be re-prompted for the configuration values (the original setup flow):

```
ddev composer ddev-setup
```

### Zookeeper image swap (Solr add-on)

[](#zookeeper-image-swap-solr-add-on)

The `zoo` service moved from the legacy Bitnami image to the official multi-arch `zookeeper:3.9` image (fixes the `linux/amd64` platform warning on Apple Silicon). The data path changed from `/bitnami/zookeeper` to `/data`, so the existing volume must be recreated. After updating the add-on, run:

```
ddev stop && docker volume rm "ddev-$(ddev describe -j | jq -r .raw.name)_zoo" && ddev start
```

The `post-start` `ddev solrcollection` hook will repopulate the configset and recreate the collection in the fresh ZK store.

Configuration
=============

[](#configuration)

On ddev-setup, you will be prompted for:

- Client code
- Document root (defaults to `web`)
- Drupal version
- PHP version
- Is this site hosted on Pantheon? — if yes:
    - Pantheon site name
    - Pantheon site environment
- Subdomains (optional)
- Solr support

These are used to set config.yaml ddev configuration.

Database
========

[](#database)

Database pull is handled by the [ddev-pantheon-db](https://github.com/augustash/ddev-pantheon-db) add-on, which is automatically installed on `ddev start`.

Will not download if there is more than one table in the existing local db.

To force a fresh pull: `ddev db -f`

Troubleshooting
===============

[](#troubleshooting)

#### Configset upload failed with error code 405: Solr HTTP error: OK (405).
Solr HTTP error: OK (405).

[](#configset-upload-failed-with-error-code-405-solr-http-error-ok-405solr-http-error-ok-405)

- Rerun ddev start.

#### Drush was unable to query the database.

[](#drush-was-unable-to-query-the-database)

- The key part is 'Drush was unable to query the database'.
    - Make sure you do not have database credentials in settings.local.
    - You have an empty database, partial import, something is wrong with it.
    - Download a fresh database.

#### Failed to execute command drush en search\_api\_solr\_admin -y.
Failed to execute command drush sapi-sl --field=id:.
Failed to execute command drush solr-upload-conf.

[](#failed-to-execute-command-drush-en-search_api_solr_admin--yfailed-to-execute-command-drush-sapi-sl---fieldidfailed-to-execute-command-drush-solr-upload-conf)

- Run composer require drupal/search\_api\_solr\_admin -W.
- Run ddev solrcollection.

#### Server \[server-name\] is not a Solr server.

[](#server-server-name-is-not-a-solr-server)

- An existing solr server is configured as a database server.
    - Remove this server and create a new solr cloud server.
    - Ensure your settings.local overrides are correct.

#### (The) server with ID 'local' could not be retrieved for index 'Global'.

[](#the-server-with-id-local-could-not-be-retrieved-for-index-global)

- The server 'local' does not exist.
- Comment out configuration overrides in settings.local.php.
    - Start ddev, create the server \[name\].
        - Assign the following values:
            - Server name: local
            - Backend: solr
            - Configure Solr Backend: Solr Cloud with Basic Auth
            - Default Solr Collection: search
            - Username: solr
            - Password: SolrRocks
    - Uncomment configuration values.
    - Make sure \[name\] matches the configuration overrides, in all respective lines.
        - Ex. $config\['search\_api.index.global'\]\['server'\] = \[name\];
        - Ex. $config\['search\_api.server.\[name\]'\]\['backend\_config'\]\['connector'\] = 'solr\_cloud\_basic\_auth';
    - Run: ddev solrcollection

#### Solr version is 8.8.2 in docker-compose.solr, but does not match server version.

[](#solr-version-is-882-in-docker-composesolr-but-does-not-match-server-version)

- Build version was changed to 8.8.2 to match Pantheon hosts exact version.
    - Recreate your collection.
        - Navigate in your browser to http://\[site-name\].ddev.site:8983/solr/#/~collections.
            - Delete existing collection.
            - Run ddev solrcollection.
    - Reload your collection.
        - Navigate to http://\[site-name\].ddev.site/admin/config/search/search-api/server/\[server-name\].
            - Click 'Reload Collection'.
            - Server version should now be 8.8.2.

#### TypeError: Drupal\\search\_api\_solr\\Utility\\SolrCommandHelper::\_\_construct(): Argument #4 ($configset\_controller) must be of type Drupal\\search\_api\_solr\\Controller\\SolrConfigSetController.

[](#typeerror-drupalsearch_api_solrutilitysolrcommandhelper__construct-argument-4-configset_controller-must-be-of-type-drupalsearch_api_solrcontrollersolrconfigsetcontroller)

- Update drupal/search\_api\_pantheon.

###  Health Score

51

—

FairBetter than 95% of packages

Maintenance95

Actively maintained with recent releases

Popularity26

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 82.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~15 days

Recently: every ~3 days

Total

71

Last Release

16d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/097ea6514c7dff8bd82162fe88411080a14444a73f86c15ab22eefe28a33059d?d=identicon)[jacerider](/maintainers/jacerider)

![](https://www.gravatar.com/avatar/6cc8e38c0ae4454c5cba5af7c2568edd72238113544f29d322fe8b907330e637?d=identicon)[weberjacob](/maintainers/weberjacob)

![](https://www.gravatar.com/avatar/58f09f3094dbf20ec7c4e7539132ab26b92f16b4aad1aed8812740383ca2af18?d=identicon)[kazajhodo](/maintainers/kazajhodo)

---

Top Contributors

[![kazajhodo](https://avatars.githubusercontent.com/u/1173204?v=4)](https://github.com/kazajhodo "kazajhodo (183 commits)")[![jacerider](https://avatars.githubusercontent.com/u/638651?v=4)](https://github.com/jacerider "jacerider (40 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/augustash-ddev-drupal/health.svg)

```
[![Health](https://phpackages.com/badges/augustash-ddev-drupal/health.svg)](https://phpackages.com/packages/augustash-ddev-drupal)
```

###  Alternatives

[widop/google-analytics-bundle

Google certificate-based authentication in server-to-server interactions with google analytics

43283.2k](/packages/widop-google-analytics-bundle)[in2code/in2publish_core

Content publishing extension to connect stage and production server

40143.4k](/packages/in2code-in2publish-core)[tiamo/phpas2

PHPAS2 is a php-based implementation of the EDIINT AS2 standard

4778.9k](/packages/tiamo-phpas2)[wapmorgan/php-rpm-packager

RPM packager for PHP applications.

106.6k](/packages/wapmorgan-php-rpm-packager)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
