enabel/ux
Enabel UX is a Symfony bundle offering reusable Twig components and utilities for building consistent, maintainable user interfaces. Install it with Composer to streamline common UI patterns across Symfony applications and reduce repetitive template code. Documentation included.
Architecture fit — This is a Symfony UX/Twig bundle (@EnabelUx/layout/bootstrap/base.html.twig), not a Laravel package. There is no Blade view, service provider, config publish, or facade here. For a Laravel/PHP team the realistic value is twofold: (a) the Enabel Bootstrap theme consumed as an npm design-system dependency through Vite, and (b) a reference implementation of layout/asset wiring that a TPM can copy into a Blade layout. Direct in-app leverage requires a Twig bridge (e.g. rcrowe/twigbridge) and is only worth it if the organisation already runs Twig elsewhere.
Integration feasibility — High for the asset/theme path, low for the template path. v2.6.0 makes the package less coupled to its own rendering, which is good news for Laravel: the bundle no longer injects CDN CSS/JS into pages, so the host application owns the dependency graph (importmap('app') on their side, @vite(...) on ours). The upgrade note that matters to a Laravel team is the entrypoint contract — import 'bootstrap' and the theme CSS must be imported explicitly.
Technical risk — Moderate, concentrated in three places:
window.bootstrap. The removed CDN script defined a global. Any inline script or Blade partial doing new bootstrap.Toast(...) or bootstrap.Modal will break silently (undefined reference at runtime, not build time). This is the highest-probability regression.fa-* and fi fi-* classes will render nothing until those packages are imported. Visual-only failure, easy to ship unnoticed to production.importmap:update ignores version constraints. The notes explicitly warn it will pull theme 4 despite ^3.0.2 || ^4.0. Any automated dependency refresh can force an unplanned major theme bump — a supply-chain/change-control concern that a TPM should put behind an approval gate.Offsetting positives: the release removes a GDPR exposure (visitor IPs sent to Google Fonts via theme 3.0.2) and eliminates double-loaded Bootstrap JS that was causing duplicate dropdown/collapse event handlers on login and password-reset pages. That is a real bug fix and a compliance win, not cosmetic.
Key questions for the maintainers / team
stylesheets, javascripts) across future majors? The notes promise this for 2.6.0 only.^3.0.2 || ^4.0 implies 3.x is on borrowed time.window.bootstrap consumers beyond the one-line note?Stack fit — Adopt the theme as an npm dependency, not the Twig templates. Laravel's Vite + resources/js/app.js is functionally equivalent to the Symfony entrypoint: import Bootstrap, import the theme CSS, and let Vite handle bundling and cache-busting. Skip the Twig bundle entirely unless a Twig bridge is already in the stack.
Migration path
window.bootstrap, bootstrap. global usage in inline <script> tags and Blade partials; convert to import { Toast, Modal } from 'bootstrap' in the Vite entrypoint and expose only what is needed via a small module.fa-* or fi fi-* classes are in use (likely in nav, alerts, or auth screens), add explicit Font Awesome and flag-icons imports to the entrypoint before touching the theme version.package.json to ^3.0.2 initially; treat theme 4 as a separate, deliberate change.Compatibility — The block-preservation guarantee means existing overrides survive; that is the one backwards-compatible affordance here. Everything else in the release is a consumer-side responsibility.
Sequencing — Global-usage audit → icon imports → entrypoint consolidation → lockfile pin → theme 4 evaluation → CI gate on importmap:update equivalents (in Laravel terms: forbid unattended npm update on the theme package; require a lockfile diff review).
Maintenance — Low ongoing cost once the entrypoint is consolidated: one CSS import, one JS import, one lockfile entry. The upgrade burden has shifted from the package to the application, which is the correct trade but means future theme majors land on us.
Support — Expect a short tail of "icons disappeared" and "dropdown opens twice / doesn't open" tickets around rollout. Both are cheap to diagnose if the entrypoint is a single documented file; both are expensive if asset imports are scattered across layouts.
Scaling — Improved. Removing the CDN eliminates a third-party origin from the critical path and a per-request DNS/TLS cost, reduces total bytes on auth pages (previously theme CSS and Bootstrap JS loaded twice), and removes an external privacy dependency. Fonts are now self-hosted under theme 4.
Failure modes
ReferenceError from removed window.bootstrap — no build failure, caught only by exercising interactive components.Ramp-up — Under a day for a developer familiar with Vite. The conceptual shift is small (CDN assets → bundled imports) but the audit step is the long pole and scales with how much inline JavaScript exists in Blade templates.
How can I help you explore Laravel packages today?