Laravel Pennant
// Install: composer require laravel/pennant
// config/pennant.php
return [
"default" => env("PENNANT_STORE", "database"),
"stores" => [
"database" => ["driver" => "database", "table" => "features"],
"array" => ["driver" => "array"],
],
];
Defining Features
use Laravel\Pennant\Feature;
Feature::define("new-checkout-flow", function (User $user) {
return match (true) {
$user->is_admin => true,
$user->is_tester => true,
default => $user->created_at->diffInDays(now()) > 30,
};
});
Checking Features
// In PHP
if (Feature::active("new-checkout-flow")) { ... }
// In Blade
@feature("new-checkout-flow")
<x-checkout-new />
@else
<x-checkout-old />
@endfeature
// In middleware
Route::get("/checkout", [CheckoutController::class, "index"])
->middleware("features:new-checkout-flow");
Percentage Rollout
Feature::define("new-onboarding", fn () => Feature::percentage(50));