melk/mjr-box-select-bundle
A PHP bundle that adds reusable box-selection UI components to Laravel applications, letting developers render grouped, selectable boxes for forms and filters with minimal configuration. Includes flexible markup, styling hooks, and simple integration for quick setup.
Architecture fit — the headline finding is a platform mismatch. Despite the framing of this evaluation, melk/mjr-box-select-bundle is not a Laravel package. The -bundle suffix, the MJR namespace, and the ExtJS asset reference point to a Symfony bundle for MJR (dmelk's Symfony-based CMS). Laravel has no bundle concept: there is no ServiceProvider, no config/*.php publish hook, no Facade, and no Laravel-targeted autoloading here. What little Laravel-relevant value exists is the vendored Ext.ux.form.field.BoxSelect front-end widget, not the PHP wrapper. Any Laravel adoption is therefore a re-homing exercise, not an integration.
Integration feasibility — low. Two viable paths, both requiring net-new work:
.js UX component directly into resources/js and wire it through Vite/Mix. This is almost certainly the correct call — the PHP layer contributes nothing to a Laravel app.Either path inherits the real constraint: ExtJS is Sencha-licensed (GPLv3 or commercial). That is a licensing decision that gates the technical one, and it must be resolved before any spike proceeds.
Technical risk — high, and concentrated off-PHP. The package shows 0 stars, 0 dependents, no release cadence, and no visible CI or test suite. It targets an ExtJS-era widget (roughly ExtJS 4/5 vintage) with no version pinning guidance. The supply-chain profile is "abandoned single-author utility," which is tolerable for a decorative widget and not tolerable for anything load-bearing.
Key questions for the requester:
Stack fit — poor at the front end. A Laravel app today is typically Blade/Livewire/Inertia plus Vite, with Alpine or Vue owning DOM reactivity. ExtJS is a full RIA framework with its own class system, component lifecycle, and DOM ownership. An ExtJS field can be isolated inside a Blade page and made to work, but it will not compose with Livewire round-trips, Alpine reactivity, or Tailwind-driven layout. Treat it as an iframe-grade boundary, not a native component.
Migration path — recommend replacing, not porting. For the tag/multi-select pattern, Tom Select, Select2, or Choices.js deliver equivalent UX in ~10 lines of Laravel code with no license encumbrance and no ExtJS runtime. If ExtJS is already the house standard for the admin surface, then port the wrapper (path 1 above) and accept the cost; if it is not, the package has no reason to enter the dependency graph.
Compatibility — expect resolution conflict. The bundle's Symfony constraints are almost certainly pinned to Symfony 2.x/3.x-era versions. Composer resolution will likely fail outright against modern Symfony, and against Laravel it is meaningless regardless. PHP 8 compatibility of the original is unverified; the JS is the only part with a plausible compatibility story, and even that assumes a matching ExtJS major version.
Sequencing (if pursued):
Maintenance — you inherit it whole. No maintainer, no releases, no CI, no test coverage. Any adoption means creating a fork with a named owner, a pinned commit, and an internal changelog. Absent that, assume it decays silently.
Support — none. No vendor, no community, and no documentation beyond the repository README. Incident debugging falls entirely to whichever engineer learned ExtJS internals that week.
Scaling — client-side only, with a heavy floor. The widget's runtime cost is trivial for small option sets; the framework cost is not. Loading ExtJS into a Blade page adds hundreds of KB of parse-and-execute budget, a second CSS reset that will fight Tailwind, and global namespace pressure. It also complicates the Vite build and code-splitting story. Server-side scaling impact is nil.
Failure modes to watch:
require (most likely first failure).Ramp-up — high cost, low return. ExtJS competency is scarce in the current Laravel hiring pool. If the team is oriented around Blade/Tailwind/Livewire, the learning investment is disproportionate to the payoff of a single multi-select field. Budget for one engineer to spend a week on the spike before committing to the fork; the honest expected outcome of that spike is a recommendation to use Tom Select.
How can I help you explore Laravel packages today?