# Technical Documentation: symfony/flex

> ℹ️ **Provenance:** In-Tree Documentation (9 Chapters) · [CodeWiki Reference](https://codewiki.google/github.com/symfony/flex) · Recency: Active (< 180 days)

## File: README.md

[Symfony Flex][1] helps developers create [Symfony][2] applications, from the most
simple micro-style projects to the more complex ones with dozens of
dependencies.

[1]: https://symfony.com/doc/current/setup/flex.html
[2]: https://symfony.com

---

## File: composer.json

{
    "name": "symfony/flex",
    "type": "composer-plugin",
    "description": "Composer plugin for Symfony",
    "license": "MIT",
    "authors": [
        {
            "name": "Fabien Potencier",
            "email": "fabien.potencier@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "php": ">=8.1",
        "composer-plugin-api": "^2.1"
    },
    "require-dev": {
        "composer/composer": "^2.1",
        "phpunit/phpunit": "^12.4",
        "symfony/dotenv": "^6.4.41|^7.4.13|^8.0.13",
        "symfony/filesystem": "^6.4|^7.4|^8.0",
        "symfony/process": "^6.4|^7.4|^8.0"
    },
    "conflict": {
        "composer/semver": "<1.7.2",
        "symfony/dotenv": "<5.4"
    },
    "autoload": {
        "psr-4": {
            "Symfony\\Flex\\": "src"
        }
    },
    "extra": {
        "class": "Symfony\\Flex\\Flex"
    }
}

---

## File: tests/Fixtures/packageJson/elevated_dependencies_package.json

{
   "name": "symfony/fixture",
   "dependencies": {
      "@hotcookies/bar": "^1.1|^2",
      "@hotdogs/bun": "^2",
      "@symfony/existing-package": "file:vendor/symfony/existing-package/Resources/assets"
   },
   "devDependencies": {
      "@symfony/stimulus-bridge": "^1.0.0",
      "stimulus": "^1.1.1"
   },
   "browserslist": [
      "defaults"
   ]
}

---

## File: tests/Fixtures/packageJson/package.json

{
   "name": "symfony/fixture",
   "devDependencies": {
      "@symfony/stimulus-bridge": "^1.0.0",
      "stimulus": "^1.1.1",
      "@symfony/existing-package": "file:vendor/symfony/existing-package/Resources/assets"
   },
   "browserslist": [
      "defaults"
   ]
}

---

## File: tests/Fixtures/packageJson/stricter_constraints_package.json

{
   "name": "symfony/fixture",
   "devDependencies": {
      "@hotcookies/bar": "^2",
      "@hotdogs/bun": "^1.9",
      "@symfony/existing-package": "file:vendor/symfony/existing-package/Resources/assets"
   },
   "browserslist": [
      "defaults"
   ]
}

---

## File: tests/Fixtures/packageJson/assets/controllers.json

{
    "controllers": {
        "@symfony/existing-package": {
            "mock": {
                "enabled": false,
                "webpackMode": "eager",
                "autoimport": {
                    "@symfony/existing-package/dist/style.css": false
                }
            }
        }
    },
    "entrypoints": []
}

---

## File: tests/Fixtures/update_recipes/composer.json

{
    "type": "project",
    "license": "proprietary",
    "require": {
        "php": ">=7.1",
        "symfony/console": "5.4.*"
    },
    "config": {
        "allow-plugins": {
            "symfony/flex": true
        }
    }
}

---

## File: .github/workflows/ci.yaml

name: "CI"

on:
    pull_request:
    push:
        branches:
            - '2.x'

jobs:
    tests:
        name: "PHP ${{ matrix.php }} ${{ matrix.mode }}"

        runs-on: ubuntu-latest

        strategy:
            fail-fast: false
            matrix:
                include:
                  - php: '8.1'
                    composer: 2.1.x
                    phpunit: 10
                  - php: '8.2'
                    phpunit: 11
                  - php: '8.3'
                  - php: '8.4'
                  - php: '8.5'
                    mode: low-deps

        steps:
            - name: "Checkout code"
              uses: actions/checkout@v4

            - name: "Install PHP"
              uses: shivammathur/setup-php@v2
              with:
                  coverage: "none"
                  php-version: ${{ matrix.php }}
                  tools: composer:${{ matrix.composer }}

            - if: matrix.php == '8.1'
              name: "Lint PHP files"
              run: |
                find src/ -name '*.php' | xargs -n1 php -l
                find tests/ -name '*.php' | xargs -n1 php -l

            - name: "Validate composer.json"
              run: "composer validate --strict --no-check-lock"

            - name: "Install dependencies"
              run: |
                if [[ -n "${{ matrix.phpunit }}" ]]; then
                    composer r --dev --no-update phpunit/phpunit:^${{ matrix.phpunit }} --ansi
                fi
                if [[ "${{ matrix.phpunit }}" = 10 ]]; then
                    sed -i 's/ *ignoreIndirectDeprecations="true"//g' phpunit.xml.dist
                fi

                if [[ "${{ matrix.mode }}" = low-deps ]]; then
                    composer u --prefer-lowest --prefer-stable --ansi
                else
                    composer u --ansi
                fi

            - name: "Run tests"
              run: vendor/bin/phpunit

---

## File: .github/workflows/fabbot.yml

name: CS

on:
  pull_request:

permissions:
  contents: read

jobs:
  call-fabbot:
    name: Fabbot
    uses: symfony-tools/fabbot/.github/workflows/fabbot.yml@main
    with:
      package: Symfony Flex

--- METRICS ---
- Files Extracted: 9
- Estimated Token Budget: ~1377 tokens
- Recency Window: Active (< 180 days)
- Canonical Reference: https://codewiki.google/github.com/symfony/flex
