explicitdev / laravel-ab-testing
Run Laravel-native A/B tests with sticky assignment, conversion tracking, and result summaries.
Requires
- php: ^8.2
- illuminate/contracts: ^11.0|^12.0|^13.0
- illuminate/database: ^11.0|^12.0|^13.0
- illuminate/support: ^11.0|^12.0|^13.0
- illuminate/view: ^11.0|^12.0|^13.0
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.21
- mockery/mockery: ^1.6
- orchestra/testbench: ^9.0|^10.0|^11.0
- pestphp/pest: ^3.0|^4.0
- pestphp/pest-plugin-laravel: ^3.0|^4.0
- phpunit/phpunit: ^11.0|^12.0
README
Laravel-native experimentation for apps that need more than feature flags.
Laravel A/B Testing is a Laravel-native experimentation package for teams that want more than feature flags. It is designed to help you define experiments as code, assign sticky variants to real Laravel subjects, track conversions, and review trustworthy results without bolting a generic external platform onto your app.
composer require explicitdev/laravel-ab-testing
php artisan vendor:publish --tag=ab-testing-config
php artisan migrate
Features
- Experiments defined in PHP or config
- Sticky variant assignment for Eloquent models and custom subject keys
- Explicit guest-to-user merge helpers for session-backed experiments
- Even and weighted traffic splits
- Primary and secondary goals
- Conversion tracking with deduplication
- Targeting rules
- Experiment lifecycle states: draft, running, paused, concluded
- Result summaries with frequentist significance reporting
- Subject-type segment filters and multi-segment result breakdowns
- Export-friendly JSON and CSV reporting from the results command
- Configurable cached result summaries with a fresh-bypass path for operators
- Structured result alerts with a dedicated Artisan alert view
- Blade directives, events, and Artisan commands
- A full automated test suite with 100% source coverage
Quick Example
Define an experiment in a service provider:
use ExplicitDev\AbTesting\Facades\AB;
AB::experiment('checkout_cta')
->description('Compare checkout button copy for paid plan users.')
->variants(['pay-now', 'complete-order'])
->labels([
'pay-now' => 'Pay Now',
'complete-order' => 'Complete Order',
])
->goal('checkout_completed')
->splitEvenly()
->targeting(fn ($user) => $user->plan === 'paid');
Assign a variant in your application:
$variant = AB::for($user)->variant('checkout_cta');
if ($variant->is('pay-now')) {
$buttonText = 'Pay Now';
} else {
$buttonText = 'Complete Order';
}
Track a conversion when the goal happens:
AB::for($user)->convert('checkout_cta');
Inspect results:
$results = AB::results('checkout_cta');
Segment-aware result slices stay in the same API:
use ExplicitDev\AbTesting\Results\ResultSegment;
$guestResults = AB::results(
'checkout_cta',
segment: ResultSegment::subjectType('session', 'Guest Sessions'),
);
$merge = AB::forSubject('session:'.$sessionKey, 'session')->mergeInto($user);
$freshRows = AB::results('checkout_cta', fresh: true)->rows();
$alerts = AB::results('checkout_cta')->alerts();
Why This Package Exists
Laravel Pennant is excellent for feature flags and controlled rollouts, but it is not a full experiment system. A real experiment package needs:
- sticky assignment
- goal tracking
- conversion deduplication
- experiment lifecycle controls
- result summaries with clear statistical framing
- Laravel-native ergonomics across Blade, Eloquent, events, queues, and Artisan
The package focuses on self-hosted experimentation workflows for Laravel teams.
Current Non-Goals
The package does not try to solve every experimentation problem:
- Bayesian reporting
- sequential testing
- multivariate testing
- automatic cross-device guest identity resolution
- full funnel definitions
- hosted SaaS control plane
- drag-and-drop experiment builder
Those can come later without complicating the core package.
Documentation
Start with the documentation index:
- Installation
- Quick Start
- Core Concepts
- Defining Experiments
- Assigning Variants
- Tracking Conversions
- Results And Statistics
- Best Practices
- Examples
- Onboarding Integration
Commercial Add-Ons
The MIT core covers the fundamentals. Paid add-ons can focus on business visibility and operator workflows:
- Filament dashboard
- experiment management UI
- deeper segment analysis
- reporting dashboards and workflow layers
- advanced statistics
- notification delivery, alert routing, and audit trails
Commercial add-ons are sold through Explicit Development at https://explicitdev.com/packages.
Support
Open bugs, install questions, documentation gaps, and feature requests in:
explicitdev/laravel-ab-testing-support- https://gitlab.com/explicitdev/laravel-ab-testing-support
Testing The Package
composer test
composer analyse
composer format:test
composer test:coverage
Contributing
Please read CONTRIBUTING.md before opening an issue or merge request.
Security
Please review SECURITY.md for supported versions and vulnerability reporting.
Guiding Principle
The package aims to stay easier, clearer, and more Laravel-native than wiring a generic experimentation tool into a Laravel app.
License
Laravel A/B Testing is open-sourced software licensed under the MIT license.