filejet/filejet-bundle
FileJet Bundle integrates the FileJet file upload and delivery service into Symfony/PHP applications, providing configuration and service wiring for uploads, transformations, storage, and asset delivery with minimal setup, helping developers add FileJet-powered file handling quickly.
Scope correction: Despite the framing as a Laravel/PHP package, filejet/filejet-bundle is a Symfony bundle, not a Laravel package. It is published by the FileJet vendor org and targets Symfony's bundle/DI conventions (a Bundle subclass, a DependencyInjection/Extension, a Configuration tree, and service definitions wired through the container). That distinction drives most of this assessment: the artifact is a thin convenience wrapper around FileJet's PHP client, not a framework-agnostic library.
Architecture fit. The bundle's job is almost certainly narrow and well-bounded: register the FileJet client as a container service, expose configuration (API key, bucket/container identifiers, CDN base URL, environment), and possibly add Twig helpers or a Flysystem adapter. That is a good architectural shape — small surface area, config-driven, no domain logic leaked into our code. The upside for us is that FileJet is an off-the-shelf SaaS for image/file storage, transformation, and CDN delivery, so adopting it removes a build-and-operate burden rather than adding one.
Integration feasibility. On Symfony, near-trivial: composer require, enable the bundle, set env vars, inject the client. On Laravel — our stated context — the bundle is not directly consumable. Laravel does not register Symfony bundles, and the package's service definitions, parameter resolution, and tag conventions will not be picked up by Laravel's container. The workable path is to depend on the underlying FileJet PHP SDK/client directly and write a small Laravel service provider plus facade around it, treating this bundle as a reference implementation for correct configuration keys, endpoint defaults, and client construction. That is a few hours of work, not a project.
Technical risk.
filejet org namespace is a positive for canonical correctness (config keys and endpoints will be right) but a negative for bus factor and for responsiveness to framework-version drift.composer.json constraints before committing.Key questions.
Stack fit. Our runtime is Laravel/PHP; the bundle's native habitat is Symfony. Rather than force the bundle in via a Symfony-container bridge (a fragile, unsupported pattern), we should consume the FileJet PHP client directly and own a thin Laravel adapter. This preserves the vendor's canonical client while respecting our framework's idioms. If any team in the org runs Symfony, they can adopt the bundle as-is and we share configuration vocabulary.
Migration path. We are almost certainly greenfield here, so "migration" means moving existing local-disk or S3-backed upload paths behind a storage abstraction. Sequence:
FileStorage interface (upload, delete, URL-for, transform) in our domain layer. Existing code keeps working via an S3/disk adapter.FileJetAdapter implementing that interface, backed by the vendor client.FileJetServiceProvider with a published config/filejet.php reading from env/secret manager.Compatibility. Verify PHP version support against our floor, PSR-18/PSR-17 HTTP abstractions (Laravel ships Guzzle, which satisfies PSR-18 — good sign the client will drop in), and whether the client assumes a Symfony HTTP client or event dispatcher. Confirm Guzzle version alignment to avoid a duplicate major in the tree.
Sequencing.
Maintenance. We own roughly 150–300 lines of adapter code and a config file; the vendor owns the client. That is a low, well-understood maintenance load. The reverse side: framework upgrades are on us, and we cannot rely on a community to patch the client when Laravel or PHP majors move. Budget a small annual review rather than ongoing effort.
Support. Two layers. First-line support is our adapter; second-line is the FileJet vendor. Given zero dependents, we should not expect a large Stack Overflow corpus — resolve to a named vendor contact and a documented escalation path before the pilot, and confirm the commercial agreement (SLA, uptime target, rate limits, egress pricing) since the bundle is free but the service is not.
Scaling. Favorable on the read path: delivery and transformations are offloaded to FileJet's CDN, so our app servers stop serving image bytes — a genuine reduction in egress and CPU. Watch the write path: upload throughput, per-account rate limits, and whether large files stream or buffer in memory. Async is essential — push uploads to queued jobs so request latency and worker memory are not coupled to file size. Budget/cost scaling is per-asset and per-transformation, so it grows with catalog size, not just traffic; model that explicitly.
Failure modes.
.env in the repo; scope keys per environment.FileStorage interface as the escape hatch so switching providers is an adapter swap, not a refactor.Ramp-up. Low for any PHP developer familiar with Laravel service providers — the mental model is "one container binding, one config file." Estimate half a day to first productive commit for a mid-level engineer. The real ramp-up cost is organizational, not technical: getting the team to treat file storage as an interface rather than a concrete dependency, and getting commercial/security sign-off on a third-party media vendor. I would approve a scoped pilot on this basis while explicitly declining to adopt the Symfony bundle inside Laravel.
How can I help you explore Laravel packages today?