Topics Packages & Ecosystem Pennant Feature Flags
intermediate 14 min read

Pennant Feature Flags

Feature flags with Laravel Pennant, defining features, scoping to users/teams, and Blade integration.

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));

Examples

<?php
use Laravel\Pennant\Feature;

Feature::define('new-dashboard', function (User \$user) {
    return \$user->is_admin || \$user->created_at->diffInDays(now()) < 7;
});

if (Feature::active('new-dashboard')) {
    echo 'Showing new dashboard!';
}

Your Notes

Sign in to take notes for this lesson.

Discussion

Sign in to join the discussion.

Flashcards

Sign in to create flashcards.