lightsuner/carbon-bundle
LightSuner Carbon Bundle integrates Carbon, the popular PHP DateTime extension, into Symfony applications. It provides Carbon services, Twig filters, Doctrine types, and form helpers, making date and time handling cleaner, more expressive, and consistent across your Symfony projects.
Architecture fit — Poor (fundamental mismatch). lightsuner/carbon-bundle is a Symfony 2 bundle, not a Laravel package. Bundles are a Symfony-specific distribution artifact: they rely on Symfony\Component\HttpKernel\Bundle\Bundle, AppKernel registration, and Symfony's DependencyInjection extension conventions (Resources/config/services.yml, Configuration classes, compiler passes). Laravel has no bundle system, no AppKernel, and no DependencyInjection component in that form — it uses service providers, facades, and its own container. There is no supported path to composer require this into a Laravel app and have it do anything.
Underlying capability is already covered natively. The package's only real value is wiring the Carbon date/time library into a Symfony container. Laravel ships Carbon as a first-party transitive dependency (nesbot/carbon via illuminate/support), exposes it as Illuminate\Support\Carbon, and offers first-class helpers (now(), Carbon::parse(), casts on Eloquent models, diffForHumans(), timezone config via app.timezone). A TPM should treat the capability as already satisfied and the package as a Symfony-only delivery mechanism for it.
Integration feasibility — Not feasible without a rewrite. Any adoption would mean re-implementing the bundle's ~trivial service definitions as a Laravel service provider, at which point you have written your own package and gained nothing from the dependency. The bundle's own configuration surface (default locale/timezone) duplicates Laravel's existing config/app.php keys.
Technical risk — High, and asymmetric. Adopting a dead Symfony 2 artifact into a Laravel codebase imports:
Score interpretation for a TPM. Treat 0.325 as "do not adopt." The opportunity score (2.17) reflects latent utility of the Carbon concept, not of this package — the opportunity belongs to nesbot/carbon, which Laravel already consumes.
Key questions to close out the evaluation:
nesbot/carbon at a version that satisfies the requirement? (Almost certainly yes via illuminate/support.)Recommended stack fit: do not integrate; substitute the native capability. The correct "integration" is a documentation and standards decision, not a code change.
| Need | Symfony 2 bundle answer | Laravel-native answer |
|---|---|---|
| Carbon available in container | carbon service from bundle |
Illuminate\Support\Carbon / Carbon\Carbon via illuminate/support (already installed) |
| Locale-aware formatting | Bundle config | app.locale, Carbon::setLocale() |
| Default timezone | Bundle config | app.timezone in config/app.php |
| Twig helper | Twig extension in bundle | Blade-agnostic; format in accessors/casts |
| Deterministic tests | — | Carbon::setTestNow() in test setup |
Migration path. Not applicable in the forward direction. For any legacy Symfony 2 service that does use this bundle, the migration path is Symfony 2 → Symfony 5/6 (where Carbon is standard via the framework bundle and no third-party bundle is needed) or a lift-and-shift to Laravel with the bundle dropped entirely. In both cases the bundle is deleted, not ported.
Compatibility. Assume worst case until proven otherwise: Symfony 2 service-definition schema, likely symfony/symfony: ^2.x constraints, and PHP versions incompatible with current Laravel (10/11/12). Composer will almost certainly refuse to resolve it alongside laravel/framework — and if it does resolve, that is a warning sign about a permissive constraint, not a green light.
Sequencing (if a stakeholder insists on exploring it).
Illuminate\Support\Carbon; almost always closes the requirement.nesbot/carbon directly at a current major version.Do not create a shim service provider to emulate the bundle. That converts a trivial "no" into a maintained internal fork of dead code.
Maintenance — negative. Every dependency carries a carrying cost; this one carries cost with no offsetting capability. There is no upstream to patch, no release cadence to track, and no maintainer SLA. Any internal fix becomes a fork, which means owning a Symfony 2 bundle and a Laravel app.
Support. No vendor, no active maintainer signal, 0 dependents, no issue-tracker momentum. Internal escalation path is "whoever wrote the shim." This is a support liability disproportionate to a package whose entire function is registering one service.
Scaling. Irrelevant at the infrastructure layer (it is a container wiring artifact, not a runtime bottleneck), but scaling teams is the real concern: every new engineer must learn that date handling in this codebase has an exotic, undocumented third-party origin. Cognitive load is the cost, and it is paid repeatedly.
Failure modes.
carbon service or expecting bundle config keys that Laravel never reads.config/app.php and a stale bundle config) producing inconsistent formatting across environments.Ramp-up. Near-zero learning value and non-trivial unlearning cost. A new engineer spending an hour understanding this package has spent an hour on something that will be removed. Contrast with Illuminate\Support\Carbon, which is documented, ubiquitous in Laravel codebases, and transferable knowledge.
Recommendation. Reject. Close the evaluation with a one-line decision record: "Not applicable — Symfony 2 bundle; capability already provided by illuminate/support (Illuminate\Support\Carbon)." Redirect the effort to a short internal standard on date/time handling (always Illuminate\Support\Carbon, app.timezone as single source of truth, Carbon::setTestNow() in tests). If a legacy Symfony 2 consumer exists, log it as a modernization item with an owner and target quarter — the bundle's removal is the deliverable there, not its adoption here.
How can I help you explore Laravel packages today?