Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Star Rating Bundle Laravel Package

nurikabe/star-rating-bundle

A Symfony bundle for adding reusable star-rating fields to forms and views, making it easy to collect and display user Ratings with lightweight, configurable integration and Twig-friendly rendering.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — poor (framework mismatch). Despite being catalogued as a "Laravel/PHP package," nurikabe/star-rating-bundle is a Symfony bundle, not a Laravel package. Its architecture is Symfony-specific by construction: a bundle class registered in the Symfony kernel, a DI extension for service/config wiring, a Symfony FormType, and a Twig extension exposing a rendering helper. Laravel has no equivalent bundle/kernel registration surface, no Symfony form component in the default stack, and no Twig. The only portable artifacts are the underlying FyneWorks Star Rating widget (a client-side, jQuery-era JavaScript plugin) and the HTML/CSS conventions it emits. Roughly 90% of the package's code is Symfony glue that is dead weight in a Laravel context.

Integration feasibility — low as-is; moderate only as a widget extraction. A Laravel integration would not "install the package" — it would mean vendoring or forking the JS widget, adding it to the Vite/Mix asset pipeline, and rebuilding the server-side surface as a Blade component or Livewire component plus a validation rule and an Eloquent cast/column convention. That is a rewrite, not an integration, and the package contributes little beyond a reference implementation of the markup.

Technical risk — high and concentrated in abandonment.

  • Unmaintained since 2015-04-10. No security patches, no PHP 8 compatibility work, no Composer constraint updates. Symfony 2.x-era code routinely fails on modern PHP due to removed functions, signature changes, and deprecated patterns.
  • Dependency gravity. A Symfony bundle of this vintage implies a jQuery dependency and a Symfony ^2.x constraint. In a modern Laravel app (PHP 8.2+, no jQuery), both are friction points; Composer will either refuse to resolve or require --ignore-platform-reqs hacks that poison the lockfile.
  • Supply-chain exposure. 10 stars and 0 dependents means essentially no community scrutiny. There is no evidence of a test suite, CI, or security review. Forking it means the fork becomes your unaudited code.
  • Security surface is small but real. A star-rating widget is display-and-submit; risk is XSS via unescaped label/title strings and stale jQuery CVEs, not data exfiltration. Still, any client-side lib frozen in 2015 should be treated as suspect.
  • License/attribution ambiguity. The bundle wraps a third-party widget; confirm both licenses before forking, since the wrapper and the upstream widget may differ.

Key questions for the requester:

  1. Is the target actually Laravel, or is this an inherited Symfony 2 service? The answer changes the recommendation entirely.
  2. Do we need the interactive widget, or only a read-only display of an aggregate rating? Read-only collapses the problem to a few lines of markup and CSS.
  3. Is a jQuery dependency acceptable, and does the asset pipeline still support it?
  4. Is there a hard requirement on this specific widget's visual behavior (e.g., half-star rendering), or is "a star rating" fungible?
  5. Who owns the fork, and is there an approved path for vendoring abandoned GPL/MIT code?

Integration Approach

Stack fit — none out of the box. Target stack (assumed Laravel 10/11, PHP 8.2+, Vite, Blade/Livewire, no jQuery) is two major generations removed from what this bundle targets. Do not attempt a Composer require. Treat the repository as reference material, not a dependency.

Recommended path — extract-and-reimplement, in preference order:

  1. Adopt a maintained alternative (strongly preferred). For display-only, use inline SVG or a CSS-only solution (e.g., Starability-style CSS, or a Blade partial with aria-label and a width-based clip for fractional stars). For input, a small Alpine.js component or a Livewire rating property with a hidden input is ~40 lines and has zero legacy surface.
  2. Vendor the JS widget only. If the specific FyneWorks interaction (hover preview, half-star selection, callback API) is a hard requirement, copy the minified plugin into resources/js/vendor/, import it in app.js, and document the pinned version and origin SHA. Wrap it in a Blade component with a @once script include so it initializes per-instance.
  3. Fork and modernize the Symfony bundle — only if the target is genuinely Symfony. Even then, budget for a Symfony 6/7 rewrite, not a patch: replace the DI extension with autowired services, retype the FormType for Symfony's current AbstractType, and swap the Twig extension for a Twig runtime.

Migration path if legacy code already depends on it: inventory every usage of the form type and Twig function, map each to the replacement Blade component/Alpine component, and replace call sites in one pass. Because the package is a leaf (0 dependents upstream), there is no ecosystem to stay compatible with — only your own call sites.

Compatibility checklist before committing:

  • PHP version floor and composer.json constraints — expect them to fail; quantify the diff.
  • jQuery version required by the widget and whether it collides with any existing jQuery.
  • Asset pipeline: does the widget assume script-tag globals, or can it be ESM-wrapped?
  • CSP posture: inline <script> initialization and inline styles will need nonces or hashes.
  • Accessibility: a 2015 star widget almost certainly lacks keyboard support, role="radiogroup", and aria-checked. Assume you must add it.

Sequencing (2–3 day spike):

  1. Day 1 — confirm target framework and requirement (interactive vs. display-only).
  2. Day 1 — build the display-only Blade partial and validate with design.
  3. Day 2 — prototype the Alpine/Livewire input variant; if it meets the interaction spec, stop and drop the package.
  4. Day 3 — only if the spike fails, prototype the vendored FyneWorks widget, capture license, CSP, and a11y gaps, and write the fork ownership note.

Operational Impact

Maintenance — the dominant cost. This package transfers maintenance to you on day one. There is no upstream to patch; every PHP upgrade, CSP tightening, or design refresh is your team's work. A frozen jQuery plugin also accrues quiet rot: it will keep working until it doesn't, and the failure usually arrives during an unrelated framework or bundler upgrade. Budget a standing ~1 day/quarter of "is it still rendering and is it still accessible" review.

Support — none. No maintainer activity since 2015, 10 stars, 0 dependents means no Stack Overflow corpus, no issue history to mine, and no one to escalate to. Internal documentation must be written at adoption time, because it cannot be reconstructed later. Name a single owner in the repo.

Scaling — effectively a non-issue. The widget is client-side, per-form, and tiny; it adds no server load, no queries, and no cache pressure. The only scaling-adjacent concern is asset weight: a jQuery dependency may pull ~30KB gzipped into the bundle for one control. On a high-traffic page, prefer the dependency-free alternative on performance grounds alone.

Failure modes to pre-plan for:

  • Silent breakage on bundler/framework upgrade — the widget stops initializing and the form silently submits null. Mitigate with a server-side validation rule that requires a rating and an integration test asserting the hidden input's presence.
  • Composer resolution failure — someone tries composer require and breaks the lockfile. Mitigate by not publishing it as a dependency at all.
  • CSP violation — inline init blocked in production but not in dev. Test under production headers.
  • Accessibility regression / audit finding — a mouse-only star control will fail WCAG 2.1 AA keyboard and screen-reader checks. Treat this as a likely finding and pre-build the radiogroup semantics.
  • License contamination — an unattributed vendored file discovered in a compliance review.

Ramp-up — low per-engineer, high organizationally. The code itself is trivial to read; any mid-level developer can fork it in an afternoon. The real ramp cost is institutional: onboarding new engineers to a mystery vendored file with no history, no tests, and no upstream. Every future maintainer pays the "why is this here?" tax. Offset it with a resources/js/vendor/README.md recording origin URL, commit SHA, license, the fork rationale, and the replacement trigger.

Recommendation. Do not adopt. Score 0.33 reflects a package that is architecturally mismatched (Symfony vs. Laravel), temporally stale (2015), and socially unvalidated (10 stars, 0 dependents). Rebuild the capability natively in ~40 lines with Alpine/Livewire or adopt a maintained CSS/SVG approach; keep this repository only as a markup reference. Revisit only if the target is confirmed as a legacy Symfony 2 application, in which case scope it as a rewrite, not an install.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums