kocal/ckfinder-symfony-bundle
A Symfony bundle that integrates CKFinder, the file manager and browser, into your application. It provides configuration, routing, and integration helpers so you can upload, browse, and manage files and images, including use alongside CKEditor.
Architecture fit: poor — nominal mismatch. This is a Symfony bundle, not a Laravel package. It ships a Bundle subclass, a DI extension, and a Configuration tree consumed by Symfony's kernel at container-compile time. Laravel has no bundle loader, no services.yaml, and no compiler passes; composer require would pull symfony/http-kernel, symfony/dependency-injection, and symfony/config into a Laravel app purely as dead weight. There is no supported path to use this package in a Laravel codebase. The only legitimate leverage is as a reference implementation: it demonstrates how to wire CKFinder 3's PHP connector to a Flysystem 2 filesystem abstraction. That pattern ports; the package does not.
What the package actually solves. CKFinder ships a PHP connector that expects a backend implementing CKSource's Backend contract over local disk. This bundle is a thin shim that (a) registers the connector as a Symfony service, (b) maps CKFinder config to Symfony parameters, and (c) supplies a Flysystem-backed adapter so uploads/thumbnails land on S3, GCS, or a custom adapter instead of public/uploads. That shim is the transferable asset, and it is on the order of 200–400 LOC of glue.
Integration feasibility: rewrite, don't integrate. For a Laravel target, the equivalent work is a small adapter implementing CKFinder's Backend interface against Illuminate\Filesystem\FilesystemAdapter / League\Flysystem\Filesystem. This is a well-bounded sprint task, not a vendor evaluation.
Technical risk (ranked):
| Risk | Severity | Note |
|---|---|---|
| Flysystem version drift | High | Bundle targets Flysystem 2; Laravel 9+ ships Flysystem 3. listContents() return types, adapter move/copy, and path-prefix semantics changed. Even copy-pasting the adapter source requires porting. |
| Abandonment | High | Repository is archived. No upstream patches, no security response, no PHP 8.4/Symfony 7 roadmap. |
| License ambiguity | High | NOASSERTION. CKFinder itself is commercial (CKSource, GPL/commercial dual). An unlicensed wrapper around a proprietary connector is legal-review territory, not a PM call. |
| Adoption signal | Medium | 5 stars, 0 dependents. Effectively zero production validation — no community to lean on when the adapter misbehaves. |
| Bus factor | Medium | Single maintainer, now inactive. |
Key questions to resolve before any decision:
Storage + a simple uploader removes the dependency entirely.Stack fit. Zero native fit for Laravel. Two viable framings:
Storage facade, and own the result.Migration / build path (Laravel, recommended):
app/CKFinder/FlysystemBackend.php implementing CKSource's Backend interface, delegating to a League\Flysystem\Filesystem instance obtained via Storage::disk($name)->getDriver().config/ckfinder.php; resolve the backend through a Laravel service provider binding rather than Symfony DI.DirectoryListing iteration, Visibility enum, adapter-level move/copy (S3 copy+delete vs. native move), and path prefixing so CKFinder's resourceType directories map cleanly to disk roots.Compatibility notes. PHP 8.x is fine on both sides. Composer-wise the bundle's symfony/* constraints won't conflict with Laravel's own requirements (Laravel permits Symfony 6/7 components), so it will install — which is precisely the trap. It will install and do nothing.
Sequencing. (1) Legal check on CKFinder licensing and the NOASSERTION status — blocking gate. (2) Two-day spike: prototype the adapter against the target Laravel version and a real S3 bucket. (3) Build-vs-buy review: compare against Laravel-native file managers or dropping the rich UI requirement. (4) Implement behind a feature flag with contract tests covering upload, rename, delete, thumbnail generation, and folder traversal. (5) Decommission any Symfony-era config.
Do not attempt a Symfony-bundle-on-Laravel bridge (e.g., loading the bundle through a third-party Symfony-in-Laravel adapter). The glue cost exceeds the rewrite cost and couples you to an archived repo.
Maintenance. Archived means fork-and-own. Any fork inherits Flysystem 2 pinning, Symfony 5 conventions, and no security patch channel. Budget ongoing ownership: roughly the cost of a small internal library, plus the tax of tracking CKFinder connector changes on your own. Expect a forced rewrite at the next Flysystem or PHP major.
Support. Community support is nonexistent (5 stars, 0 dependents, single inactive maintainer). CKSource's commercial support covers CKFinder and its connector — it will not cover a third-party Flysystem adapter, and CKSource support will likely decline to debug a backend it didn't ship. Internal on-call owns this end to end.
Scaling. The CKFinder connector is synchronous per-request PHP, which is fine for admin-panel traffic and inappropriate for bulk ingest. Two specific pressures:
Failure modes to instrument:
Gate/Policy. Any authorization enforced only in Laravel middleware is bypassable through the connector route — this is the highest-severity operational risk and needs explicit route-level guards plus tests.Ramp-up. Low for anyone who already knows CKFinder's connector config; low-to-moderate for a Laravel developer building the adapter (the CKSource Backend interface is small and documented). Ramp-up cost on the bundle itself is wasted effort for a Laravel team — deliberately cap investigation time at the spike.
Verdict for a TPM. Do not adopt as a dependency. Value it as a ~1-week reference for building a Laravel-native CKFinder backend, gated on a licensing review that the NOASSERTION metadata cannot answer. If the estate is genuinely Symfony-only, the archived status still forces a fork-and-own decision that should be made deliberately rather than by inaction.
How can I help you explore Laravel packages today?