drupol/composer-packages
Retrieve the list of packages installed by Composer in your project through a simple, object-oriented API, including names, versions, and metadata—no manual parsing of composer.lock or installed.json required.
composer show or hand-parsing composer.lock.Composer\InstalledVersions as a runtime API (getInstalledPackages(), getVersion(), getPrettyVersion()), which covers the majority of this package's value with zero third-party dependency. That reframes the decision from "adopt a package" to "write a ~30-line service class." Buying here only makes sense if you are pinned to Composer 1 or PHP 7.x-era tooling.composer audit plus dedicated SBOM tooling, not this.Adopt (or, more realistically, fork/vendor) only when all of the following hold:
Composer\InstalledVersions.composer install/update — a supply-chain review item that a plain library would not trigger.Look elsewhere when:
Composer\InstalledVersions and own the 30 lines yourself.composer licenses) is more auditable than an in-app plugin.composer audit or a commercial SCA feed.composer.lock via a small injected service fits the framework's conventions better and keeps the dependency graph clean.The MIT license is permissive and removes legal friction; it does not offset the maintenance and install-time-execution concerns.
To executives (one line): A small MIT-licensed utility that reports which packages are installed — useful for admin/support screens and license inventories, but it has been unmaintained since 2020, and the capability is now built into Composer itself. Recommendation: do not add it as a dependency; spend roughly one engineering day building the equivalent in-house and avoid the maintenance and supply-chain exposure.
To engineering: The only genuinely reusable idea here is "expose installed-package metadata to application code." On Composer 2 that is Composer\InstalledVersions::getInstalledPackages() plus getPrettyVersion() — no plugin, no install-time execution, no abandoned dependency. Implement it as a small injectable service (a Laravel singleton bound to an interface) with a cached result, and you get the same feature with a fraction of the risk. If you do evaluate the package, read the source first and pin it via a fork you control rather than pulling it transitively.
How can I help you explore Laravel packages today?