Skip to content
CAI
Software that uses CAICheck a score

symfony/symfony

53.6

Adequate · 29 July 2026

381.5k

lines of production code

PHP

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

How this codebase got here

Score

  • CAI 44 → 54 (+9.7)
  • Rubric changed (rubric-2026.08.17 → rubric-2026.08.18) — scores are not directly comparable.

Lenses

  • Code Health 62 → 72 (+10.2)
  • Architecture 100 → 100 (-0.1)
  • Maturity 63 → 67 (+4.1)
  • Readiness 38 → 73 (+35.7)
  • Security 31 → 31 (+0.0)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (332)

  • Change coupling: OidcTokenHandlerFactory.php ↔ OidcTokenHandler.php (src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/AccessToken/OidcTokenHandlerFactory.php)
  • Dependency hygiene not measured — no supported dependency manifest was read
  • Duplicated block (10 lines × 2) (src/Symfony/Bridge/PhpUnit/ClockMock.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Bridge/Twig/Command/DebugCommand.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Bundle/FrameworkBundle/Controller/AbstractController.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/ContainerBuilderDebugDumpPass.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/PhpConfigReferenceDumpPass.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Bundle/FrameworkBundle/KernelBrowser.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Component/AssetMapper/ImportMap/Resolver/JsDelivrEsmResolver.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Component/BrowserKit/HttpBrowser.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Component/Cache/Adapter/AbstractTagAwareAdapter.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Component/Cache/Adapter/MemcachedAdapter.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Component/Cache/Adapter/PdoAdapter.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Component/Cache/Traits/RedisTrait.php)
  • Duplicated block (10 lines × 2) (src/Symfony/Component/Console/ArgumentResolver/ValueResolver/ServiceValueResolver.php)
  • …and 312 more

New (425)

  • AbstractObjectNormalizer.denormalizeParameter (cyclomatic 21) (src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php)
  • AbstractTagAwareAdapter.__construct (cognitive 28) (src/Symfony/Component/Cache/Adapter/AbstractTagAwareAdapter.php)
  • AbstractTagAwareAdapter.__construct (cyclomatic 19) (src/Symfony/Component/Cache/Adapter/AbstractTagAwareAdapter.php)
  • AbstractUnicodeString.replaceMatches (cognitive 16) (src/Symfony/Component/String/AbstractUnicodeString.php)
  • Ask.tryFrom (cognitive 35) (src/Symfony/Component/Console/Attribute/Ask.php)
  • Ask.tryFrom (cyclomatic 27) (src/Symfony/Component/Console/Attribute/Ask.php)
  • AskChoice.tryFrom (cognitive 25) (src/Symfony/Component/Console/Attribute/AskChoice.php)
  • AskChoice.tryFrom (cyclomatic 23) (src/Symfony/Component/Console/Attribute/AskChoice.php)
  • AsyncResponse.__construct (cognitive 24) (src/Symfony/Component/HttpClient/Response/AsyncResponse.php)
  • Change coupling: FrameworkExtension.php ↔ messenger.php (src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php)
  • Change coupling: FrameworkExtension.php ↔ web.php (src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php)
  • Change coupling: UnusedTagsPass.php ↔ FrameworkExtension.php (src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/UnusedTagsPass.php)
  • ChoiceQuestion.getDefaultValidator (cognitive 26) (src/Symfony/Component/Console/Question/ChoiceQuestion.php)
  • ChoiceQuestion.getDefaultValidator (cyclomatic 17) (src/Symfony/Component/Console/Question/ChoiceQuestion.php)
  • ChoiceType.buildForm (cognitive 56) (src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php)
  • ChoiceType.buildForm (cyclomatic 29) (src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php)
  • ChoiceType.configureOptions (cyclomatic 17) (src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php)
  • Configuration.addHttpClientSection (cognitive 24) (src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php)
  • Configuration.addHttpClientSection (cyclomatic 21) (src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php)
  • Configuration.addMessengerSection (cognitive 21) (src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php)
  • …and 405 more

Architecture

  • Unchanged — 0 containers · 1 contexts · 0 edges

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

symfony/symfony was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 29 July 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 7dbebd843d25b2f72e2f7dfbe044c632941ea924 — the exact code this score is about.
  • Scored under rubric-2026.08.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer latest.