stillat/proteus
Utilities for parsing, updating, and writing Laravel-style PHP config files. Use the ConfigWriter facade to write or preview single or multiple keys, guard namespaces from mutation, and optionally rewrite function calls like env while preserving structure.
## Technical Evaluation
### **Architecture Fit**
- **Purpose Alignment**: Remains aligned with Laravel’s config system, now explicitly validated for **Laravel 13** compatibility. The package’s core value—dynamic, validated, and mergeable configs—is unchanged, but the explicit Laravel 13 support reduces integration friction for new projects or upgrades.
- **Modularity**: Still ideal for monoliths or microservices requiring runtime config flexibility (e.g., feature flags, environment-specific overrides). The addition of Laravel 13 support broadens its relevance to newer Laravel ecosystems (e.g., Symfony-inspired improvements in Laravel 13).
- **Extensibility**: Custom parsers/validators remain supported, but the Laravel 13 update suggests the package is evolving alongside Laravel’s core changes (e.g., potential use of Laravel 13’s new `App\Providers\BootstrapServiceProvider` or improved container bindings).
### **Integration Feasibility**
- **Laravel Native**: Now **officially compatible with Laravel 13**, eliminating hypothetical risks around breaking changes in newer Laravel versions. Integration with Laravel’s `Config` facade or service container is seamless, and the package can replace or extend Laravel’s built-in config system for advanced use cases (e.g., live-reloading configs from S3 or database).
- **Non-Laravel PHP**: Compatibility with PHP 8.1+ remains unchanged, but the Laravel 13 update implies the package is increasingly Laravel-centric. Non-Laravel PHP apps may still use it as a standalone library, but they’ll miss Laravel-specific optimizations (e.g., service provider hooks).
- **Database-Backed Configs**: The package’s ability to bridge with Eloquent or Doctrine via JSON/DB serialization is unaffected, though Laravel 13’s improved Eloquent features (e.g., query caching) could enhance this integration.
### **Technical Risk**
- **Breaking Changes**: **No breaking changes** introduced in v4.2.1; the update is purely additive (Laravel 13 support). However, future Laravel versions (e.g., 14+) may introduce changes (e.g., config file format shifts) that could require updates to `proteus`. Monitor Laravel’s [upgrade guide](https://laravel.com/docs/13.x/upgrade) for config-related changes.
- **Performance Overhead**: Unchanged. Heavy config files may still impact load times if parsed repeatedly. Benchmark against Laravel’s native `require` or `file_get_contents` in Laravel 13’s new **optimized bootstrapping** system.
- **Security**: No changes to input sanitization or validation. Maintain existing safeguards (e.g., whitelisting config keys, validating dynamic writes) to prevent arbitrary file writes or injection risks.
### **Key Questions**
1. **Use Case Clarity**:
- *Updated*: With Laravel 13 support, is this package now a **priority** for new Laravel 13 projects, or is it still niche for dynamic configs?
- Will configs be **version-controlled** (e.g., Git) or **ephemeral** (e.g., user-generated)? Laravel 13’s improved **environment-based configuration** (e.g., `.env` parsing) may reduce reliance on dynamic configs.
2. **Laravel Dependency**:
- Can the app tolerate coupling to Laravel’s `ConfigRepository` interface, or is a **pure PHP solution** (e.g., `vlucas/phpdotenv`) preferred for non-Laravel components?
3. **Alternatives**:
- Compare with **Laravel 13’s native config improvements** (e.g., `config:clear`, `config:cache`) or packages like `spatie/laravel-config-array` (Laravel-specific) or `vlucas/phpdotenv` (env-focused).
4. **Testing**:
- *Updated*: How will config **validation** and **fallbacks** be tested in **Laravel 13’s new testing framework** (e.g., Pest 2.0 integration)? Ensure tests cover Laravel 13’s **new config caching** behavior.
---
## Integration Approach
### **Stack Fit**
- **Laravel 13 Ecosystem**:
- **Primary**: Replace `config('key')` with `Proteus::get('key')` for dynamic configs. Leverage Laravel 13’s **improved service container** to bind `Proteus` as a singleton:
```php
$this->app->singleton(\Stillat\Proteus\Proteus::class, function ($app) {
return new \Stillat\Proteus\Proteus(storage_path('config/dynamic.php'));
});
```
- **Secondary**: Use `Proteus::write()` to persist changes, now fully compatible with Laravel 13’s **filesystem improvements** (e.g., better S3/Cloud Storage integration).
- **Non-Laravel PHP**:
- Unchanged. Use as a standalone library with PSR-4 autoloading, but note the package is increasingly Laravel-focused.
- **Microservices**:
- Deploy alongside Laravel 13’s **new queue workers** or **Horizon** for async config updates. Use a shared filesystem (e.g., EFS) or **Laravel 13’s improved broadcasting** for real-time config syncs.
### **Migration Path**
1. **Phase 1: Read-Only (Laravel 13)**
- Replace static `require config/app.php` with `Proteus::load()` in `bootstrap/app.php`.
- Validate output matches Laravel 13’s **merged config structure** (e.g., new `config:cache` behavior).
2. **Phase 2: Dynamic Overrides (Laravel 13)**
- Add a `/config` API endpoint using `Proteus::write()` with Laravel 13’s **new middleware groups** (e.g., `web` or `api`):
```php
Route::put('/config/{key}', function ($key, Request $request) {
$config = app(\Stillat\Proteus\Proteus::class);
$config->set($key, $request->input())->write();
return response()->json(['status' => 'updated']);
})->middleware(['auth', 'throttle:60']);
```
- Use Laravel 13’s **new rate-limiting** features to protect against abuse.
3. **Phase 3: Full Replacement**
- Extend Laravel 13’s `ConfigRepository` to use `Proteus` as the backend. Override methods like `loadPaths()` to integrate with `Proteus::load()`.
- Deprecate static config files in favor of `Proteus`-managed ones, leveraging Laravel 13’s **deprecation helpers**.
### **Compatibility**
- **Laravel Versions**: **Explicitly tested with Laravel 13**. May require minor adjustments for pre-13 versions (e.g., service provider boot order).
- **PHP Extensions**: No changes. Still relies on PHP 8.1+ features (e.g., typed properties).
- **Filesystem**: Supports Laravel 13’s **enhanced filesystem drivers** (e.g., improved S3/Cloud Storage performance). Ensure IAM permissions for cloud storage in Laravel 13’s **new Vapor/Forge integrations**.
### **Sequencing**
| Step | Priority | Dependencies | Risks |
|--------------------|----------|----------------------------------|--------------------------------|
| Validate package | P0 | Laravel 13, PHP 8.1+ | Hypothetical Laravel 13 config changes |
| Local testing | P0 | Unit tests for CRUD ops | Edge cases (e.g., nested arrays in Laravel 13’s new config format) |
| API integration | P1 | Laravel 13 middleware/auth | Rate-limiting for writes |
| CI/CD pipeline | P1 | Laravel 13’s new `phpunit` or Pest | Config drift in deployments |
| Monitoring | P2 | Laravel 13 Horizon/Sentry | Unauthorized config edits |
---
## Operational Impact
### **Maintenance**
- **Pros**:
- **Centralized Configs**: Single source of truth reduces "works on my machine" issues, now fully compatible with Laravel 13’s **new environment-based configuration**.
- **Audit Trail**: Log `Proteus::write()` calls using Laravel 13’s **improved logging** (e.g., `Log::channel('config')->info()`).
- **Laravel 13 Optimizations**: Leverage Laravel 13’s **faster bootstrapping** to reduce config load times.
- **Cons**:
- **Lock Contention**: Concurrent writes may still require file locking or optimistic concurrency, though Laravel 13’s **new process isolation** (e.g., queues) can help.
- **Backup Strategy**: Config files are now code; include in Git or backup like `app/storage`. Use Laravel 13’s **new Artisan commands** (e.g., `config:dump`) for backups.
### **Support**
- **Debugging**:
- Use `Proteus::getStructure()` to dump the parsed config tree. Integrate with Laravel 13’s **new Tinker** (`php artisan tinker`) for ad-hoc debugging.
- Add a `proteus:validate` Artisan command to check for required keys, using Laravel 13’s **new validation rules**.
- **Rollback**:
How can I help you explore Laravel packages today?