tito10047/ux-sdc
ux-sdc brings single-directory UI components to Laravel apps, letting you colocate each component's Blade template, styles, scripts, and logic in one folder. Build cleaner, reusable front-end building blocks with less boilerplate, clearer structure, and easier maintenance.
Architecture fit. tito10047/ux-sdc is a PHP package in the Symfony UX family that implements Single Directory Components (SDC): a component's template, props/schema, and co-located CSS/JS live in one directory and are auto-discovered. The 0.3.0 change ("Changed Bundle name") confirms the package ships as a bundle — i.e., it registers against a framework kernel bundle list, exposes a DI extension with a config alias, and registers Twig namespaces/tags and asset paths. That is a strong fit for Symfony-based PHP applications and a partial fit for Laravel: Laravel has no bundle/DI-extension concept, so consuming it requires a service-provider bridge or an adapter layer that re-implements discovery and config. A TPM should treat "Laravel package" here as "PHP package usable in Laravel only with a shim," and not promise drop-in Laravel support without a spike.
Integration feasibility. Mechanically simple: composer require, register the bundle (or bridge provider), point config at the component directories, and render components from templates. The 0.3.0 rename is the only integration-relevant change and it is narrow in surface but wide in blast radius: every reference to the old bundle name — bundle registration, YAML config root key, service IDs derived from the alias, Twig namespace/tag names, and any container-compile cache — must be updated in lockstep. Feasible in a single PR for a small codebase; requires a grep-and-verify pass for larger ones.
Technical risk.
Key questions.
ux_sdc.yaml → new key), requiring config republish and diff?Stack fit. Best fit: Symfony 6/7 + Twig, where the bundle plugs into the kernel and the DI extension natively. Acceptable fit: Laravel via a thin service provider that registers component paths and a Blade/Twig directive — but this is our code to own and maintain, and the 0.3.0 rename shifts work onto that adapter (it must track the upstream name). Poor fit: any stack expecting stable 1.x APIs today.
Migration path. Pin explicitly. Today we are on nothing (no prior assessment), so this is a greenfield adoption decision, not an upgrade: adopt ^0.3 from the start and skip the rename entirely — the BC break costs us zero if we have not yet integrated 0.2.x. If any prototype or spike branch exists against 0.2.x, treat it as throwaway rather than migrating it. Record the chosen bundle name and config root key in our integration notes so the next 0.x rename is a one-file change.
Compatibility. Verify PHP constraint and framework constraint from composer.json before committing; confirm the bundle compiles against our current Symfony/Laravel version and that its Twig/asset requirements do not collide with our existing pipeline. Because the rename may alter autoloaded FQCNs, run a full composer dump-autoload and container cache clear as part of the compatibility check, not as a deploy step.
Sequencing.
^0.3 in a scratch app, build two components (one with props, one with co-located CSS/JS), confirm render output and asset emission.Maintenance. Low code volume, non-trivial version-tracking burden. Expect one breaking rename per few 0.x releases; budget a recurring half-day per minor bump for grep/rename/verify plus cache and asset rebuild. Owning the Laravel adapter materially raises this — the adapter must be re-validated on every upstream release, doubling the maintenance surface for a package we do not control.
Support. Single maintainer, small contributor base, one-line changelog entries. We should not expect migration guides; our own upgrade notes effectively become the support artifact. Internally, designate one owner for the integration and one backup — the failure mode of "only one engineer understands the component discovery config" is realistic on a small team.
Scaling. Component discovery and container compilation are build-time costs; runtime rendering is cheap. Watch compile time and cache size as the component count grows into the hundreds, and watch asset build output if every component emits co-located CSS/JS. Neither is a blocker at typical scale, but both are worth a benchmark before adopting across a large design system.
Failure modes.
Ramp-up. Small for a developer already fluent in Twig/Blade components — the SDC mental model (one directory, co-located everything) is intuitive and the API surface is narrow. Roughly a day to first productive component, a week to comfortable. The real ramp-up cost sits with whoever owns the Laravel bridge, since that requires understanding the bundle's DI extension internals. Non-technical stakeholders need one framing: this is a pre-1.0 building block, chosen for developer ergonomics, with a known and budgeted churn cost until it reaches 1.0.
How can I help you explore Laravel packages today?