fr3on / laravel-drift
Pre-deploy environment validation & config drift detection for Laravel applications.
0.0.1
2026-04-10 13:40 UTC
Requires
- php: ^8.2
- illuminate/support: ^10.0|^11.0|^12.0|^13.0
- symfony/console: ^6.0|^7.0|^8.0
Requires (Dev)
- laravel/pint: ^1.0
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.0|^3.0
README
Laravel Drift is a pre-deploy environment validation and configuration drift detection tool. It acts as a gatekeeper, comparing your .env against .env.example and running safety checks before your application boots.
Key Features
- No-Boot Validation: Runs without booting the Laravel application container for maximum safety and speed.
- Drift Detection: Identifies missing keys in
.envor orphan keys in.env.example. - Safety Gates: Prevents common deployment disasters like
APP_DEBUG=truein production or using placeholderAPP_KEYvalues. - Extensible Rules: Easily add your own custom validation rules.
- CI/CD Integration: Simple exit code contracts to block failing builds.
Installation
You can install the package via composer:
composer require fr3on/laravel-drift
You can publish the config file with:
php artisan vendor:publish --tag="drift-config"
Usage
Run the drift check:
php artisan drift:check
In your CI/CD pipeline, use the --strict flag to treat warnings as errors:
php artisan drift:check --strict
Built-in Rules
| Rule | Description | Status |
|---|---|---|
AppDebugRule |
Ensures APP_DEBUG is false when APP_ENV is production. |
Fail |
AppKeyRule |
Validates presence, length, and ensures no placeholder values are used. | Fail |
CompletenessRule |
Compares .env keys against .env.example. |
Fail/Warn |
QueueDriverRule |
Warns if QUEUE_CONNECTION=sync is used in production. |
Warn |
Custom Rules
You can create custom rules by implementing the Fr3on\Drift\Contracts\DriftRule interface:
use Fr3on\Drift\Contracts\DriftRule; use Fr3on\Drift\EnvMap; use Fr3on\Drift\RuleResult; class MyCustomRule implements DriftRule { public function check(EnvMap $env, EnvMap $example): RuleResult { if ($env->missing('MY_REQUIRED_KEY')) { return RuleResult::fail('MY_REQUIRED_KEY is missing!'); } return RuleResult::pass(); } }
Register your rules in config/drift.php.
Credits
License
The MIT License (MIT). Please see License File for more information.