ezsystems/ezmultiupload-ls
eZ Multi Upload is a legacy eZ Publish extension that adds multi-file upload support to the admin interface, letting editors select and upload several files at once instead of one at a time.
What the package actually is. ezsystems/ezmultiupload-ls is a legacy-stack (LS) extension for eZ Publish 4.x/5.x, not for eZ Platform / Ibexa (Symfony). It adds a multi-file upload control to the legacy Administration Interface, wiring a browser-side upload widget into the eZFile / ezfile datatype so editors can attach several binaries to a content object in one pass instead of one-at-a-time. The -ls suffix is the decisive signal: this package lives entirely in the pre-Symfony architecture that eZ Systems formally end-of-lifed in 2018.
Architecture fit — poor. Our target platform decision determines everything here:
| Target | Fit |
|---|---|
| eZ Platform / Ibexa (Symfony, current) | None. Incompatible by construction — different admin UI, different datatype layer, different dependency injection model. |
| eZ Publish 4.4–5.4 legacy, still running | Plausible, but only as a UI nicety on an already-frozen platform. |
| Greenfield or mid-migration PHP/Laravel estate | None. The "Laravel/PHP" framing is misleading — this is not a framework-agnostic PHP library and has zero relationship to Laravel's container, storage abstraction, or filesystem drivers. |
Integration feasibility — low. The extension depends on the legacy admin's template override system, its own JavaScript bundle (historically jQuery plus a Flash/SWF-based uploader in earlier revisions), and legacy PHP runtime assumptions (PHP 5.3–5.6 era). Getting it to run on a modern PHP 8.x environment would require non-trivial surgery, at which point we are effectively maintaining a fork. With 0 dependents on Packagist and 22 stars, there is no community surface to lean on and no upstream to escalate to.
Technical risk — high, in three distinct buckets:
Key questions to resolve before spending any engineering time:
Stack fit. Treat this as a UI pattern reference, not a dependency. The transferable asset is the small amount of domain knowledge the package encodes: how the legacy ezfile datatype handles multiple attribute collections per object, and what the editor affordance looked like. That is a design input, worth perhaps a day of reading — not a component to install.
Recommended path (for a modern Laravel/PHP target): build the capability natively. Laravel gives us the whole job in first-party primitives:
Livewire/Inertia + a chunked, resumable uploader on the front end; Storage::disk() (S3 or local) for persistence.FormRequest rules, MIME sniffing, size ceilings, randomized filenames, and quarantine-then-promote for scanned files. This is the area where the legacy package is weakest and where we must not inherit its assumptions.Migration path. There is no incremental migration from the extension; it is a replace, not a port. Sequence:
Compatibility checklist if anyone pushes to install it anyway: exact eZ Publish version and patch level; PHP version ceiling; presence of a Flash dependency in the admin browser (already dead in all modern browsers); jQuery version conflicts with other admin extensions; and whether the site's template override chain would be disturbed. Any single "unknown" here should block install.
Sequencing. License clearance → scope confirmation (do we even have a legacy install?) → build-vs-install decision → rebuild behind a flag → cutover → legacy retirement. Do not invert this; the build is cheap, the legacy support tail is not.
Maintenance. Upstream is archived: zero commits, zero releases since May 2017, zero dependents. Every future defect, PHP compatibility break, and security finding becomes ours permanently. There is no version to upgrade to — the maintenance model is "own a fork forever," which for a UI nicety is a poor trade.
Support. No vendor, no community, no issue tracker activity. Internal support means a named engineer who has read the code — a bus factor of one, on a codebase nobody wants to learn. Editors will file bugs against it and there is no upstream to route them to.
Scaling. Modest but real concerns: synchronous multi-file uploads on large binaries will tie up PHP workers; the legacy pattern typically lacks chunking, retry, and progress recovery, so large uploads fail ungracefully. If our volume assumption is "a few editors uploading a handful of files," tolerable; if we expect bulk ingestion, it is structurally wrong and will push us to rebuild anyway.
Failure modes to expect:
Ramp-up. Near zero learning curve to use, which is the package's entire appeal. But the organisational cost is the opposite: any engineer touching it must context-switch into a dead framework's idioms, and that knowledge does not compound. Budget for a rebuild rather than a skills investment.
Recommendation. Do not adopt. The score reflects reality — archived, unmaintained, zero dependents, ambiguous license, and architecturally bound to a platform we should not be extending. Harvest the UX intent, rebuild the capability natively in the current stack in a few days of engineering, and close the legacy surface rather than investing in it.
How can I help you explore Laravel packages today?