---
title: "Contribution"
manual: "Imaginator"
version: "main"
permalink: "https://docs.typo3.org/permalink/schliesser/imaginator:introduction-contribution@main"
source: "Introduction/Contribution.rst"
rendered: "2026-10-13T11:21:46+00:00"
---

# Contribution {#introduction-contribution}

Contributions are welcome. The full local setup, the test workflow and the
conventions CI enforces live in [CONTRIBUTING.md](https://github.com/schliesser/imaginator/blob/main/CONTRIBUTING.md). By
contributing you agree your work is licensed under the project's
**GPL-2.0-or-later**.

## Quick start {#quick-start}

A committed [DDEV](https://ddev.com/) config provides a clickable sandbox.
After a fresh clone:

**Boot the dev environment**

```bash
ddev start             # web (nginx-fpm, PHP 8.3), MariaDB, imgproxy
ddev setup             # composer install into .Build/
ddev demo              # clickable demo at https://imaginator.ddev.site/
```

Backend login on every instance: **admin** / **Password.1**.

## Tests & coding standards {#tests-coding-standards}

Run everything through DDEV before opening a pull request if possible:

**Test & lint**

```bash
ddev test all          # PHPUnit unit + functional
ddev lint              # PHPStan (level 8) + php-cs-fixer (dry-run)
ddev cgl-fix           # auto-fix coding-style violations
```

Development follows **Test Driven Development**: write a failing test, verify it
fails, add the implementation and verify it passes. Use [Conventional Commits](https://www.conventionalcommits.org/) for messages (`feat:`, `fix:`,
`docs:`, …), branch off `main` and open the pull request against `main`.
