Looking to hire Laravel developers? Try LaraJobs

laravel-dynamic-config maintained by imran

Description
Dynamic runtime configuration system for Laravel applications.
Author
Last update
2026/05/15 08:29 (dev-main)
License
Links
Downloads
0

Comments
comments powered by Disqus

Laravel Dynamic Config 🚀

Latest Version on Packagist Total Downloads License

Take control of your Laravel application configuration at runtime. Load, merge, and override configuration from multiple sources like Databases, YAML, JSON, and PHP files without redeploying your app.


🌟 Why Laravel Dynamic Config?

In modern web applications, configuration often needs to be more than just static .env or PHP files. Whether it's white-labeling settings, feature flags stored in a database, or environment-specific overrides in YAML/JSON, managing these can become a nightmare.

The Problem

  • Deployment Overhead: Changing a simple config value often requires a full CI/CD pipeline run.
  • Database Settings: Storing settings in the database but struggling to inject them seamlessly into Laravel's config() system.
  • Complexity: Merging multiple configuration sources manually is error-prone and hard to maintain.

The Solution

Laravel Dynamic Config provides a robust, priority-based configuration engine that hooks directly into Laravel's core. It allows you to define multiple "sources" of truth and merges them intelligently, giving you a unified config() API while keeping your application fast with built-in caching.


✨ Features

  • 🛠 Multiple Drivers: Out-of-the-box support for Database, YAML, JSON, and PHP.
  • 🧬 Priority Merging: Define which source takes precedence. Higher priority sources override lower ones.
  • 📦 Namespace Support: Load configuration into specific keys (e.g., services.stripe) or the root config.
  • High Performance: Custom caching engine ensures your app remains blazing fast.
  • 💻 CLI Power: Artisan commands for debugging, caching, and clearing configuration.
  • 🧩 Extensible: Easily add your own custom drivers.

🚀 Installation

You can install the package via composer:

composer require imran/laravel-dynamic-config

Publish the configuration file:

php artisan vendor:publish --provider="Imran\DynamicConfig\DynamicConfigServiceProvider"

Note: If you intend to use YAML configurations, ensure you have the symfony/yaml package installed: composer require symfony/yaml

Configuration

Define your sources in config/dynamic-config.php:

return [
    'merge_strategy' => 'deep', // deep, replace, append
    'cache_file' => base_path('bootstrap/cache/dynamic_config.php'),
    
    'sources' => [
        [
            'driver'   => 'json',
            'priority' => 5,
            'path'     => storage_path('configs/app.json'),
        ],
        [
            'driver'   => 'yaml',
            'priority' => 10,
            'path'     => storage_path('configs/features.yaml'),
        ],
        [
            'driver'   => 'database',
            'priority' => 20,
            'table'    => 'app_configs',
        ],
    ],
];

Artisan Commands

Caching Configurations

Because dynamic configurations bypass Laravel's native config:cache, you must use this package's cache commands for production performance.

php artisan dynamic-config:cache

To clear the generated cache:

php artisan dynamic-config:clear

Debugging Resolutions

Ever wonder where a config value came from? Use the debug command to see a resolution tree for a specific key:

php artisan dynamic-config:debug app.name

Output:

Inspecting key: app.name

├── json[1]: "My App"
├── yaml[1]: "Enterprise App"
└── final: "Enterprise App"

Extending Drivers

You can easily add your own drivers (e.g., API, Redis, Vault) by creating a class that implements Imran\DynamicConfig\Contracts\ConfigDriver and extending the ConfigManager inside your AppServiceProvider.

use Imran\DynamicConfig\ConfigManager;

public function boot()
{
    $this->app->make(ConfigManager::class)->extend('redis', RedisDriver::class);
}

License

The MIT License (MIT). Please see License File for more information.