laraplugins / doctor-health
Laravel Doctor diagnostic that checks your composer dependencies against the LaraPlugins health index.
Requires
- illuminate/contracts: ^12.0|^13.0
- illuminate/http: ^12.0|^13.0
- illuminate/support: ^12.0|^13.0
- laravel/doctor: ^0.1
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.0
- orchestra/testbench: ^10.0|^11.0
- pestphp/pest: ^4.0|^5.0
README
A Laravel Doctor diagnostic that checks your application's composer dependencies against the LaraPlugins health index and reports the verdict for every indexed package.
When you run php artisan doctor, a single laraplugins diagnostic is added:
- fail — when any dependency is unhealthy (or archived, if
archived_verdict = fail) - warn — when a dependency is
medium, or archived (default) - notice — when there are no issues but some packages are not indexed by LaraPlugins
- pass — when every indexed dependency is healthy
- skip — when there are no dependencies, or the diagnostic is disabled
- warn — when the LaraPlugins API cannot be reached (configurable)
Each verdict includes a per-package breakdown in its details:
spatie/laravel-permission 6.9.0 → Healthy (latest 6.9.0)
laravel/framework 13.23.0 → Medium
vendor/archived 1.0.0 → Healthy (archived)
Installation
composer require laraplugins/doctor-health
The package registers automatically via Composer package discovery. The
laraplugins/doctor-health diagnostic is added to your existing Doctor suite.
To publish and customize the configuration:
php artisan vendor:publish --tag=doctor-health-config
What data is sent
When the diagnostic runs, the following is sent to https://laraplugins.io/api/v1/packages/health:
- The names and installed versions of every package in your
composer.jsonrequireandrequire-devsections (platform packages such asphp,ext-*, andlib-*are never sent). - No source code, configuration values, environment variables, or other project data.
LaraPlugins logs the received package names for ecosystem analytics and to discover packages that are not yet indexed. It does not store IP addresses — they are salted-hashed for abuse protection only.
If your project is air-gapped or you prefer not to send dependency data, disable the diagnostic entirely:
// config/laraplugins-doctor-health.php 'enabled' => false,
or exclude individual packages:
'exclude_packages' => ['laraplugins/doctor-health', 'vendor/private'],
Configuration
| Key | Default | Description |
|---|---|---|
url |
https://laraplugins.io |
Base URL of the health-check API (LARAPLUGINS_DOCTOR_URL) |
timeout |
5 |
Total HTTP timeout in seconds |
connect_timeout |
5 |
Connection timeout in seconds |
retry.times / retry.sleep |
2 / 100 |
HTTP retry attempts and delay in ms |
enabled |
true |
Kill-switch for the diagnostic |
include_require_dev |
true |
Send require-dev packages too |
package_limit |
250 |
Maximum packages sent per run |
unreachable_verdict |
warn |
Verdict when the API is unreachable (warn, skip, or error) |
archived_verdict |
warn |
Verdict for archived/abandoned packages (warn or fail) |
exclude_packages |
[] |
Packages never sent to the API |
http_headers |
[] |
Extra headers on every request |
Selecting the diagnostic
Use Doctor's normal selector options:
php artisan doctor --only=laraplugins php artisan doctor --except=laraplugins php artisan doctor --only=laraplugins/doctor-health
Development
The package is developed with Testbench Workbench:
composer test # run the Pest test suite composer build # rebuild the workbench app ./vendor/bin/pint # code style ./vendor/bin/phpstan # static analysis
License
MIT