maglnet/composer-require-checker
CLI tool that scans your PHP sources and composer.json to ensure every used class/function/extension comes from an explicit require. Detects “soft” (transitive) dependencies and missing PHP extensions so updates don’t break your package.
composer.json). It aligns well with quality assurance (QA) and dependency hygiene in PHP/Laravel projects.vendor/, autoloading) is fully compatible.guzzlehttp/guzzle being pulled in via another package).pdo_mysql) not explicitly required, which is critical for Laravel’s database/queue drivers.composer.json; runs as a pre-commit hook, CI job, or manual check.true, false, core PHP functions) via composer-require-checker.json.bin/console, CLI scripts) via glob patterns.Illuminate\Support\Collection if not explicitly required).class_alias() or eval()).post-install-cmd). Workaround: Run with --no-plugins.illuminate/, symfony/) that are transitive but safe?parallel-lint)?optimize or package:discover?pint or phpstan for unified QA?vendor/ files)?composer.json.phpstan (static analysis)pint (code formatting)laravel-pint (Laravel-specific linting)illuminate/*).composer.json scripts (e.g., check:dependencies):
"scripts": {
"check:dependencies": "composer-require-checker check --config-file=composer-require-checker.json"
}
- name: Check soft dependencies
run: php composer-require-checker.phar check --config-file=composer-require-checker.json
illuminate/*, symfony/*, laravel/* (if explicitly allowed).vendor/ (e.g., acme/*).{
"whitelist": {
"namespaces": ["Illuminate\\", "Symfony\\Component\\"],
"classes": ["true", "false", "null"]
},
"scan-files": ["bin/*", "routes/*"]
}
--no-plugins flag if plugins alter vendor/ structure.composer install --prefer-dist to ensure consistent vendor/.composer install but before tests/deploy.composer.json to explicitly require flagged dependencies.CONTRIBUTING.md.guzzlehttp/guzzle) may increase composer.json size.new_class()).pdo_mysql).guzzlehttp/guzzle).count()).--exclude-vendor (if safe).composer-require-checker.json in repo.~/.composer-require-checker.json).| Failure Type | Cause | Impact | Mitigation |
|---|---|---|---|
| False Positives | Overly strict whitelisting | Devs ignore tool | Start with permissive config |
| Plugin Incompatibility | Custom installers | Miss |
How can I help you explore Laravel packages today?