icanhazstring/composer-unused
composer-unused detects and removes unused Composer dependencies in PHP/Laravel projects. It analyzes your codebase to find packages not referenced, reports what can be safely removed, and helps keep composer.json/lock lean and maintainable.
Install the package globally or as a dev dependency:
composer require --dev icanhazstring/composer-unused
Run it from your project root:
./vendor/bin/composer-unused
It outputs a list of packages declared in require or require-dev that are not referenced in your code (via use statements, new calls, reflection, or class references). Start by reviewing these to identify candidates for safe removal — especially helpful after refactoring or when onboarding legacy projects.
--format=json or --exit-code=1 to fail the build if unused deps are detected.--with-dev to include dev dependencies in the scan.vendor/composer/autoload_classmap.php, psr-4, etc.) — no manual config needed for standard layouts.script in composer.json:
"scripts": {
"audit:deps": "composer-unused --format=table --with-dev"
}
class_exists(), string-based references (new $className), or runtime-generated code (e.g., Symfony’s proxy classes). Always manually verify borderline cases.--with-dev to avoid overlooking unused dev tools (e.g., phpunit, phpstan) — often forgotten until removed accidentally.--format=summary for high-level CI logs; --format=json for tools parsing results.ignore blocks in composer-unused.yaml config (create with vendor/bin/composer-unused --init) to exclude known false positives (e.g., packages only used in tests or scripts)..php-cs-fixer.cache to exclusions if it exists — the scanner respects .gitignore and common exclusions automatically.vendor/bin/composer-unused -vvv to see debug logs about missing references.How can I help you explore Laravel packages today?