pradeepdev001 / laravel-environment-manager
A secure, enterprise-grade Laravel package to manage .env variables via a web UI and Artisan commands.
Package info
github.com/pradeepdev001/laravel-environment-manager
pkg:composer/pradeepdev001/laravel-environment-manager
Requires
- php: ^8.1
- illuminate/console: ^8.0|^9.0|^10.0|^11.0|^12.0
- illuminate/contracts: ^8.0|^9.0|^10.0|^11.0|^12.0
- illuminate/database: ^8.0|^9.0|^10.0|^11.0|^12.0
- illuminate/http: ^8.0|^9.0|^10.0|^11.0|^12.0
- illuminate/notifications: ^8.0|^9.0|^10.0|^11.0|^12.0
- illuminate/routing: ^8.0|^9.0|^10.0|^11.0|^12.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0|^12.0
- symfony/yaml: ^5.0|^6.0|^7.0
Requires (Dev)
- fakerphp/faker: ^1.23
- laravel/pint: ^1.13
- mockery/mockery: ^1.6
- orchestra/testbench: ^6.47|^7.56|^8.37|^9.17|^10.11
- pestphp/pest: ^1.23|^2.36|^3.8
- pestphp/pest-plugin-laravel: ^1.4|^2.4|^3.2
- phpstan/phpstan: ^1.10|^2.0
This package is auto-updated.
Last update: 2026-08-08 18:41:51 UTC
README
A secure, enterprise-grade Laravel package to manage .env variables through a web-based admin UI and Artisan commands. Built for teams who need visibility, control, and auditability over their application configuration.
Features
- Viewer — browse all env variables grouped by category with search, filter, and sort
- Editor — add, update, delete, rename, and bulk edit variables with atomic file writes
- Sensitive value masking — auto-detects and masks
APP_KEY,*_PASSWORD,*_SECRET,STRIPE_*, etc. - Validation — built-in rules for
APP_URL,MAIL_PORT,DB_CONNECTION,CACHE_DRIVER, and more - Backup & restore — automatic pre-change backups, manual backups, encrypted backups, restore from UI or CLI
- Version history — full audit trail of every change with user, IP, reason, and rollback support
- Diff viewer — compare any two snapshots side-by-side
- Import / Export —
.env, JSON, and YAML formats with pre-import validation - Environment comparison — compare Local, Staging, Production side-by-side
- Cache management — auto-runs
config:clear,config:cache, etc. after every save - REST API — full CRUD API with Sanctum auth and rate limiting
- Artisan commands —
list,get,set,delete,backup,restore,compare,validate - Role-based authorization — Super Admin, Admin, Read Only with configurable permissions
- Audit log — records every action with user, IP, browser, and timestamp
- Notifications — Mail, Slack, Teams, and custom webhooks
- Dark mode — responsive Blade UI with OS-level dark mode support
Requirements
| Dependency | Version |
|---|---|
| PHP | ^8.1 |
| Laravel | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0 |
Installation
composer require pradeepdev001/laravel-environment-manager
Publish the config file:
php artisan vendor:publish --tag=environment-manager-config
Publish and run migrations:
php artisan vendor:publish --tag=environment-manager-migrations php artisan migrate
Quick Start
After installation, visit /admin/env-manager in your browser (requires authentication via the configured guard).
# List all variables php artisan env-manager:list # Set a variable php artisan env-manager:set APP_NAME "My App" --reason="Rebranding" # Get a variable php artisan env-manager:get DB_CONNECTION # Create a backup php artisan env-manager:backup # Validate the current .env php artisan env-manager:validate
Using the Facade
use Pradeepdev\EnvironmentManager\Facades\EnvManager; // Get all variables $variables = EnvManager::all(); // Get a single variable $var = EnvManager::get('APP_NAME'); // Set a variable (validates, backs up, records history) EnvManager::set('APP_NAME', 'New Name', reason: 'Rebranding'); // Bulk update EnvManager::bulkSet([ 'CACHE_DRIVER' => 'redis', 'QUEUE_CONNECTION' => 'redis', ], reason: 'Switch to Redis'); // Delete EnvManager::delete('OLD_KEY');
Configuration
After publishing, edit config/environment-manager.php:
return [ // Enable/disable web UI and REST API 'enable_ui' => true, 'enable_api' => true, // Admin-first defaults 'guard' => 'admin', 'route_prefix' => 'admin/env-manager', 'route_middleware' => null, // defaults to ['web', 'auth:admin'] // Restrict to specific user IDs (null = all authenticated users) 'allowed_users' => [1, 2], // Auto-backup before every change 'backup_path' => storage_path('env-backups'), 'backup_retention' => 20, 'backup_encryption' => false, // Custom sensitivity patterns 'masking_patterns' => ['MY_CUSTOM_*'], // Cache commands to run after save 'cache_commands' => ['config:clear', 'config:cache'], // Notifications 'notifications' => [ 'on_env_update' => true, 'slack' => [ 'enabled' => true, 'webhook_url' => env('ENV_MANAGER_SLACK_WEBHOOK'), ], ], ];
See config/environment-manager.php for all available options.
REST API
All endpoints are under /api/env-manager and, by default, require the admin guard.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/env-manager/env |
List all variables |
| POST | /api/env-manager/env |
Create a variable |
| PUT | /api/env-manager/env/{key} |
Update a variable |
| DELETE | /api/env-manager/env/{key} |
Delete a variable |
| GET | /api/env-manager/env/history |
Version history |
| GET | /api/env-manager/env/backups |
List backups |
Authorization
The package uses a role-based system out of the box.
| Permission | Super Admin | Admin | Read Only |
|---|---|---|---|
| view-env | ✅ | ✅ | ✅ |
| edit-env | ✅ | ✅ | ❌ |
| delete-env | ✅ | ✅ | ❌ |
| backup-env | ✅ | ✅ | ❌ |
| restore-env | ✅ | ✅ | ❌ |
| reveal-secrets | ✅ | configurable | ❌ |
Plug in your own permission system via the authorization_callback config key:
'authorization_callback' => function ($user, $permission) { return $user->hasPermissionTo($permission); // e.g. Spatie Permission },
Testing
composer test
composer test-coverage
Security
Sensitive values are never stored, logged, or returned in plaintext. See SECURITY.md for the responsible disclosure process.
License
MIT — see LICENSE.