PHPackages                             peter-vincze/laravel-ab - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Testing &amp; Quality](/categories/testing)
4. /
5. peter-vincze/laravel-ab

ActiveLibrary[Testing &amp; Quality](/categories/testing)

peter-vincze/laravel-ab
=======================

Laravel A/B experiment testing tool normal and revisioned way

1.2.0(6y ago)010MITPHPPHP ^7.0

Since Feb 7Pushed 5y agoCompare

[ Source](https://github.com/peter-vincze/laravel-ab)[ Packagist](https://packagist.org/packages/peter-vincze/laravel-ab)[ Docs](https://github.com/ben182/laravel-ab)[ RSS](/packages/peter-vincze-laravel-ab/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependencies (5)Versions (8)Used By (0)

######  [![](https://camo.githubusercontent.com/42de242d9a3ef51acd6cb4ca83997f5a2c889b47334c014c92339d23122b2685/68747470733a2f2f692e6962622e636f2f687937666a4d472f4c61726176656c2d41422e706e67)](https://camo.githubusercontent.com/42de242d9a3ef51acd6cb4ca83997f5a2c889b47334c014c92339d23122b2685/68747470733a2f2f692e6962622e636f2f687937666a4d472f4c61726176656c2d41422e706e67)

[](#----)

[![Latest Version](https://camo.githubusercontent.com/c3ce61db6a98f1a6d141a4fc3b3f83c182674ba8/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f62656e3138322f6c61726176656c2d61622e7376673f7374796c653d666c61742d737175617265)](https://github.com/peter-vincze/laravel-ab/releases)[![Build Status](https://camo.githubusercontent.com/7994c56ad88fb3e839360835571cc670d88af2e2/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f62656e3138322f6c61726176656c2d61622f6d61737465722e7376673f7374796c653d666c61742d737175617265)](https://travis-ci.org/peter-vincze/laravel-ab)

This package helps you to find out which content works on your site and which doesn't.

It allows you to create experiments and goals. The visitor will receive randomly the next experiment and you can customize your site to that experiment. The view and the goal conversion will be tracked and you can view the results in a report. It can work as a git repo based way, to be able to get separate codes for separate abtest experiments, to be able to easier maintain the code back to the master code in git revisioning when ab test goals are over.

Installation
------------

[](#installation)

This package can be used in Laravel 8 or higher.

You can install the package via composer:

```
composer require peter-vincze/laravel-ab
```

Config
------

[](#config)

After installation publish the config file.use the command above.

```
php artisan vendor:publish --provider="PeterVincze\AbTesting\AbTestingServiceProvider"
```

If you write a config as to checkout branch(es)/commit(s) from repo what config experiment git\_repo field specify into abtesting/{experiment-&gt;id} directory under base\_path() is going to happen, with composer install and npm update and npm run development. If you make a "ab-testing-deploy-script" directory under base\_path() in the branch/commit the process going to search for the config of the per experiment based deploy\_script field filename in that directory, and going to run it, and finally after deleting the .git directory under all abtesting/\*\* directories to remove the revision system by reason of performance. If you change config.php you should run this script every time to synchronize changes, do not forget if an experiment name is the same as before, by running this command, it will lost its goals and visits. You can autocomplete goals by a regexp pattern of request uri what you can specity also in the config under the goal, the field name is autocompletegoal\_route\_regexp\_pattern, if a goal is not a complicated logic, or if you can organize your logic around a route regexp pattern. This means once an ab stat is ready, and we can make a choice from them, than you can only cherry pick a commit on top of master, without any code cleaning.

```
php artisan ab:config
```

You can define your experiments and goals in there.

Finally, run the newly added migration

```
php artisan migrate
```

Two new migrations should be added.

Usage
-----

[](#usage)

### Experiments

[](#experiments)

```
@if (AbTesting::isExperiment('logo-big'))

@elseif (AbTesting::isExperiment('logo-grayscale'))

@elseif (AbTesting::isExperiment('brand-name'))

    Brand name

@endif
```

That's the most basic usage of the package. You don't have to initialize anything. The package handles everything for you if you call `isExperiment`

Alternatively you can use a custom blade if statement:

```
@ab('logo-big')

@elseab('logo-grayscale')

@elseab('brand-name')

    Brand name

@endab
```

This will work exactly the same way.

If you don't want to make any continual rendering you can call

```
AbTesting::pageView()
```

directly and trigger a new page view with a random experiment. This function will also be called from `isExperiment`.

Under the hood a new session item will keep track of the current experiment. A session will only get one experiment and only trigger one page view.

You can grab the current experiment with:

```
// get the underlying model
AbTesting::getExperiment()

// get the experiment name
AbTesting::getExperiment()->name

// get the visitor count
AbTesting::getExperiment()->visitors
```

Alternatively there is a request helper for you:

```
public function index(Request $request) {
    // the same as 'AbTesting::getExperiment()'
    $request->abExperiment()
}
```

### Goals

[](#goals)

To complete a goal simply call:

```
AbTesting::completeGoal('signup')
```

The function will increment the conversion of the goal assigned to the active experiment. If there isn't an active experiment running for the session one will be created. You can only trigger a goal conversion once per session. This will be prevented with another session item. The function returns the underlying goal model.

To get all completed goals for the current session:

```
AbTesting::getCompletedGoals()
```

### Bots and crawlers

[](#bots-and-crawlers)

The package can try to ignore bots and crawlers from registering pageviews. Just enable the `ignore_crawlers` option in the config.

### Report

[](#report)

To get a report of the page views, completed goals and conversion call the report command:

```
php artisan ab:report
```

This prints something like this:

```
+---------------+----------+-------------+
| Experiment    | Visitors | Goal signup |
+---------------+----------+-------------+
| big-logo      | 2        | 1 (50%)     |
| small-buttons | 1        | 0 (0%)      |
+---------------+----------+-------------+

```

### Reset

[](#reset)

To reset all your visitors and goal completions call the reset command:

```
php artisan ab:reset
```

### Events

[](#events)

In addition you can hook into two events:

- `ExperimentNewVisitor` gets triggered once an experiment gets assigned to a new visitor. You can grab the experiment as a property of the event.
- `GoalCompleted` gets triggered once a goal is completed. You can grab the goal as a property of the event.

### Testing

[](#testing)

```
composer test
```

### Changelog

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

### Security

[](#security)

If you discover any security related issues, please email  instead of using the issue tracker.

Credits
-------

[](#credits)

- [Peter Vincze](https://github.com/peter-vincze)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

Laravel Package Boilerplate
---------------------------

[](#laravel-package-boilerplate)

This package was generated using the [Laravel Package Boilerplate](https://laravelpackageboilerplate.com).

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity5

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 93.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~43 days

Recently: every ~64 days

Total

7

Last Release

2392d ago

Major Versions

0.1.2 → 1.0.02019-04-05

### Community

Maintainers

![](https://www.gravatar.com/avatar/28311ab637409817930f97007a3de207f78fb5d07717332a95d0ec4e0d260a27?d=identicon)[VinczePeter](/maintainers/VinczePeter)

---

Top Contributors

[![ben182](https://avatars.githubusercontent.com/u/17678582?v=4)](https://github.com/ben182 "ben182 (76 commits)")[![adevade](https://avatars.githubusercontent.com/u/1066486?v=4)](https://github.com/adevade "adevade (4 commits)")[![peter-vincze](https://avatars.githubusercontent.com/u/3929277?v=4)](https://github.com/peter-vincze "peter-vincze (1 commits)")

---

Tags

phplaravellaravel-packageab-testinglaravel-5-packageben182

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/peter-vincze-laravel-ab/health.svg)

```
[![Health](https://phpackages.com/badges/peter-vincze-laravel-ab/health.svg)](https://phpackages.com/packages/peter-vincze-laravel-ab)
```

###  Alternatives

[larastan/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

6.4k43.5M5.2k](/packages/larastan-larastan)[ben182/laravel-ab

Laravel A/B experiment testing tool

10913.7k](/packages/ben182-laravel-ab)[sbsaga/toon

🧠 TOON for Laravel — a compact, human-readable, and token-efficient data format for AI prompts &amp; LLM contexts. Perfect for ChatGPT, Gemini, Claude, Mistral, and OpenAI integrations (JSON ⇄ TOON).

6115.6k](/packages/sbsaga-toon)[calebdw/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

1484.6k3](/packages/calebdw-larastan)[imanghafoori/laravel-makesure

A Laravel package to help you write expressive tests

212.7k3](/packages/imanghafoori-laravel-makesure)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
