TYPO3 Extension Conformance Checker
Evaluate TYPO3 extensions against TYPO3 coding standards, architecture patterns, and best practices.
When to Use
- Assessing extension quality or TER readiness
- Generating scored conformance reports
- Planning modernization to v12/v13/v14
Delegation
Testing -> typo3-testing | Docs -> typo3-docs | OpenSSF -> enterprise-readiness
Workflow
Step 0: Context
Read ext_emconf.php + composer.json to determine TYPO3/PHP version, extension type, scope.
Steps 1-10: Checks
- Metadata -- Extension key, TYPO3 version, type
- Structure -- composer.json, ext_emconf.php, Classes/, Configuration/, Resources/
- Coding -- strict_types, PSR-12, PHP 8.4 explicit nullable, PHP 8.5 float-to-int
- Prohibited -- No
$GLOBALS, noGeneralUtility::makeInstance()for services - Architecture -- Constructor DI, Services.yaml, PSR-14 events
- Backend -- ES6 modules, Modal API, CSRF, CSP (v13+)
- Testing -- PHPUnit, Playwright E2E, coverage >70%
- Practices -- DDEV, runTests.sh, CI/CD, quality tools
- TER -- Publish workflow, upload comment format
- Audit -- PHPStan baseline, TCA searchFields/default_sortby, XLIFF completeness, cache has()+get() anti-pattern, Extbase query property names, multi-version adapters
Step 11: Verify
Re-run after fixes. Document score delta (e.g., "58 -> 82").
Quick Grep Recipes
# Missing strict_types
grep -rL 'strict_types' Classes/ --include='*.php'
# Prohibited $GLOBALS
grep -rn '\$GLOBALS' Classes/ --include='*.php'
# makeInstance for services
grep -rn 'GeneralUtility::makeInstance' Classes/ --include='*.php'
# PHP 8.4 implicit nullable (deprecated)
grep -rPn '\(\s*[A-Za-z\\]+\s+\$\w+\s*=\s*null' Classes/ --include='*.php' | grep -v '?'
# Cache has()+get() anti-pattern
grep -rn '->has(' Classes/ --include='*.php'
# ext_emconf must NOT have strict_types
grep -l 'strict_types' ext_emconf.php
# PHP 8.5 implicit float-to-int (deprecated)
grep -rn '(int)\s*\$' Classes/ --include='*.php'
# Bootstrap 4 data attributes in Fluid
grep -rn 'data-toggle\|data-dismiss\|data-ride' Resources/ --include='*.html'
Scoring
Base (0-100): Architecture(20) + Guidelines(20) + PHP(20) + Testing(20) + Practices(20). Excellence bonus up to 22. Critical issues block regardless.
| Range | Level | Action | |-------|-------|--------| | 90+ | Excellent | Production/TER ready | | 80-89 | Good | Minor fixes | | 70-79 | Acceptable | Fix before release | | 50-69 | Needs Work | Significant effort | | <50 | Critical | Block deployment |
References
references/extension-architecture.md-- Structure, required filesreferences/coding-guidelines.md-- PSR-12, naming, PHPStanreferences/php-architecture.md-- DI, events, middlewarereferences/testing-standards.md-- PHPUnit/Playwrightreferences/composer-validation.md-- composer.json rulesreferences/ext-emconf-validation.md-- TER fieldsreferences/version-requirements.md-- TYPO3/PHP compatreferences/dual-version-compatibility.md-- v12+v13references/multi-version-dependency-compatibility.md-- Adapter patternreferences/v13-deprecations.md-- Migration pathsreferences/backend-module-v13.md-- ES6, Modal, a11yreferences/ter-publishing.md-- TER workflowreferences/report-template.md-- Report formatreferences/excellence-indicators.md-- Bonus scoringreferences/best-practices.md-- Organizational patterns
Asset templates in assets/Build/: PHPStan, PHP-CS-Fixer, Rector, ESLint, Stylelint, TypoScript lint.