ezsystems/hybrid-platform-ui-core-components
Core custom elements for eZ Hybrid Platform UI, including ez-platform-ui-app, ez-navigation-hub, and ez-toolbar. Also provides an eZ.TabsMixin class expression mixin and base CSS for tab markup, enabling components to recognize and switch tabs automatically.
Framing correction (material to the decision): despite the Laravel/PHP framing, this is not a PHP package. It is a legacy front-end asset bundle — Polymer 2–era custom elements (<ez-platform-ui-app>, <ez-navigation-hub>, <ez-toolbar>) plus a class-expression mixin (eZ.TabsMixin) for tab markup, distributed as HTML Imports and Bower/npm-style static files. Any composer.json presence exists only to let eZ's PHP metapackages pin a front-end asset version. There is no PHP API, no service provider, no Laravel integration surface, and no server-side logic to evaluate. That single fact drives the entire assessment.
Architecture fit — poor. The package occupies the browser shell layer of the eZ Platform "Hybrid" admin UI (the eZ Publish 1.x → Symfony bridge era). It assumes: a Polymer 2 runtime, webcomponentsjs polyfills, HTML Imports loading, and a sibling ecosystem that supplies the data contracts for the navigation hub and toolbar (routes, menu trees, action definitions). A Laravel application built on Blade + Vite + Vue/Livewire/Inertia has no seam for any of that. The three elements are thin presentation shells; adopting this package without its sibling packages yields markup that renders but does nothing.
Integration feasibility — technically possible, strategically inert. You can copy the files under public/legacy/ and serve them, but you would be importing a deprecated loading mechanism and an obsolete component model to obtain roughly the UX value of a navbar, a sidebar, and a tab widget. The mixin pattern (class MyComponent extends eZ.TabsMixin(Polymer.Element)) also forces any host component into Polymer 2 idioms, which will not interoperate cleanly with Vue 3, Livewire, or Alpine-based components in the same page.
Technical risk — high and unfixable by you. HTML Imports were removed from Chromium in v73 (2019) and never shipped broadly elsewhere; consuming this requires a polyfill that is itself unmaintained, or a rewrite of every import. The repository is archived, Travis CI config is dead, stars and dependents are both zero, and there is no security-response channel. Maturity signal is "README and docs only" — consistent with a score of 0.13. Every defect becomes yours on day one.
Key questions to resolve before any further evaluation:
<ez-navigation-hub> and <ez-toolbar> get their data? That contract lives outside this repo and is the real integration cost.Stack fit: direct mismatch.
| Dimension | This package | Laravel-idiomatic target |
|---|---|---|
| Component model | Polymer 2 custom elements + HTML Imports | Blade components / Vue SFCs / Livewire |
| Asset pipeline | Bower, <link rel="import"> |
Vite, ES modules |
| Styling | Shadow DOM + mixin CSS | Tailwind/global CSS by convention |
| Data binding | Polymer properties | Props / JSON endpoints |
| Runtime cost | Polyfills + Polymer | Framework already in the bundle |
Migration path — do not migrate this package; migrate the intent. The durable requirement is an app shell with a navigation hub, a contextual toolbar, and accessible tabbed panels. In Laravel that is: a Blade layout with named slots for nav and toolbar, a Vue or Livewire <x-tabs> component, and a small JSON endpoint (or Inertia shared props) feeding nav items from your route/permission table. That is days of work, not weeks, and produces no archived dependency.
Compatibility notes if you are compelled to run it: customElements.define is fine on evergreen browsers, but the HTML Imports layer is not; you need webcomponentsjs with the HTML Imports loader, which conflicts with bundlers that rewrite href paths. ES2015 class-expression mixins will not transpile cleanly through Vite's default target without configuration. Shadow DOM boundaries will isolate these components from your global Tailwind resets — expect visual drift.
Sequencing, if a legacy Hybrid install genuinely requires it:
Maintenance: Archived upstream means zero patches, zero CVE response, zero browser-compatibility work. You inherit 100% of the maintenance burden for code you did not write and cannot upstream. Budget an ongoing tax, not a one-time integration cost.
Support: No vendor, no maintainer, no community — zero stars and zero dependents is a hard signal that no one else will hit your bug first. Internal knowledge will be concentrated in whoever performs the integration; that is a bus-factor of one and a knowledge-transfer obligation.
Scaling: The static-asset side scales trivially — CDN-cacheable, no server load. The real scaling constraint is human: Polymer 2, HTML Imports, and class-expression mixins are legacy skills that new hires will not have and will not want. Headcount growth does not reduce this cost; it increases onboarding time.
Failure modes to plan for:
<link rel="import" href>, producing 404s only in production bundles.Ramp-up: Estimate one to two weeks for a mid-level front-end engineer to become productive in this codebase — and the majority of that is un-learning modern patterns and re-learning the 2017 toolchain, with low residual value to the engineer or the team.
Recommendation: Do not adopt. The 0.13 score is accurate, not harsh. If an existing Hybrid Platform install mandates it, treat it as frozen legacy: vendor it, isolate it behind a boundary, instrument it, and fund a dated replacement with Blade + Vue/Livewire rather than investing in compatibility shims for an archived dependency.
How can I help you explore Laravel packages today?