PHPackages                             togglebox/laravel - 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. [API Development](/categories/api)
4. /
5. togglebox/laravel

ActiveLibrary[API Development](/categories/api)

togglebox/laravel
=================

Laravel SDK for ToggleBox - Remote Config, Feature Flags, and A/B Experiments

00PHP

Since Jan 30Pushed 3mo agoCompare

[ Source](https://github.com/ulpi-io/togglebox-laravel)[ Packagist](https://packagist.org/packages/togglebox/laravel)[ RSS](/packages/togglebox-laravel/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

ToggleBox Laravel SDK
=====================

[](#togglebox-laravel-sdk)

Official Laravel SDK for [ToggleBox](https://github.com/ulpi-io/togglebox) - Remote Config, Feature Flags, and A/B Experiments.

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

[](#installation)

```
composer require togglebox/laravel
```

The service provider will be auto-discovered. Publish the configuration:

```
php artisan vendor:publish --tag=togglebox-config
```

Configuration
-------------

[](#configuration)

Add to your `.env` file:

```
# Required
TOGGLEBOX_PLATFORM=web
TOGGLEBOX_ENVIRONMENT=production

# For self-hosted
TOGGLEBOX_API_URL=https://api.yourdomain.com

# For cloud
TOGGLEBOX_TENANT_SUBDOMAIN=your-tenant

# Optional
TOGGLEBOX_API_KEY=your-api-key
TOGGLEBOX_CONFIG_VERSION=stable
TOGGLEBOX_CACHE_TTL=300
```

Usage
-----

[](#usage)

### Using the Facade

[](#using-the-facade)

```
use ToggleBox\Laravel\Facades\ToggleBox;

// Tier 1: Remote Configs
$apiUrl = ToggleBox::config('api_url', 'https://default.api.com');
$allConfigs = ToggleBox::allConfigs();

// Tier 2: Feature Flags
if (ToggleBox::enabled('dark-mode')) {
    // Show dark mode UI
}

// With targeting context
if (ToggleBox::enabled('premium-feature', userId: 'user-123', country: 'US')) {
    // Show premium feature
}

// Get full flag details
$flag = ToggleBox::flag('ui-version');
echo $flag->value; // The actual value

// Get flag metadata without evaluation
$flagInfo = ToggleBox::flagInfo('dark-mode');
if ($flagInfo) {
    echo $flagInfo->name;    // 'Dark Mode'
    echo $flagInfo->enabled; // true/false
}

// Tier 3: Experiments
$variant = ToggleBox::variant('checkout-redesign');
if ($variant) {
    echo $variant->variationKey; // 'control', 'variant_1', etc.
    echo $variant->value;        // The variant's value
}

// Check specific variation
if (ToggleBox::inVariation('checkout-redesign', 'variant_1')) {
    // Show new checkout
}

// Track conversions
ToggleBox::trackConversion('checkout-redesign', 'purchase', value: 99.99);

// Get experiment metadata without assignment
$expInfo = ToggleBox::experimentInfo('checkout-redesign');
if ($expInfo) {
    echo $expInfo->status; // 'running', 'draft', 'completed'
}

// Check API health
$health = ToggleBox::checkConnection();
echo $health['status']; // 'ok'
```

### Using Helper Functions

[](#using-helper-functions)

```
// Feature flags
if (feature('dark-mode')) {
    // ...
}

// Remote config
$maxRetries = remote_config('max_retries', 3);

// Experiments
$variant = experiment('checkout-redesign');

// Check API health
$health = check_togglebox();
```

### Using Dependency Injection

[](#using-dependency-injection)

```
use ToggleBox\Laravel\ToggleBoxManager;

class CheckoutController extends Controller
{
    public function __construct(
        private readonly ToggleBoxManager $togglebox,
    ) {}

    public function show()
    {
        $variant = $this->togglebox->variant('checkout-redesign');

        return view('checkout', [
            'variant' => $variant,
        ]);
    }
}
```

### Blade Directives

[](#blade-directives)

```
{{-- Remote config values --}}
Theme: @config('theme', 'default')
Max items: @config('max_items', 10)

{{-- Feature flags --}}
@feature('dark-mode')
    Dark mode enabled!
@featureelse
    Light mode
@endfeature

{{-- Experiments --}}
@experiment('checkout-redesign', 'variant_1')

@endexperiment

@experiment('checkout-redesign', 'control')

@endexperiment

{{-- Get variant value --}}

```

Automatic User Resolution
-------------------------

[](#automatic-user-resolution)

By default, the SDK uses the authenticated user's ID. Configure in `config/togglebox.php`:

```
// Use Auth::id()
'user_resolver' => 'auth',

// Use session ID
'user_resolver' => 'session',

// Custom resolver
'user_resolver' => fn() => request()->header('X-User-ID') ?? 'anonymous',
```

Caching
-------

[](#caching)

The SDK uses Laravel's cache system by default. Configure in `config/togglebox.php`:

```
'cache' => [
    'enabled' => true,
    'ttl' => 300, // 5 minutes
    'store' => 'redis', // null for default store
    'prefix' => 'togglebox',
],
```

### Manual Cache Control

[](#manual-cache-control)

```
// Refresh all cached data
ToggleBox::refresh();

// Clear all caches
ToggleBox::clearCache();
```

Stats &amp; Analytics
---------------------

[](#stats--analytics)

Stats are automatically flushed on request termination. You can also flush manually:

```
ToggleBox::flushStats();
```

Disable auto-flush in `config/togglebox.php`:

```
'stats' => [
    'flush_on_terminate' => false,
],
```

Accessing the Underlying Client
-------------------------------

[](#accessing-the-underlying-client)

```
$client = ToggleBox::client();

// Use the PHP SDK directly
$allConfigs = $client->getAllConfigs();
$apiUrl = $client->getConfigValue('api_url', 'https://default.api.com');
```

Testing
-------

[](#testing)

In tests, you can mock the ToggleBox facade:

```
use ToggleBox\Laravel\Facades\ToggleBox;

public function test_premium_feature()
{
    ToggleBox::shouldReceive('enabled')
        ->with('premium-feature', null, null, null, false)
        ->andReturn(true);

    $response = $this->get('/premium');

    $response->assertSee('Premium Content');
}
```

Or bind a mock client:

```
use ToggleBox\Laravel\ToggleBoxManager;

$this->mock(ToggleBoxManager::class, function ($mock) {
    $mock->shouldReceive('enabled')
        ->with('dark-mode')
        ->andReturn(true);
});
```

Configuration Reference
-----------------------

[](#configuration-reference)

KeyEnvironment VariableDefaultDescription`platform``TOGGLEBOX_PLATFORM``web`Platform identifier`environment``TOGGLEBOX_ENVIRONMENT``APP_ENV`Environment name`api_url``TOGGLEBOX_API_URL``null`Self-hosted API URL`tenant_subdomain``TOGGLEBOX_TENANT_SUBDOMAIN``null`Cloud tenant subdomain`api_key``TOGGLEBOX_API_KEY``null`API key`config_version``TOGGLEBOX_CONFIG_VERSION``stable`Default config version`cache.enabled``TOGGLEBOX_CACHE_ENABLED``true`Enable caching`cache.ttl``TOGGLEBOX_CACHE_TTL``300`Cache TTL (seconds)`cache.store``TOGGLEBOX_CACHE_STORE``null`Laravel cache store`stats.enabled``TOGGLEBOX_STATS_ENABLED``true`Enable stats`stats.flush_on_terminate``TOGGLEBOX_STATS_FLUSH_ON_TERMINATE``true`Auto-flush stats`blade_directives``TOGGLEBOX_BLADE_DIRECTIVES``true`Enable Blade directivesRequirements
------------

[](#requirements)

- PHP 8.1 or higher
- Laravel 10.x or 11.x

License
-------

[](#license)

MIT

###  Health Score

18

—

LowBetter than 8% of packages

Maintenance53

Moderate activity, may be stable

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity12

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% 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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/20f19ea84963f3f5874cb28d5681684402f313ab70683faa1f1962a6fbcf0863?d=identicon)[CiprianSpiridon](/maintainers/CiprianSpiridon)

---

Top Contributors

[![CiprianSpiridon](https://avatars.githubusercontent.com/u/1598171?v=4)](https://github.com/CiprianSpiridon "CiprianSpiridon (9 commits)")

### Embed Badge

![Health badge](/badges/togglebox-laravel/health.svg)

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

###  Alternatives

[stripe/stripe-php

Stripe PHP Library

4.0k143.3M480](/packages/stripe-stripe-php)[twilio/sdk

A PHP wrapper for Twilio's API

1.6k92.9M272](/packages/twilio-sdk)[facebook/php-business-sdk

PHP SDK for Facebook Business

90821.9M34](/packages/facebook-php-business-sdk)[meilisearch/meilisearch-php

PHP wrapper for the Meilisearch API

74513.7M114](/packages/meilisearch-meilisearch-php)[google/gax

Google API Core for PHP

265103.1M454](/packages/google-gax)[google/common-protos

Google API Common Protos for PHP

173103.7M50](/packages/google-common-protos)

PHPackages © 2026

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