webproject-xyz/php-symfony-tibber-api-bundle
A Symfony bundle for integrating the Tibber API into PHP applications, offering ready-to-use services and configuration to query electricity prices, consumption data, and other Tibber resources with minimal setup and clean dependency injection.
The headline is a scope mismatch that must be resolved before any effort estimate: this is a Symfony 8 bundle, not a Laravel package. Everything that makes it a bundle — the DI extension, compiler passes for multi-account registration, tagged services — has no consumer in Laravel's container. A TPM should treat the asset as a Tibber API client and caching strategy wrapped in Symfony plumbing, and plan to use the domain logic rather than the bundle.
Substantive positives in 1.0.0:
Technical risk:
Key questions for the maintainer or spike:
st1930/st2442, consumption, real-time websocket subscription)?Stack fit is conditional, not direct. Assume the default path of composer require into a Laravel app fails on the Symfony 8 constraint. Two viable paths:
Cache facade. Low runtime footprint, inherits the bug fixes, but you own a fork of the domain code.Migration path is greenfield — no prior assessment exists, so there is no migration, only a bounded spike. Timebox it to validate token handling, cache-key collision behaviour, and DST transition correctness against a real account before committing to a path.
Compatibility gaps to plan for explicitly:
| Bundle assumption | Laravel equivalent | Effort |
|---|---|---|
| Symfony Cache (PSR-6/PSR-16) | Illuminate\Cache |
Adapter or swap — cache key length/invalidation fixes must be ported, not lost |
| Compiler passes for accounts | Config file + singleton registry | Straightforward but manual |
| Config tree (YAML) | config/tibber.php |
Low |
| Console commands | Artisan commands | Low, but preserve the new CLI error boundaries |
| Event dispatcher | Laravel events | Low |
Sequencing: (1) Composer feasibility spike to confirm the Symfony 8 conflict, one day; (2) domain spike against a sandbox token covering price fetch, multi-account token selection, cache hit/miss and a forced DST boundary; (3) decide Path A vs B; (4) only then scope production work. Do not schedule feature work on the assumption of a clean install.
Maintenance. You inherit a 1.0.0 with an active but thin release history and a dependency set in motion. Under Path A you own divergence permanently; under Path B you own a second service. Either way, budget recurring time for upstream tracking, not just initial integration.
Support. No stated Laravel support and no visible SLA or issue-triage commitment. Assume all Laravel-side breakage is yours. The release notes are high quality and specific — a good signal for a solo-maintained project — but they document caching defects, which is exactly the layer you will be reimplementing.
Scaling. The caching layer is your primary scaling lever and it is now trustworthy enough to lean on. Multi-account multiplies token management linearly; verify whether rate limits are per-token or per-application, as that determines whether account growth is free or requires backoff coordination. Real-time price updates, if consumed by polling rather than subscription, will dominate call volume.
Failure modes to instrument from day one:
Ramp-up. Two distinct skill sets are needed: Tibber domain knowledge (hourly price semantics, consumption endpoints, real-time subscription) and enough Symfony DI literacy to read the bundle and judge what is portable. Plan for a senior PHP engineer, not a generalist — the risk is not writing the integration, it is recognising when the extracted caching logic is subtly wrong.
Recommendation. Worth a bounded spike, not a commitment. The feature set (multi-account, caching, bounded CLI) is a good fit for the problem domain, and 1.0.0 is the right moment to look. The Symfony 8 / Laravel conflict and the single-vendor dependency are the two facts that should gate any roadmap entry.
How can I help you explore Laravel packages today?