Skip to content

feat: use docker-compose library, optionally download docker-buildx, fixes #7915, fixes #8295#8234

Draft
stasadev wants to merge 1 commit intomainfrom
20260317_stasadev_compose_library
Draft

feat: use docker-compose library, optionally download docker-buildx, fixes #7915, fixes #8295#8234
stasadev wants to merge 1 commit intomainfrom
20260317_stasadev_compose_library

Conversation

@stasadev
Copy link
Copy Markdown
Member

@stasadev stasadev commented Mar 17, 2026

The Issue

Related:

How This PR Solves The Issue

We added a requirement for docker-buildx in #8149. Docker Compose has required this since v2.40.2, but the requirement was only triggered when installing extra packages or using EOL PHP versions like 7.4.

This PR replaces the bundled docker-compose binary with the Docker Compose SDK and adds optional download of docker-buildx to $HOME/.ddev/bin.

Docker Compose (SDK)

  • Switched from a standalone docker-compose binary to the Docker Compose Go library
  • cliPluginsExtraDirs is set to $HOME/.ddev/bin in docker_manager.go so plugins stored there are found automatically (this only works with the SDK, not the standalone binary)
  • Removed the goroutine for docker-compose pull in ddev start - the concurrent output was corrupted on first run when no Docker images were present, caused by the performance optimizations in perf: combined startup time optimizations, for #8096 #8145
  • Docker Compose output is now shown as-is (with stopwatch on the right), previously filtered manually

Docker Buildx (optional download)

  • By default, DDEV uses the system-provided docker-buildx (avoids overriding Docker Desktop's patched builds and keeps IDE compatibility)
  • Added --docker-buildx-version flag to ddev config global to optionally download a specific buildx version to $HOME/.ddev/bin/docker-buildx
  • ddev config global --docker-buildx-version= or --docker-buildx-version=system resets to the system buildx
  • Removed the buildx check from root.go; buildx is now checked/downloaded only in ddev start, ddev version, ddev utility rebuild, and ddev utility dockercheck
  • ddev utility dockercheck shows a warning when a specific buildx version is configured (useful for support requests)
  • Buildx is not downloaded when Docker host is unreachable

Other changes

  • ddev version now works when Docker is completely broken - shows all version details, reports the Docker error at the end
  • ddev config now works without a working Docker (allows configuring a project or setting --docker-buildx-version in ddev config global)
  • ddev poweroff output is significantly improved - previously showed no output while waiting, reported in ddev poweroff takes longer than it should, seems to hang after each project is stopped #8295
  • ddev utility dockercheck now uses dockerutil.RunCLIPluginCommand instead of calling docker buildx directly

Manual Testing Instructions

Buildx:

ddev config global --docker-buildx-version=0.33.0 && ddev version
# Should download buildx and show 0.33.0 in docker-buildx line

ddev config global --docker-buildx-version=foo && ddev version
# Should fail with buildx error

ddev start
# Should fail with the same buildx error

ddev config global --docker-buildx-version=foo && DOCKER_HOST=foo ddev version
# Should show a Docker error, not a buildx error

ddev config global --docker-buildx-version=0.32.1 && DOCKER_HOST=foo ddev version
# Should not download anything (Docker host is wrong)

DOCKER_HOST=foo ddev version
# Should fail but show all version details

ddev config global --docker-buildx-version=0.33.0 && ddev utility dockercheck
# Should show warning about using a specific buildx version

ddev config global --docker-buildx-version=
ddev config global --docker-buildx-version=system
# Both should reset to system buildx

Compose:

# Remove local docker-compose, confirm it is not re-downloaded
rm ~/.ddev/bin/docker-compose && ddev version

# Run start and note the modern compose output (stopwatch on the right)
ddev start
ddev start --no-cache

# Test fresh start
ddev delete images --all
docker buildx prune
ddev start

Compare with DDEV HEAD, use --no-cache due to #8145 output differences):

DDEV_DEBUG=true ddev restart
DDEV_DEBUG=true ddev restart --json-output
DDEV_DEBUG=true ddev restart --no-cache
DDEV_DEBUG=true ddev restart --json-output --no-cache

DDEV_VERBOSE=true ddev restart
DDEV_VERBOSE=true ddev restart --json-output
DDEV_VERBOSE=true ddev restart --no-cache
DDEV_VERBOSE=true ddev restart --json-output --no-cache

Compare ddev poweroff output on DDEV HEAD vs this PR - output should now show progress instead of silence.

Run Craft CMS quickstart https://docs.ddev.com/en/stable/users/quickstart/#craft-cms, it should show the usual output for composer install and ask interactive questions, see the comment below why this is important.

Automated Testing Overview

  • Added pkg/dockerutil/docker_buildx.go with tests in docker_buildx_test.go
  • Added pkg/dockerutil/docker_compose_internal_test.go for internal compose logic
  • Extended docker_compose_test.go and docker_manager_test.go
  • Added stdin_dup.go / stdin_dup_windows.go with tests (stdin duplication for SDK integration)

Release/Deployment Notes

  • docker-compose is no longer downloaded to $HOME/.ddev/bin - existing binaries there are ignored (I didn't add any cleanup for $HOME/.ddev/bin/docker-compose)
  • New global hidden config option docker-buildx-version in ~/.ddev/global_config.yaml
  • Behavior change: buildx check is skipped in most commands; only runs on ddev start, ddev version, ddev utility rebuild, ddev utility dockercheck

@github-actions github-actions Bot added dependencies Pull requests that update a dependency file enhancement labels Mar 17, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Mar 17, 2026

@stasadev stasadev force-pushed the 20260317_stasadev_compose_library branch 3 times, most recently from 5c26179 to 25b59e4 Compare March 17, 2026 23:02
@stasadev stasadev force-pushed the 20260317_stasadev_compose_library branch from 25b59e4 to dc7e9aa Compare March 18, 2026 11:25
@rfay rfay force-pushed the 20260317_stasadev_compose_library branch from dc7e9aa to aa23000 Compare April 1, 2026 19:30
@rfay
Copy link
Copy Markdown
Member

rfay commented Apr 1, 2026

Rebased, trivial merge conflict.

@rfay

This comment was marked as outdated.

@stasadev
Copy link
Copy Markdown
Member Author

stasadev commented May 1, 2026

About the new private docker-buildx binary: I lean toward using the system-provided buildx.

Reason: all IDEs run Docker containers in one way or another, and they won't see our privately stored docker-buildx binary - there isn't even an option for that, unlike what we had for docker-compose.

I'm also a bit worried that when you run Docker Desktop, buildx shows a version like v0.33.0-desktop.1 - they may patch it somehow, and we might not even know the difference.

We also don't see reports of issues with the docker-buildx requirement. I'll still provide a global flag to download a specific version to store it in $HOME/.ddev/bin.

@stasadev stasadev force-pushed the 20260317_stasadev_compose_library branch from 1c01bee to 61070f2 Compare May 6, 2026 22:15
@stasadev stasadev changed the title feat: use docker-compose library, download docker-buildx, fixes #7915 feat: use docker-compose library, optionally download docker-buildx, fixes #7915 May 6, 2026
@stasadev stasadev force-pushed the 20260317_stasadev_compose_library branch from 61070f2 to e48ce7b Compare May 7, 2026 14:46
@stasadev stasadev changed the title feat: use docker-compose library, optionally download docker-buildx, fixes #7915 feat: use docker-compose library, optionally download docker-buildx, fixes #7915, fixes #8295 May 7, 2026
Comment thread pkg/ddevapp/ddevapp.go
Comment on lines +1614 to +1616
if pullErr := PullBaseContainerImages(additionalImages, app.NoCache); pullErr != nil {
util.Warning("Unable to pull Docker images: %v", pullErr)
}
Copy link
Copy Markdown
Member Author

@stasadev stasadev May 7, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This goroutine was removed because it caused corrupted output in ddev start, where several processes tried to write output at the same time, for example multiple docker-compose pull operations for the same ddev/ddev-utility:latest image and ddev-ssh-agent startup output.

// here on restore so it does not leak when compose declines to close it
// (darwin, windows) or on non-TTY exec where setupInput returns a no-op
// restore (line 96 in the same file).
func SetExecStdin(in io.ReadCloser, tty bool) (restore func(), err error) {
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wish it could be simpler, but we need SetExecStdin and dupStdin functions for ddev exec, especially for ddev composer create-project.

@stasadev
Copy link
Copy Markdown
Member Author

stasadev commented May 7, 2026

I wish it could be simpler, but we need SetExecStdin and dupStdin functions for ddev exec, especially for ddev composer create-project.

Why this is needed (TL;DR for future me)

DDEV is a long-lived Go process that calls compose Exec multiple times in a row (e.g. ddev composer create-project runs composer create-project --no-install, then composer install, then composer run-script post-create-project-cmd — three separate Exec calls inside one DDEV process).

On Linux, vendor/github.com/docker/cli/cli/command/container/hijack.go:211-229 calls in.Close() on the input stream after each TTY exec finishes. Without SetExecStdin, that in is the singleton dm.cli.In() constructed from term.StdStreams(), which on Unix returns os.Stdin directly (vendor/github.com/moby/term/term_unix.go:24-26). So the first exec closes fd 0; subsequent exec calls read EOF, which is exactly the "without" log below — composer prints the command name and nothing else, then ddev considers it a success.

SetExecStdin fixes this by:

  1. dup-ing fd 0 so hijack closes the dup, not the real fd 0.
  2. Swapping the singleton dm.cli.In() to a streams.NewIn(dup) so compose sees a *os.File-backed stream (required for streams.In.SetRawTerminal() and IsTerminal() to work — see below).

Why we can't just use compose.WithInputStream(os.Stdin)

compose.NewComposeService wraps any caller-supplied input through readCloserAdapter in wrapDockerCliWithStreams (vendor/github.com/docker/compose/v5/pkg/compose/compose.go:283-301):

if s.inStream != nil {
    wrapper.inStream = streams.NewIn(&readCloserAdapter{r: s.inStream})
}

streams.NewIn does a strict stream.(*os.File) type assertion (vendor/github.com/docker/cli/cli/streams/stream.go:13-25). The adapter is a struct, not *os.File, so:

  • cs.f = nil, cs.fd = 0, cs.tty = false
  • streams.In.SetRawTerminal() is a no-op
  • dockerCli.In().IsTerminal() returns false → MonitorTtySize is skipped, SIGWINCH not forwarded

That breaks ddev ssh, interactive mysql, and any TTY-allocating exec path. compose.WithInputStream is a dead end as long as compose wraps in readCloserAdapter. Confirmed still present on docker/compose main as of 2026-05.

Alternatives considered (don't re-evaluate without checking these first)

  • compose.WithInputStream(os.Stdin) — breaks raw TTY mode, see above.
  • compose.WithStreams(out, err, os.Stdin) — same readCloserAdapter wrap, same problem.
  • Per-call command.Cli wrapper (type cliWithIn struct { command.Cli; in *streams.In }) — works mechanically and avoids singleton mutation, but is the same dup logic with extra boilerplate. No real win for our single-threaded exec path. Considered and rejected.
  • os.Pipe() + io.Copy(pipeW, os.Stdin) — pipe is *os.File but not a TTY, so IsTerminal() lies, raw mode skipped, SIGWINCH not forwarded. We'd have to drive raw mode and ContainerExecResize ourselves. More code than SetExecStdin.
  • Bypass compose entirely; call apiClient.ContainerExecCreate + ContainerExecAttach directly — gives full stdin lifecycle control (we choose not to close), but requires reimplementing ~50 lines of interactiveExec + hijackedIOStreamer + raw mode + SIGWINCH. Plausible escape hatch if compose's exec path ever becomes too constraining.

Related upstream PRs / issues

The hijack-closes-stdin behavior is well-known but is not being fixed for SDK consumers — restoreTerminal → in.Close() has a DO NOT REMOVE THE OS CHECKS !!! comment because removing it breaks darwin/windows. There is no env var, option, or hook to disable it.

When can we delete SetExecStdin + dupStdin?

Either of these upstream changes would let us drop both:

  1. docker/compose learns to skip the readCloserAdapter wrap when the caller supplies an *os.File (or any streams.In). Then compose.WithInputStream(os.Stdin) Just Works and SetExecStdin becomes a one-line option.
  2. docker/cli's restoreTerminal becomes opt-out (env var, option, or per-call flag) so embedders can keep fd 0 open across multiple Exec calls.

Until one of those lands, keep SetExecStdin + dupStdin. Don't try to "clean it up" without re-reading this comment and re-checking the upstream state of the two issues above.


Without SetExecStdin:

$ ddev composer create-project craftcms/craft
Executing Composer command: [composer create-project --no-plugins --no-scripts --no-install craftcms/craft /tmp/kYTgBh]

Creating a "craftcms/craft" project at "/tmp/kYTgBh"
Installing craftcms/craft (5.7.0)
Plugins have been disabled.
  - Downloading craftcms/craft (5.7.0)
  - Installing craftcms/craft (5.7.0): Extracting archive
Created project in /tmp/kYTgBh
Moving install to Composer root
Executing Composer command: [composer install]

Executing Composer command: [composer run-script post-create-project-cmd]


ddev composer create-project was successful.

It is restoreTerminal closing the real fd 0. In vendor/github.com/docker/cli/cli/command/container/hijack.go:211-229, the Linux non-darwin path does in.Close() on the input stream after the TTY exec finishes. Without SetExecStdin, that in is dm.cli.In() constructed from term.StdStreams() (which on Unix returns os.Stdin directly - vendor/github.com/moby/term/term_unix.go:24-26). After the first call closes fd 0, the second and third Exec calls (composer install, composer run-script post-create-project-cmd) get an EOF immediately, which is exactly what the above "without" log shows.


With SetExecStdin:

$ ddev composer create-project craftcms/craft
Executing Composer command: [composer create-project --no-plugins --no-scripts --no-install craftcms/craft /tmp/qfzxoL]

Creating a "craftcms/craft" project at "/tmp/qfzxoL"
Installing craftcms/craft (5.7.0)
Plugins have been disabled.
  - Installing craftcms/craft (5.7.0): Extracting archive
Created project in /tmp/qfzxoL
Moving install to Composer root
Executing Composer command: [composer install]

No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 115 installs, 0 updates, 0 removals
  - Locking bacon/bacon-qr-code (2.0.8)
  - Locking brick/math (0.17.1)
  - Locking carbonphp/carbon-doctrine-types (3.2.0)
  - Locking cebe/markdown (1.2.1)
  - Locking commerceguys/addressing (v2.2.5)
  - Locking composer/pcre (3.3.2)
  - Locking composer/semver (3.4.4)
  - Locking craftcms/cms (5.9.22)
  - Locking craftcms/generator (2.2.0)
  - Locking craftcms/plugin-installer (1.6.0)
  - Locking craftcms/server-check (5.1.0)
  - Locking creocoder/yii2-nested-sets (0.9.0)
  - Locking dasprid/enum (1.0.7)
  - Locking doctrine/collections (2.6.0)
  - Locking doctrine/deprecations (1.1.6)
  - Locking doctrine/inflector (2.1.0)
  - Locking doctrine/lexer (3.0.1)
  - Locking egulias/email-validator (4.0.4)
  - Locking elvanto/litemoji (4.3.0)
  - Locking enshrined/svg-sanitize (0.22.0)
  - Locking ezyang/htmlpurifier (v4.19.0)
  - Locking graham-campbell/result-type (v1.1.4)
  - Locking guzzlehttp/guzzle (7.10.0)
  - Locking guzzlehttp/promises (2.3.0)
  - Locking guzzlehttp/psr7 (2.9.0)
  - Locking illuminate/collections (v10.49.0)
  - Locking illuminate/conditionable (v10.49.0)
  - Locking illuminate/contracts (v10.49.0)
  - Locking illuminate/macroable (v10.49.0)
  - Locking illuminate/support (v10.49.0)
  - Locking league/uri (7.8.1)
  - Locking league/uri-interfaces (7.8.1)
  - Locking maennchen/zipstream-php (3.2.2)
  - Locking markbaker/complex (3.0.2)
  - Locking markbaker/matrix (3.0.1)
  - Locking masterminds/html5 (2.10.0)
  - Locking mikehaertl/php-shellcommand (1.7.0)
  - Locking moneyphp/money (v4.9.0)
  - Locking monolog/monolog (3.10.0)
  - Locking nesbot/carbon (2.73.0)
  - Locking nette/php-generator (v4.2.2)
  - Locking nette/utils (v4.1.3)
  - Locking nikic/php-parser (v5.7.0)
  - Locking paragonie/constant_time_encoding (v3.1.3)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (5.6.7)
  - Locking phpdocumentor/type-resolver (1.12.0)
  - Locking phpoffice/phpspreadsheet (5.7.0)
  - Locking phpoption/phpoption (1.9.5)
  - Locking phpstan/phpdoc-parser (2.3.2)
  - Locking pixelandtonic/graphql-php (v14.11.10.1)
  - Locking pixelandtonic/imagine (1.3.3.1)
  - Locking pragmarx/google2fa (v8.0.3)
  - Locking pragmarx/random (v0.2.2)
  - Locking pragmarx/recovery (v0.2.1)
  - Locking psr/clock (1.0.0)
  - Locking psr/container (2.0.2)
  - Locking psr/event-dispatcher (1.0.0)
  - Locking psr/http-client (1.0.3)
  - Locking psr/http-factory (1.1.0)
  - Locking psr/http-message (2.0)
  - Locking psr/log (3.0.2)
  - Locking psr/simple-cache (3.0.0)
  - Locking psy/psysh (v0.12.22)
  - Locking ralouphie/getallheaders (3.0.3)
  - Locking samdark/yii2-psr-log-target (1.1.4)
  - Locking seld/cli-prompt (1.0.4)
  - Locking spomky-labs/cbor-php (3.2.3)
  - Locking spomky-labs/pki-framework (1.4.2)
  - Locking symfony/clock (v7.4.8)
  - Locking symfony/console (v8.0.9)
  - Locking symfony/css-selector (v7.4.9)
  - Locking symfony/deprecation-contracts (v3.7.0)
  - Locking symfony/dom-crawler (v7.4.8)
  - Locking symfony/event-dispatcher (v8.0.9)
  - Locking symfony/event-dispatcher-contracts (v3.7.0)
  - Locking symfony/filesystem (v6.4.37)
  - Locking symfony/http-client (v7.4.9)
  - Locking symfony/http-client-contracts (v3.7.0)
  - Locking symfony/mailer (v7.4.8)
  - Locking symfony/mime (v7.4.9)
  - Locking symfony/polyfill-ctype (v1.37.0)
  - Locking symfony/polyfill-intl-grapheme (v1.37.0)
  - Locking symfony/polyfill-intl-idn (v1.37.0)
  - Locking symfony/polyfill-intl-normalizer (v1.37.0)
  - Locking symfony/polyfill-mbstring (v1.37.0)
  - Locking symfony/polyfill-php80 (v1.37.0)
  - Locking symfony/polyfill-php83 (v1.37.0)
  - Locking symfony/polyfill-php84 (v1.37.0)
  - Locking symfony/polyfill-uuid (v1.37.0)
  - Locking symfony/process (v7.4.8)
  - Locking symfony/property-access (v7.4.8)
  - Locking symfony/property-info (v7.4.8)
  - Locking symfony/serializer (v7.4.10)
  - Locking symfony/service-contracts (v3.7.0)
  - Locking symfony/string (v8.0.8)
  - Locking symfony/translation (v6.4.38)
  - Locking symfony/translation-contracts (v3.7.0)
  - Locking symfony/type-info (v8.0.9)
  - Locking symfony/uid (v7.4.9)
  - Locking symfony/var-dumper (v5.4.48)
  - Locking symfony/yaml (v7.4.10)
  - Locking theiconic/name-parser (v1.2.11)
  - Locking twig/twig (v3.21.1)
  - Locking vlucas/phpdotenv (v5.6.3)
  - Locking voku/portable-ascii (2.1.1)
  - Locking web-auth/cose-lib (4.5.2)
  - Locking web-auth/webauthn-lib (5.2.6)
  - Locking webmozart/assert (2.3.0)
  - Locking yiisoft/yii2 (2.0.54)
  - Locking yiisoft/yii2-composer (2.0.11)
  - Locking yiisoft/yii2-debug (2.1.27)
  - Locking yiisoft/yii2-queue (2.3.8)
  - Locking yiisoft/yii2-shell (2.0.6)
  - Locking yiisoft/yii2-symfonymailer (4.0.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 115 installs, 0 updates, 0 removals
  - Installing yiisoft/yii2-composer (2.0.11): Extracting archive
  - Installing craftcms/plugin-installer (1.6.0): Extracting archive
  - Installing dasprid/enum (1.0.7): Extracting archive
  - Installing bacon/bacon-qr-code (2.0.8): Extracting archive
  - Installing brick/math (0.17.1): Extracting archive
  - Installing cebe/markdown (1.2.1): Extracting archive
  - Installing symfony/polyfill-php84 (v1.37.0): Extracting archive
  - Installing doctrine/deprecations (1.1.6): Extracting archive
  - Installing doctrine/collections (2.6.0): Extracting archive
  - Installing commerceguys/addressing (v2.2.5): Extracting archive
  - Installing composer/semver (3.4.4): Extracting archive
  - Installing symfony/polyfill-ctype (v1.37.0): Extracting archive
  - Installing nikic/php-parser (v5.7.0): Extracting archive
  - Installing nette/utils (v4.1.3): Extracting archive
  - Installing nette/php-generator (v4.2.2): Extracting archive
  - Installing ezyang/htmlpurifier (v4.19.0): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.37.0): Extracting archive
  - Installing craftcms/cms (5.9.22): Extracting archive
  - Installing yiisoft/yii2 (2.0.54): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.37.0): Extracting archive
  - Installing symfony/polyfill-intl-idn (v1.37.0): Extracting archive
  - Installing symfony/deprecation-contracts (v3.7.0): Extracting archive
  - Installing symfony/mime (v7.4.9): Extracting archive
  - Installing psr/container (2.0.2): Extracting archive
  - Installing symfony/service-contracts (v3.7.0): Extracting archive
  - Installing psr/event-dispatcher (1.0.0): Extracting archive
  - Installing symfony/event-dispatcher-contracts (v3.7.0): Extracting archive
  - Installing symfony/event-dispatcher (v8.0.9): Extracting archive
  - Installing psr/log (3.0.2): Extracting archive
  - Installing doctrine/lexer (3.0.1): Extracting archive
  - Installing egulias/email-validator (4.0.4): Extracting archive
  - Installing symfony/mailer (v7.4.8): Extracting archive
  - Installing yiisoft/yii2-symfonymailer (4.0.0): Extracting archive
  - Installing symfony/process (v7.4.8): Extracting archive
  - Installing yiisoft/yii2-queue (2.3.8): Extracting archive
  - Installing yiisoft/yii2-debug (2.1.27): Extracting archive
  - Installing psr/clock (1.0.0): Extracting archive
  - Installing spomky-labs/pki-framework (1.4.2): Extracting archive
  - Installing web-auth/cose-lib (4.5.2): Extracting archive
  - Installing symfony/polyfill-uuid (v1.37.0): Extracting archive
  - Installing symfony/uid (v7.4.9): Extracting archive
  - Installing symfony/serializer (v7.4.10): Extracting archive
  - Installing symfony/type-info (v8.0.9): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.37.0): Extracting archive
  - Installing symfony/string (v8.0.8): Extracting archive
  - Installing symfony/property-info (v7.4.8): Extracting archive
  - Installing symfony/property-access (v7.4.8): Extracting archive
  - Installing symfony/polyfill-php83 (v1.37.0): Extracting archive
  - Installing symfony/clock (v7.4.8): Extracting archive
  - Installing spomky-labs/cbor-php (3.2.3): Extracting archive
  - Installing webmozart/assert (2.3.0): Extracting archive
  - Installing phpstan/phpdoc-parser (2.3.2): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing phpdocumentor/type-resolver (1.12.0): Extracting archive
  - Installing phpdocumentor/reflection-docblock (5.6.7): Extracting archive
  - Installing paragonie/constant_time_encoding (v3.1.3): Extracting archive
  - Installing web-auth/webauthn-lib (5.2.6): Extracting archive
  - Installing voku/portable-ascii (2.1.1): Extracting archive
  - Installing twig/twig (v3.21.1): Extracting archive
  - Installing theiconic/name-parser (v1.2.11): Extracting archive
  - Installing symfony/yaml (v7.4.10): Extracting archive
  - Installing symfony/polyfill-php80 (v1.37.0): Extracting archive
  - Installing symfony/var-dumper (v5.4.48): Extracting archive
  - Installing symfony/http-client-contracts (v3.7.0): Extracting archive
  - Installing symfony/http-client (v7.4.9): Extracting archive
  - Installing symfony/filesystem (v6.4.37): Extracting archive
  - Installing masterminds/html5 (2.10.0): Extracting archive
  - Installing symfony/dom-crawler (v7.4.8): Extracting archive
  - Installing symfony/css-selector (v7.4.9): Extracting archive
  - Installing seld/cli-prompt (1.0.4): Extracting archive
  - Installing samdark/yii2-psr-log-target (1.1.4): Extracting archive
  - Installing pragmarx/random (v0.2.2): Extracting archive
  - Installing pragmarx/recovery (v0.2.1): Extracting archive
  - Installing pragmarx/google2fa (v8.0.3): Extracting archive
  - Installing pixelandtonic/imagine (1.3.3.1): Extracting archive
  - Installing pixelandtonic/graphql-php (v14.11.10.1): Extracting archive
  - Installing psr/simple-cache (3.0.0): Extracting archive
  - Installing markbaker/matrix (3.0.1): Extracting archive
  - Installing markbaker/complex (3.0.2): Extracting archive
  - Installing maennchen/zipstream-php (3.2.2): Extracting archive
  - Installing composer/pcre (3.3.2): Extracting archive
  - Installing phpoffice/phpspreadsheet (5.7.0): Extracting archive
  - Installing monolog/monolog (3.10.0): Extracting archive
  - Installing moneyphp/money (v4.9.0): Extracting archive
  - Installing mikehaertl/php-shellcommand (1.7.0): Extracting archive
  - Installing psr/http-message (2.0): Extracting archive
  - Installing psr/http-factory (1.1.0): Extracting archive
  - Installing league/uri-interfaces (7.8.1): Extracting archive
  - Installing league/uri (7.8.1): Extracting archive
  - Installing symfony/translation-contracts (v3.7.0): Extracting archive
  - Installing symfony/translation (v6.4.38): Extracting archive
  - Installing carbonphp/carbon-doctrine-types (3.2.0): Extracting archive
  - Installing nesbot/carbon (2.73.0): Extracting archive
  - Installing illuminate/macroable (v10.49.0): Extracting archive
  - Installing illuminate/contracts (v10.49.0): Extracting archive
  - Installing illuminate/conditionable (v10.49.0): Extracting archive
  - Installing illuminate/collections (v10.49.0): Extracting archive
  - Installing doctrine/inflector (2.1.0): Extracting archive
  - Installing illuminate/support (v10.49.0): Extracting archive
  - Installing psr/http-client (1.0.3): Extracting archive
  - Installing ralouphie/getallheaders (3.0.3): Extracting archive
  - Installing guzzlehttp/psr7 (2.9.0): Extracting archive
  - Installing guzzlehttp/promises (2.3.0): Extracting archive
  - Installing guzzlehttp/guzzle (7.10.0): Extracting archive
  - Installing enshrined/svg-sanitize (0.22.0): Extracting archive
  - Installing elvanto/litemoji (4.3.0): Extracting archive
  - Installing creocoder/yii2-nested-sets (0.9.0): Extracting archive
  - Installing craftcms/server-check (5.1.0): Extracting archive
  - Installing craftcms/generator (2.2.0): Extracting archive
  - Installing symfony/console (v8.0.9): Extracting archive
  - Installing phpoption/phpoption (1.9.5): Extracting archive
  - Installing graham-campbell/result-type (v1.1.4): Extracting archive
  - Installing vlucas/phpdotenv (v5.6.3): Extracting archive
  - Installing psy/psysh (v0.12.22): Extracting archive
  - Installing yiisoft/yii2-shell (2.0.6): Extracting archive
51 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating optimized autoload files
66 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Executing Composer command: [composer run-script post-create-project-cmd]

> @php -r "file_exists('.env') || copy('.env.example.dev', '.env');"
> @php -r "unlink('composer.json');"
> @php -r "rename('composer.json.default', 'composer.json');"
> @php craft install
Generating an application ID ... done (CraftCMS--98fa66d1-a19c-4ed9-b753-6772acf564ab)
Generating a security key ... done (ckqtJ8mE82YB3Brlj1a1r8lVVL7V77m9)

Username: [admin] admin
Email: [email protected]
Password:
Confirm:
Site name: asd
Site URL: [https://my-craft-site.ddev.site]
Site language: [en]
*** installing Craft
    > create table {{%addresses}} ... done (time: 0.074s)
    > create table {{%announcements}} ... done (time: 0.016s)
    > create table {{%assetindexdata}} ... done (time: 0.016s)
    > create table {{%assetindexingsessions}} ... done (time: 0.014s)
    > create table {{%assets}} ... done (time: 0.015s)
    > create table {{%assets_sites}} ... done (time: 0.013s)
    > create table {{%imagetransformindex}} ... done (time: 0.022s)
    > create table {{%imagetransforms}} ... done (time: 0.016s)
    > create table {{%authenticator}} ... done (time: 0.014s)
    > create table {{%bulkopevents}} ... done (time: 0.098s)
    > create table {{%categories}} ... done (time: 0.012s)
    > create table {{%categorygroups}} ... done (time: 0.055s)
    > create table {{%categorygroups_sites}} ... done (time: 0.100s)
    > create table {{%changedattributes}} ... done (time: 0.013s)
    > create table {{%changedfields}} ... done (time: 0.013s)
    > create table {{%contentblocks}} ... done (time: 0.011s)
    > create table {{%craftidtokens}} ... done (time: 0.011s)
    > create table {{%deprecationerrors}} ... done (time: 0.060s)
    > create table {{%drafts}} ... done (time: 0.015s)
    > create table {{%elementactivity}} ... done (time: 0.013s)
    > create table {{%elements}} ... done (time: 0.015s)
    > create table {{%elements_bulkops}} ... done (time: 0.011s)
    > create table {{%elements_owners}} ... done (time: 0.032s)
    > create table {{%elements_sites}} ... done (time: 0.012s)
    > create table {{%resourcepaths}} ... done (time: 0.033s)
    > create table {{%revisions}} ... done (time: 0.013s)
    > create table {{%sequences}} ... done (time: 0.011s)
    > create table {{%systemmessages}} ... done (time: 0.014s)
    > create table {{%entries}} ... done (time: 0.014s)
    > create table {{%entries_authors}} ... done (time: 0.012s)
    > create table {{%entrytypes}} ... done (time: 0.013s)
    > create table {{%fieldlayouts}} ... done (time: 0.014s)
    > create table {{%fields}} ... done (time: 0.015s)
    > create table {{%globalsets}} ... done (time: 0.012s)
    > create table {{%gqltokens}} ... done (time: 0.012s)
    > create table {{%gqlschemas}} ... done (time: 0.011s)
    > create table {{%info}} ... done (time: 0.013s)
    > create table {{%migrations}} ... done (time: 0.014s)
    > create table {{%plugins}} ... done (time: 0.012s)
    > create table {{%projectconfig}} ... done (time: 0.012s)
    > create table {{%queue}} ... done (time: 0.014s)
    > create table {{%recoverycodes}} ... done (time: 0.013s)
    > create table {{%relations}} ... done (time: 0.012s)
    > create table {{%searchindexqueue}} ... done (time: 0.012s)
    > create table {{%searchindexqueue_fields}} ... done (time: 0.013s)
    > create table {{%sections}} ... done (time: 0.016s)
    > create table {{%sections_entrytypes}} ... done (time: 0.058s)
    > create table {{%sections_sites}} ... done (time: 0.013s)
    > create table {{%sessions}} ... done (time: 0.012s)
    > create table {{%shunnedmessages}} ... done (time: 0.012s)
    > create table {{%sites}} ... done (time: 0.012s)
    > create table {{%sitegroups}} ... done (time: 0.012s)
    > create table {{%sso_identities}} ... done (time: 0.011s)
    > create table {{%structureelements}} ... done (time: 0.012s)
    > create table {{%structures}} ... done (time: 0.014s)
    > create table {{%taggroups}} ... done (time: 0.013s)
    > create table {{%tags}} ... done (time: 0.011s)
    > create table {{%tokens}} ... done (time: 0.015s)
    > create table {{%usergroups}} ... done (time: 0.015s)
    > create table {{%usergroups_users}} ... done (time: 0.011s)
    > create table {{%userpermissions}} ... done (time: 0.012s)
    > create table {{%userpermissions_usergroups}} ... done (time: 0.011s)
    > create table {{%userpermissions_users}} ... done (time: 0.013s)
    > create table {{%userpreferences}} ... done (time: 0.013s)
    > create table {{%users}} ... done (time: 0.016s)
    > create table {{%volumefolders}} ... done (time: 0.014s)
    > create table {{%volumes}} ... done (time: 0.018s)
    > create table {{%webauthn}} ... done (time: 0.012s)
    > create table {{%widgets}} ... done (time: 0.012s)
    > create index idx_guzncqfrjcsqfztrbfszqplprotfpvsbqtww on {{%announcements}} (userId,unread,dateRead,dateCreated) ... done (time: 0.021s)
    > create index idx_tbjwfubjtdvpssknplbjomuoapvbksndsajk on {{%announcements}} (dateRead) ... done (time: 0.011s)
    > create index idx_kdakvmuqzsqbkjaxendxxsotyeldxlqdhzqn on {{%assetindexdata}} (sessionId,volumeId) ... done (time: 0.010s)
    > create index idx_caillygojvhjfjsyfvfhftekymvrxtfjzehp on {{%assetindexdata}} (volumeId) ... done (time: 0.010s)
    > create index idx_awfhqtlafysiojitcnlnoqnoswhyjtzuyszz on {{%assets}} (filename,folderId) ... done (time: 0.015s)
    > create index idx_ytptfvygevcpgyggdaqjfbguykzfdbkivuis on {{%assets}} (folderId) ... done (time: 0.011s)
    > create index idx_eflzenjhlnqfcyugxvfjtnubbewnaulwtsxc on {{%assets}} (volumeId) ... done (time: 0.011s)
    > create index idx_vrndvshrnslyaqkerxrliqjrkysolhomzdxa on {{%bulkopevents}} (timestamp) ... done (time: 0.011s)
    > create index idx_tvcbqvbckugedrfjwbmzdsafgcuqazuagedf on {{%categories}} (groupId) ... done (time: 0.009s)
    > create index idx_xjmxsnmimdsfvhgyojsdjanihlsnjbdruufg on {{%categorygroups}} (name) ... done (time: 0.011s)
    > create index idx_cazdbbhsyugngslinvsxgsiycmwjrjxfpprj on {{%categorygroups}} (handle) ... done (time: 0.010s)
    > create index idx_yzckshpesterjecetzroxasqmxeeglyorpgu on {{%categorygroups}} (structureId) ... done (time: 0.010s)
    > create index idx_mebpvupdylvzakbipawtvnvfnwhddlawojkr on {{%categorygroups}} (fieldLayoutId) ... done (time: 0.010s)
    > create index idx_rljlqgsstdzttzawssexfiuvpxnxoaorudtt on {{%categorygroups}} (dateDeleted) ... done (time: 0.012s)
    > create unique index idx_zrcfdykacrowgjtrqtkmgenwxjuygjpygsxy on {{%categorygroups_sites}} (groupId,siteId) ... done (time: 0.011s)
    > create index idx_lttfnxfdaefmkpydejaybpohxsvsjissgsjn on {{%categorygroups_sites}} (siteId) ... done (time: 0.010s)
    > create index idx_vbquaepgssclkvrooxkkoqhggadxvmxqrdrr on {{%changedattributes}} (elementId,siteId,dateUpdated) ... done (time: 0.009s)
    > create index idx_brgsztkacupbpwcytueceexvirphznlutead on {{%changedfields}} (elementId,siteId,dateUpdated) ... done (time: 0.010s)
    > create index idx_wzmsphgjzadgepfjshcyyyfxnmvfiadjpayi on {{%contentblocks}} (primaryOwnerId) ... done (time: 0.011s)
    > create index idx_ppagcdkztpziytglrhhzadiivrpmcnmwbttx on {{%contentblocks}} (fieldId) ... done (time: 0.008s)
    > create unique index idx_fzzvkqqnqpfqoaimlztlcmwfmdsujnkplblf on {{%deprecationerrors}} (key,fingerprint) ... done (time: 0.012s)
    > create index idx_hvgzmqqazmnlusgqlomxenimwyjvyqghntsv on {{%drafts}} (creatorId,provisional) ... done (time: 0.013s)
    > create index idx_pmanmlevhcieiacvhqoatbndfcfnkoppuhmp on {{%drafts}} (saved) ... done (time: 0.009s)
    > create index idx_uujzdqfzwczzlgilxxylugscuyfmaedznzyy on {{%elementactivity}} (elementId,timestamp,userId) ... done (time: 0.009s)
    > create index idx_noxaxecgirvqcvujlfywymxzpreugasnills on {{%elements}} (dateDeleted) ... done (time: 0.011s)
    > create index idx_hsvuvankxmeoamojqdzjbvnmssksmtfqwomm on {{%elements}} (fieldLayoutId) ... done (time: 0.010s)
    > create index idx_ystobazfpuohdlvfxzgpiilhcknkgloysyfm on {{%elements}} (type) ... done (time: 0.011s)
    > create index idx_rvlqibuehlrfnamhagklqpnhzqijyorbjlbx on {{%elements}} (enabled) ... done (time: 0.011s)
    > create index idx_mixcpynhirrftxamouppqddjwqmquqycfnid on {{%elements}} (canonicalId) ... done (time: 0.012s)
    > create index idx_mfraoiedzkisluctnbzkyhkyedxaayvuqgvd on {{%elements}} (archived,dateCreated) ... done (time: 0.013s)
    > create index idx_rclfhqkqyavnjidfcktsepbvuzzfpjgdnhoh on {{%elements}} (archived,dateDeleted,draftId,revisionId,canonicalId) ... done (time: 0.013s)
    > create index idx_ozallngllktxjxvybscgumunayvuzofrilxy on {{%elements}} (archived,dateDeleted,draftId,revisionId,canonicalId,enabled) ... done (time: 0.017s)
    > create index idx_rxtjsvdhvszjrewxttnolxaxhxmxhrdlljxo on {{%elements_bulkops}} (timestamp) ... done (time: 0.009s)
    > create index idx_lgerdazzcjgzgtxxxelxggcwltegrxwgiafh on {{%elements_owners}} (sortOrder) ... done (time: 0.009s)
    > create unique index idx_evqfykutlnqmnwlptgyukzeefvzdqronjdlg on {{%elements_sites}} (elementId,siteId) ... done (time: 0.010s)
    > create index idx_pendvavomcfenjtjqyttuemzrhnditozkqzc on {{%elements_sites}} (siteId) ... done (time: 0.010s)
    > create index idx_xzsmzjwpcgbydxquadyqnczufbcpgiohrasn on {{%elements_sites}} (title,siteId) ... done (time: 0.011s)
    > create index idx_tyukvkleegogvvjbkqbhveiuxppjakhirmhw on {{%elements_sites}} (slug,siteId) ... done (time: 0.011s)
    > create index idx_npwcndjxnidjnifvckjsthmltyuygfnhelzf on {{%elements_sites}} (enabled) ... done (time: 0.012s)
    > create unique index idx_cnilqnunlkiqieymdkqdlbelovzapyxgrmdm on {{%systemmessages}} (key,language) ... done (time: 0.013s)
    > create index idx_omhgwwhbdkifamjourquuzpajnyhwyptrvxu on {{%systemmessages}} (language) ... done (time: 0.011s)
    > create index idx_dvoyaqqpxpblbjiubydgxstqysisfaljohdt on {{%entries}} (postDate) ... done (time: 0.011s)
    > create index idx_bvufdrlbatsrfmyeyfhhooqjomfrbktvcbes on {{%entries}} (expiryDate) ... done (time: 0.010s)
    > create index idx_hixktqjpblvtflazhdomtthczeepxywkgyyc on {{%entries}} (status) ... done (time: 0.011s)
    > create index idx_woyzuoouahdkdzmcvrlmzsqxjqwzsuimgwyb on {{%entries}} (sectionId) ... done (time: 0.013s)
    > create index idx_euktsvtwhbgdkihnbcptkdblednrliimigvs on {{%entries}} (typeId) ... done (time: 0.011s)
    > create index idx_ozzbrspotsbzlyvxlgllwrlbaheoxwiyknvw on {{%entries_authors}} (authorId) ... done (time: 0.009s)
    > create index idx_jxzajyhvwsnwzsnjdrlhzxrndspfoigzayqu on {{%entries_authors}} (entryId,sortOrder) ... done (time: 0.011s)
    > create index idx_clrbscygfmgmrsdnhrrcmvyoxyshipjwkzuv on {{%entries}} (primaryOwnerId) ... done (time: 0.014s)
    > create index idx_feexxqtwsykpqusxpglxrfxtqjvwvagyrmnk on {{%entries}} (fieldId) ... done (time: 0.014s)
    > create index idx_zciblpglmxufwxlluysefjwlmtatbztpdgre on {{%entrytypes}} (fieldLayoutId) ... done (time: 0.012s)
    > create index idx_vcqstcaujvidusyptddmaesyqacmhlkhxkcu on {{%entrytypes}} (dateDeleted) ... done (time: 0.012s)
    > create index idx_geqinjomsverjklmqpntjdrpmxdllmohpfgw on {{%fieldlayouts}} (dateDeleted) ... done (time: 0.010s)
    > create index idx_hvherqycchxzbrvbghkmxzrqlqvecnritnha on {{%fieldlayouts}} (type) ... done (time: 0.012s)
    > create index idx_qfmrpdqzcgzvigxwelfmfxsjochbahymignd on {{%fields}} (handle,context) ... done (time: 0.015s)
    > create index idx_ehofjmbyeubkdbagbsqnmjdpcpkbnbrodzrg on {{%fields}} (context) ... done (time: 0.018s)
    > create index idx_bpaarovuuuedelvimlyabzyxledxokhsjwzq on {{%fields}} (dateDeleted) ... done (time: 0.013s)
    > create index idx_nblbxxcclzvjmtgawqnvpgmtxxnzqawsqaru on {{%globalsets}} (name) ... done (time: 0.011s)
    > create index idx_ktlyholvmfutppqplexexodjqstyftxqxkxc on {{%globalsets}} (handle) ... done (time: 0.010s)
    > create index idx_wsooiwmnxdsvwqjlxnmcsscplngwioghgyxk on {{%globalsets}} (fieldLayoutId) ... done (time: 0.009s)
    > create index idx_ldgfffwkrxpuvohniftgqghacpgjvogdmtxs on {{%globalsets}} (sortOrder) ... done (time: 0.010s)
    > create unique index idx_ajnmcpdnrgbrksgvtsfnvbfpdmqhkglutuyq on {{%gqltokens}} (accessToken) ... done (time: 0.011s)
    > create unique index idx_tgvqvkftniyfwqckmwlvgtwjlcaygkgbdqsg on {{%gqltokens}} (name) ... done (time: 0.011s)
    > create index idx_yneudumedoeiavwlrqywyqhnkhxfguqtgtgm on {{%imagetransformindex}} (assetId,transformString) ... done (time: 0.012s)
    > create index idx_euflkleadfvkevjdpenlrfufgfvfgygorgsd on {{%imagetransforms}} (name) ... done (time: 0.011s)
    > create index idx_nagissmjgmfmauvauetvtvtjbieqszniajih on {{%imagetransforms}} (handle) ... done (time: 0.011s)
    > create unique index idx_xczpzspaxfdihymklpfktckxexutvlulidto on {{%migrations}} (track,name) ... done (time: 0.010s)
    > create unique index idx_crvalmpwvwctzekqxujzubarkqlpgokxoqmu on {{%plugins}} (handle) ... done (time: 0.011s)
    > create index idx_ylmccgxybmycjhqsbynhotrgdpmzykojdjld on {{%queue}} (channel,fail,timeUpdated,timePushed) ... done (time: 0.012s)
    > create index idx_znrksqejmlkpiqcotyyfzjpslkfezbigskvh on {{%queue}} (channel,fail,timeUpdated,delay) ... done (time: 0.010s)
    > create unique index idx_jxchusyorvhklcgivgsxizzemcdsohrpjodo on {{%relations}} (fieldId,sourceId,sourceSiteId,targetId) ... done (time: 0.011s)
    > create index idx_yzbhyensnmhscjtsiotunjlnihlvqkddxsgb on {{%relations}} (sourceId) ... done (time: 0.011s)
    > create index idx_hefzhkfakrwmheolljudzhdljvkqkzrduvdg on {{%relations}} (targetId) ... done (time: 0.010s)
    > create index idx_swbcrjaaolsbxztwtsqamgsykjcrrlhlijjo on {{%relations}} (sourceSiteId) ... done (time: 0.012s)
    > create unique index idx_lawqecrchqhggvfhtfczbjktbtobhffedcnd on {{%revisions}} (canonicalId,num) ... done (time: 0.009s)
    > create index idx_xiqmpfvgacmrhbetduynzaindoruvpgqdeni on {{%searchindexqueue}} (elementId,siteId,reserved) ... done (time: 0.009s)
    > create unique index idx_zuwtcuxfkwvaiaiaxulgzzejnhbckpvajsiw on {{%searchindexqueue_fields}} (jobId,fieldHandle) ... done (time: 0.009s)
    > create index idx_xdsjtgygautbfzokpzpzdayansyivhipkowu on {{%sections}} (handle) ... done (time: 0.011s)
    > create index idx_sipkztxrwcqbofwbnmvmuwvjijuqpfracquq on {{%sections}} (name) ... done (time: 0.012s)
    > create index idx_lwrhmfdfejteceesmipdyycroukzbwvfnvqm on {{%sections}} (structureId) ... done (time: 0.010s)
    > create index idx_psepnekniovmndynfpdcfnywooqgsqppqhuv on {{%sections}} (dateDeleted) ... done (time: 0.015s)
    > create unique index idx_emcvkihzcajwfycjrvribycbjthaxncxhado on {{%sections_sites}} (sectionId,siteId) ... done (time: 0.010s)
    > create index idx_ihdwrdjvaoanjnsaevbheyadezokghfnmozz on {{%sections_sites}} (siteId) ... done (time: 0.010s)
    > create index idx_ciqyrcrjynhbqcamcqgdxjbsdhlcofvgskkz on {{%sessions}} (uid) ... done (time: 0.008s)
    > create index idx_omgtjgidlczpedwkzeylrjcmlrekmbceugum on {{%sessions}} (token) ... done (time: 0.009s)
    > create index idx_ppxfbmxwmfgaobaxhttibagbbwgixxqazfow on {{%sessions}} (dateUpdated) ... done (time: 0.011s)
    > create index idx_diuylzxydgszqnsuajgcnotutbdtmcmdoixc on {{%sessions}} (userId) ... done (time: 0.009s)
    > create unique index idx_xoykgapnpxrflulpdkblpxrlmmkjhmmtujqm on {{%shunnedmessages}} (userId,message) ... done (time: 0.010s)
    > create index idx_avhhapqstgauuyqntsbwwubhwfhddjyledcc on {{%sites}} (dateDeleted) ... done (time: 0.012s)
    > create index idx_xmgnhhcrhepsfrqwqdjrgmywkgbishdmfjru on {{%sites}} (handle) ... done (time: 0.012s)
    > create index idx_uhypbhcarbqrjhvtbpugbsajsjczkgeydzyg on {{%sites}} (sortOrder) ... done (time: 0.010s)
    > create index idx_lnicdvbjyhxjnlwbzpnkmdpqdvhmcxozkcye on {{%sitegroups}} (name) ... done (time: 0.009s)
    > create unique index idx_blraoyaqpusincvuujywkzwgetprntxrboyd on {{%structureelements}} (structureId,elementId) ... done (time: 0.012s)
    > create index idx_mvstubzawsfnzfowqmbzksmmihwxiirmfxhx on {{%structureelements}} (root) ... done (time: 0.011s)
    > create index idx_cjqyrqmynklqcemcovxtfjmgvxhtglwozdfs on {{%structureelements}} (lft) ... done (time: 0.009s)
    > create index idx_gipuoxwaeiycwyemacggoilxclnpxeovslkj on {{%structureelements}} (rgt) ... done (time: 0.012s)
    > create index idx_cwtdcnzmqioltzremjynpwkqzvccruzqjfqj on {{%structureelements}} (level) ... done (time: 0.010s)
    > create index idx_igoycwgjjolgrhezkycpbwtmgntvwzaijbnm on {{%structureelements}} (elementId) ... done (time: 0.014s)
    > create index idx_emzukqpagstrqoowgilglukqqlfvsmkhehit on {{%structures}} (dateDeleted) ... done (time: 0.009s)
    > create index idx_gpgunruoxjfxuziqgflkrlhmfpbscpdqbits on {{%taggroups}} (name) ... done (time: 0.010s)
    > create index idx_juyyvxrsjmtmgyyvephtjxsynpvvgxujkunw on {{%taggroups}} (handle) ... done (time: 0.010s)
    > create index idx_lmxgjcfqnkrkvpguctsanwuhozxdqwzvtwss on {{%taggroups}} (dateDeleted) ... done (time: 0.014s)
    > create index idx_riylaybkzpkewqfkeoikpoqebapjybqvxhme on {{%tags}} (groupId) ... done (time: 0.010s)
    > create unique index idx_fiuwrfemckxkwpkpkzxoigbyymlrcqefcbdg on {{%tokens}} (token) ... done (time: 0.009s)
    > create index idx_fqvrrftxjtmetznmkzyrywgarqsrmetlehlb on {{%tokens}} (expiryDate) ... done (time: 0.009s)
    > create index idx_hvbtbquxmcljmzrjxwtjhttdbijpthyfpdju on {{%usergroups}} (handle) ... done (time: 0.010s)
    > create index idx_bqfgbdvndirteufvsvqvjtmfznlkackcxxuj on {{%usergroups}} (name) ... done (time: 0.011s)
    > create unique index idx_ftbsfyxbknfdysxfvjxvkooymfmgjlzqdjyj on {{%usergroups_users}} (groupId,userId) ... done (time: 0.009s)
    > create index idx_kdinfwdydsztviokwytnexoplxwvgrazcvfd on {{%usergroups_users}} (userId) ... done (time: 0.010s)
    > create unique index idx_fyuilsnvvlyhtkxaxeywlfphiqypnkccgjtu on {{%userpermissions}} (name) ... done (time: 0.008s)
    > create unique index idx_vrprinpvikbucpsnrihvqdrejczrvnpzhmun on {{%userpermissions_usergroups}} (permissionId,groupId) ... done (time: 0.010s)
    > create index idx_dloyocrtyvgcnqqruafurxwdidfrdqcnvjqy on {{%userpermissions_usergroups}} (groupId) ... done (time: 0.008s)
    > create unique index idx_ppndlrdwkyhnjqgiyklpxjwwllldzcuujrkw on {{%userpermissions_users}} (permissionId,userId) ... done (time: 0.010s)
    > create index idx_fpqvusqqvcuyhoxsjguyvwdcsnabrzkyddkn on {{%userpermissions_users}} (userId) ... done (time: 0.011s)
    > create index idx_xsqtqgbamamdywygbjfolivauzdhynoicgir on {{%users}} (active) ... done (time: 0.016s)
    > create index idx_hiwupqlqilxddkdunhodspxbuezbdpwekedb on {{%users}} (locked) ... done (time: 0.013s)
    > create index idx_xuyovccvftwweicoejyhddmppgsnnwlxyzxz on {{%users}} (pending) ... done (time: 0.013s)
    > create index idx_pftmoptzlhonutinjjyatawlovtwgoerjyjq on {{%users}} (suspended) ... done (time: 0.014s)
    > create index idx_qejzkchlxenyzxtjwikhxztrxhqmwaxrhovu on {{%users}} (verificationCode) ... done (time: 0.013s)
    > create unique index idx_ddbmhtkwsesswlfxnvhrbospqbqxikrbowwh on {{%volumefolders}} (name,parentId,volumeId) ... done (time: 0.012s)
    > create index idx_flfkwgxioxboiiczbwmoyoudwkvivgsyqelq on {{%volumefolders}} (parentId) ... done (time: 0.012s)
    > create index idx_sgauewssckmtmzddgjkkgngggmfbkibsdqig on {{%volumefolders}} (volumeId) ... done (time: 0.014s)
    > create index idx_dhulsccwegzrdrmebmypjvqcpvtasyowqhor on {{%volumes}} (name) ... done (time: 0.013s)
    > create index idx_wjyfnilkjfxlnhenavzodkxaqbskcabnixhv on {{%volumes}} (handle) ... done (time: 0.014s)
    > create index idx_tstndhtvvboerckhiewrbauirylbhpkorzax on {{%volumes}} (fieldLayoutId) ... done (time: 0.012s)
    > create index idx_uewjodnlegfopknfywezxikeawkapmayfmyu on {{%volumes}} (dateDeleted) ... done (time: 0.013s)
    > create index idx_pzrnbtcxylngupqiohzcxxdbwhlemqgndznu on {{%widgets}} (userId) ... done (time: 0.009s)
    > create index idx_jplwyzgejbyfhpcfpainhojlmsinrwrvllzp on {{%elements_sites}} (uri,siteId) ... done (time: 0.011s)
    > create index idx_stakghfhlektnfxnwanygzutdjofnszdmogy on {{%users}} (email) ... done (time: 0.015s)
    > create index idx_xwgrbocsmcaevunpmcqymxqenphaeeesippa on {{%users}} (username) ... done (time: 0.018s)
    > create table {{%searchindex}} ... done (time: 0.012s)
    > add foreign key fk_bcgjqqrdwjyajrjrxcqytqltattsughllzop: {{%addresses}} (id) references {{%elements}} (id) ... done (time: 0.036s)
    > add foreign key fk_dgpevtwiuediyapcyjduhaewvuezvrfxkwof: {{%addresses}} (primaryOwnerId) references {{%elements}} (id) ... done (time: 0.039s)
    > add foreign key fk_rfflqjqzojmgmiakqzpqdjyuulhngmjsilvh: {{%announcements}} (userId) references {{%users}} (id) ... done (time: 0.035s)
    > add foreign key fk_pzmotrabnimieheqwhxvebpnxbsaqcgvkjpp: {{%announcements}} (pluginId) references {{%plugins}} (id) ... done (time: 0.037s)
    > add foreign key fk_menckplltqfnnklefxzgcnxtfzqvfbkvjxfn: {{%assetindexdata}} (volumeId) references {{%volumes}} (id) ... done (time: 0.040s)
    > add foreign key fk_gdzvuonanrrwjgpujglbcidwbuunvhzkjecy: {{%assetindexdata}} (sessionId) references {{%assetindexingsessions}} (id) ... done (time: 0.042s)
    > add foreign key fk_hcjoeeljqjqoetsjwqvvpzmgjktnmhcbesdi: {{%assets}} (folderId) references {{%volumefolders}} (id) ... done (time: 0.040s)
    > add foreign key fk_yimevjrjlfsxaezkoioqerqodcisxqguwshq: {{%assets}} (id) references {{%elements}} (id) ... done (time: 0.045s)
    > add foreign key fk_mihcrwtfotmijjlujviyucqmffnbvdqzbkao: {{%assets}} (uploaderId) references {{%users}} (id) ... done (time: 0.046s)
    > add foreign key fk_siwxthyisdwfajjfgjstzqfvusomdlgeafen: {{%assets}} (volumeId) references {{%volumes}} (id) ... done (time: 0.047s)
    > add foreign key fk_plpkzodvwcsxbtlsekhnovdimjdjhaluuupj: {{%assets_sites}} (assetId) references {{%assets}} (id) ... done (time: 0.030s)
    > add foreign key fk_bxgzkymknyluzqqjmfkipnqdlqumqjiuifif: {{%assets_sites}} (siteId) references {{%sites}} (id) ... done (time: 0.030s)
    > add foreign key fk_uxlchyixmzabdzepqvqeioawsiciikreujxx: {{%authenticator}} (userId) references {{%users}} (id) ... done (time: 0.034s)
    > add foreign key fk_cbhkrqirpbnrihbqspzxkemdocgphmspsqcl: {{%categories}} (groupId) references {{%categorygroups}} (id) ... done (time: 0.029s)
    > add foreign key fk_sixsrfytlrlsosjbjsujfthdclkxqeviqusp: {{%categories}} (id) references {{%elements}} (id) ... done (time: 0.034s)
    > add foreign key fk_aukbwfhyltwynaxjqgidaoabuvganhxwslep: {{%categories}} (parentId) references {{%categories}} (id) ... done (time: 0.036s)
    > add foreign key fk_rwwrovcdverkzzsuwdbfkczfaomdbtyxjxit: {{%categorygroups}} (fieldLayoutId) references {{%fieldlayouts}} (id) ... done (time: 0.050s)
    > add foreign key fk_zdyvqzlzbnaygaplddihjiqugyaqkqznlqhk: {{%categorygroups}} (structureId) references {{%structures}} (id) ... done (time: 0.056s)
    > add foreign key fk_adlhcpmrqnoidzqasigxrrnpgdwxferosfyp: {{%categorygroups_sites}} (groupId) references {{%categorygroups}} (id) ... done (time: 0.038s)
    > add foreign key fk_uhaplvmulodhgykjnxswmsorinqxgdtimqsj: {{%categorygroups_sites}} (siteId) references {{%sites}} (id) ... done (time: 0.038s)
    > add foreign key fk_dkqdyszinwanffcasvgnjnqyjbnbutqhozbm: {{%changedattributes}} (elementId) references {{%elements}} (id) ... done (time: 0.054s)
    > add foreign key fk_nqywbizbudgjesqnuqqwstgibgyzytqjsqtw: {{%changedattributes}} (siteId) references {{%sites}} (id) ... done (time: 0.038s)
    > add foreign key fk_iakrqipahzhudjsnsfmutwniwfooxacgvmfg: {{%changedattributes}} (userId) references {{%users}} (id) ... done (time: 0.044s)
    > add foreign key fk_xttdhksyszsbyorphtburzesvunnohboxqzo: {{%changedfields}} (elementId) references {{%elements}} (id) ... done (time: 0.034s)
    > add foreign key fk_jcysuibocftwatbjafzcesivxpgbaidayyuq: {{%changedfields}} (siteId) references {{%sites}} (id) ... done (time: 0.045s)
    > add foreign key fk_ogmgfqpqmeyrqnhnxtmbyazqytmrrdlvucly: {{%changedfields}} (fieldId) references {{%fields}} (id) ... done (time: 0.046s)
    > add foreign key fk_tzpfkndlbkduaaqipyohlrrbqgbyzdouzvtu: {{%changedfields}} (userId) references {{%users}} (id) ... done (time: 0.049s)
    > add foreign key fk_ldcxidhembqyoskovvwljlatzwskbtmyhpvs: {{%contentblocks}} (id) references {{%elements}} (id) ... done (time: 0.038s)
    > add foreign key fk_yokziljithnsopdwurwaxsvlcatdbkltyjna: {{%contentblocks}} (fieldId) references {{%fields}} (id) ... done (time: 0.034s)
    > add foreign key fk_vsvhgyuqbryshykahhlmhvusexbzngkswaft: {{%contentblocks}} (primaryOwnerId) references {{%elements}} (id) ... done (time: 0.037s)
    > add foreign key fk_ugghzzqbbjobpgjhblnjvwhpjlksadrfkmbr: {{%craftidtokens}} (userId) references {{%users}} (id) ... done (time: 0.032s)
    > add foreign key fk_xtqcgryytmdogbhzrjzdmtuaqoxcrsclchqg: {{%drafts}} (creatorId) references {{%users}} (id) ... done (time: 0.040s)
    > add foreign key fk_ibfiwigeuuwrfwcqzpweynyxaczhcuebeuga: {{%drafts}} (canonicalId) references {{%elements}} (id) ... done (time: 0.042s)
    > add foreign key fk_naygzrjmzbqkifyanozibkwbpvelxzxwxwps: {{%elementactivity}} (elementId) references {{%elements}} (id) ... done (time: 0.035s)
    > add foreign key fk_paqyswooryszmjpsknbhxkxdjretjlxnehrj: {{%elementactivity}} (userId) references {{%users}} (id) ... done (time: 0.037s)
    > add foreign key fk_lbzoculnhaoqmqvrgssznarsfbhpjtkhevwg: {{%elementactivity}} (siteId) references {{%sites}} (id) ... done (time: 0.045s)
    > add foreign key fk_qitlzsdmpnfrsmxcckmyitijjjgqjbibjknv: {{%elementactivity}} (draftId) references {{%drafts}} (id) ... done (time: 0.044s)
    > add foreign key fk_zhujibbfxovbezplgptvalncpqfrudgylano: {{%elements}} (canonicalId) references {{%elements}} (id) ... done (time: 0.082s)
    > add foreign key fk_daltnujowdwairucixvilffhianetbutbpyx: {{%elements}} (draftId) references {{%drafts}} (id) ... done (time: 0.091s)
    > add foreign key fk_fdlddkmjmkneasaogetvlfzezogkbmabadci: {{%elements}} (revisionId) references {{%revisions}} (id) ... done (time: 0.088s)
    > add foreign key fk_kxrrriyyxdrxznzdhosjtftyotbngtosuyga: {{%elements}} (fieldLayoutId) references {{%fieldlayouts}} (id) ... done (time: 0.099s)
    > add foreign key fk_ocpspnvbvtanjzugdlargfpycokcuilbafac: {{%elements_owners}} (elementId) references {{%elements}} (id) ... done (time: 0.034s)
    > add foreign key fk_zgpxgoqgzqgdqpuhtfviseflxfofuvuejsjh: {{%elements_owners}} (ownerId) references {{%elements}} (id) ... done (time: 0.035s)
    > add foreign key fk_nrqddkylmnzdrmpcykpddkhgwbojsrzfujlr: {{%elements_sites}} (elementId) references {{%elements}} (id) ... done (time: 0.054s)
    > add foreign key fk_pptkmmjtjywqxbuvmjcijcjcypoczizdkorg: {{%elements_sites}} (siteId) references {{%sites}} (id) ... done (time: 0.039s)
    > add foreign key fk_ldnqelxnwovjzyudxvszwdnrrcdyqxiaoxjx: {{%entries}} (id) references {{%elements}} (id) ... done (time: 0.040s)
    > add foreign key fk_tuqtbzwleicrbbqkgvlsbiseqzklmcobegft: {{%entries}} (sectionId) references {{%sections}} (id) ... done (time: 0.047s)
    > add foreign key fk_oivxyxpecjbhuesrxfpjoxeitkhzaqcvvylq: {{%entries}} (parentId) references {{%entries}} (id) ... done (time: 0.049s)
    > add foreign key fk_exshxtbaoukqtrookkilxmkpwauqilhbynkc: {{%entries}} (typeId) references {{%entrytypes}} (id) ... done (time: 0.102s)
    > add foreign key fk_rwxkpmxoruhqatiwqftjcwndvzumhtmqqzqh: {{%entries_authors}} (entryId) references {{%entries}} (id) ... done (time: 0.028s)
    > add foreign key fk_saijqhzqjhazussihhlykxmtszmcdsjyidop: {{%entries_authors}} (authorId) references {{%users}} (id) ... done (time: 0.034s)
    > add foreign key fk_ekcvihkzximfzrprjtuibkxkklfwcziojmwx: {{%entries}} (fieldId) references {{%fields}} (id) ... done (time: 0.049s)
    > add foreign key fk_emiqyjgidzqeazkdrhajbdququpntuhpnrlo: {{%entries}} (primaryOwnerId) references {{%elements}} (id) ... done (time: 0.052s)
    > add foreign key fk_pvjvqnhydikxxgddgiknuqbfxpcetkavpwvr: {{%entrytypes}} (fieldLayoutId) references {{%fieldlayouts}} (id) ... done (time: 0.036s)
    > add foreign key fk_ivppzosppdgatldqpayeblbtznxesxufqkea: {{%globalsets}} (fieldLayoutId) references {{%fieldlayouts}} (id) ... done (time: 0.034s)
    > add foreign key fk_pvjpbtbdrwusukurvxrvqyolfoumzcrgubbc: {{%globalsets}} (id) references {{%elements}} (id) ... done (time: 0.037s)
    > add foreign key fk_npismszdfdimkswjhohfdpjyggztrjsyzbmx: {{%gqltokens}} (schemaId) references {{%gqlschemas}} (id) ... done (time: 0.029s)
    > add foreign key fk_stwididdbcahterwxkvzgqkfczktawmpjtmy: {{%relations}} (fieldId) references {{%fields}} (id) ... done (time: 0.036s)
    > add foreign key fk_telkqrfirvfrdrdvmyjriidaqmitdaosqeey: {{%relations}} (sourceId) references {{%elements}} (id) ... done (time: 0.038s)
    > add foreign key fk_oniiztbenmhpdoybazgvkivrpsxoeadlpdll: {{%relations}} (sourceSiteId) references {{%sites}} (id) ... done (time: 0.044s)
    > add foreign key fk_ebljlzupfkntitgtvtolhbmwbtwxzqavxval: {{%revisions}} (creatorId) references {{%users}} (id) ... done (time: 0.032s)
    > add foreign key fk_hehxcjrbjwwhlwbjcclwdazkaesghlembdpq: {{%revisions}} (canonicalId) references {{%elements}} (id) ... done (time: 0.037s)
    > add foreign key fk_tpfofytcqrwpakiswzlnqfpecmuckuwzwgjo: {{%searchindexqueue_fields}} (jobId) references {{%searchindexqueue}} (id) ... done (time: 0.022s)
    > add foreign key fk_gaivkxkjejwdgzxpknvqzropowmskmcbhxom: {{%sections}} (structureId) references {{%structures}} (id) ... done (time: 0.037s)
    > add foreign key fk_fgynoynjaqjjxuuexqffdcvzjkkrtffcuqdq: {{%sections_entrytypes}} (sectionId) references {{%sections}} (id) ... done (time: 0.023s)
    > add foreign key fk_rdnvvyztelwsksinegnzfsmngaehvkvnjwad: {{%sections_entrytypes}} (typeId) references {{%entrytypes}} (id) ... done (time: 0.026s)
    > add foreign key fk_brnfcqftxpsnnjtahrsexstbecetbbqvxuux: {{%sections_sites}} (siteId) references {{%sites}} (id) ... done (time: 0.028s)
    > add foreign key fk_mfhmbskdjxebsitjcfbquofmypuywgspellk: {{%sections_sites}} (sectionId) references {{%sections}} (id) ... done (time: 0.031s)
    > add foreign key fk_ydmbguflsrekavbgyzaaqvrpnsbpequtqfwn: {{%sessions}} (userId) references {{%users}} (id) ... done (time: 0.033s)
    > add foreign key fk_sxkthbdfoghxznthopythyaqkfdvtwwdbida: {{%shunnedmessages}} (userId) references {{%users}} (id) ... done (time: 0.027s)
    > add foreign key fk_uyjbblewaajowxwxkelesnifeljowiymofmm: {{%sites}} (groupId) references {{%sitegroups}} (id) ... done (time: 0.044s)
    > add foreign key fk_uikqdtdblzkrpxmuiygdxsphoxmblyrrwojs: {{%sso_identities}} (userId) references {{%users}} (id) ... done (time: 0.026s)
    > add foreign key fk_rpfwfvfisstwkbncftjsolthxrqcjwgypkul: {{%structureelements}} (structureId) references {{%structures}} (id) ... done (time: 0.042s)
    > add foreign key fk_ojzbsqifalceksrugrwqnmkartnorsmwpfpq: {{%taggroups}} (fieldLayoutId) references {{%fieldlayouts}} (id) ... done (time: 0.034s)
    > add foreign key fk_arwazygqurqkzoofgkolhqeblzafhijkgnnl: {{%tags}} (groupId) references {{%taggroups}} (id) ... done (time: 0.028s)
    > add foreign key fk_ckprcvmtxluyljkqzavflkvjcdrmysljwnmq: {{%tags}} (id) references {{%elements}} (id) ... done (time: 0.028s)
    > add foreign key fk_pzhjplyrdihbilxbyngpsocfaxggctpgqpcy: {{%usergroups_users}} (groupId) references {{%usergroups}} (id) ... done (time: 0.025s)
    > add foreign key fk_zayapephxhkmpacbagdnustzjatfgegymyrt: {{%usergroups_users}} (userId) references {{%users}} (id) ... done (time: 0.031s)
    > add foreign key fk_zhhaflydvnrikvifpbnmdaknaklfkqgxktah: {{%userpermissions_usergroups}} (groupId) references {{%usergroups}} (id) ... done (time: 0.027s)
    > add foreign key fk_lnpemoqqvjuztzrzqyfjykpypxgjpyscedbj: {{%userpermissions_usergroups}} (permissionId) references {{%userpermissions}} (id) ... done (time: 0.031s)
    > add foreign key fk_iuaqxrkeargbkxtbhyorysdptfhrpiqlhzyt: {{%userpermissions_users}} (permissionId) references {{%userpermissions}} (id) ... done (time: 0.027s)
    > add foreign key fk_vgjxnqwrgzepiivsgjlihhaoaftomfutffmt: {{%userpermissions_users}} (userId) references {{%users}} (id) ... done (time: 0.029s)
    > add foreign key fk_cvqrondjxsescjbfcmlxknaghvkfebusgtsx: {{%userpreferences}} (userId) references {{%users}} (id) ... done (time: 0.021s)
    > add foreign key fk_xpsjliheagabqxsdgtjkkexidirvdytjrzec: {{%users}} (id) references {{%elements}} (id) ... done (time: 0.068s)
    > add foreign key fk_egrqgwybxwcexeexlyytmlbbjjlobdqsrlmj: {{%users}} (photoId) references {{%assets}} (id) ... done (time: 0.069s)
    > add foreign key fk_rgpsvtdxigxyxacmelapgqrzddcpvuhlyghv: {{%users}} (affiliatedSiteId) references {{%sites}} (id) ... done (time: 0.070s)
    > add foreign key fk_uuczzrocvipchbotnizyxnowytdcorofkejf: {{%volumefolders}} (parentId) references {{%volumefolders}} (id) ... done (time: 0.033s)
    > add foreign key fk_dzahwszfzrwajswxmhgibyxqbnhahxaxltpy: {{%volumefolders}} (volumeId) references {{%volumes}} (id) ... done (time: 0.034s)
    > add foreign key fk_ssshnxbmoxhgaqcianykrvrjiychsqsypnuj: {{%volumes}} (fieldLayoutId) references {{%fieldlayouts}} (id) ... done (time: 0.058s)
    > add foreign key fk_nvfczsykpguzgiytddfdrmtfejyiuebqpspw: {{%webauthn}} (userId) references {{%users}} (id) ... done (time: 0.030s)
    > add foreign key fk_zzgnrwekoxkbiimrmgraeitecmtgqswyqesd: {{%widgets}} (userId) references {{%users}} (id) ... done (time: 0.025s)
    > populating the info table ... done
    > saving default data ... done
    > saving the first user ... done
*** installed Craft successfully (time: 7.225s)

Generating project config files from the loaded project config ... done

ddev composer create-project was successful.

Credit: Updated by Claude (Anthropic Opus 4.7) on 2026-05-07.

@stasadev stasadev force-pushed the 20260317_stasadev_compose_library branch from e48ce7b to cb2b171 Compare May 7, 2026 20:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file enhancement

Projects

None yet

2 participants