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

Filament Rating Laravel Package

asignua/filament-rating

A Filament plugin that adds a customizable star rating field and table column to your admin panel. Let users rate records directly in forms and tables, with configurable icons, colors, and half-star support.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • Presentation-layer Filament 5 plugin: three artifacts (Rating form field, RatingColumn table column, RatingEntry infolist entry) map cleanly onto Filament's existing field/column/entry contracts. No service providers of consequence, no persistence layer, no domain model — this is a UI concern, which keeps architectural blast radius small.
  • Hard dependency on Filament 5 (and therefore Laravel 11/12-era runtime and PHP 8.2+). This is a forward-only bet: it does not help teams still on Filament 3/4.
  • Zero JavaScript build is a genuine architectural win — nothing to compile, version, or CSP-whitelist; styling is namespaced under .fi-rating*, which limits bleed into the rest of the panel.
  • Rating is stored as a scalar on the host model. The package owns rendering and validation only; the schema (integer vs. decimal) remains our responsibility — see the half-star caveat below.

Integration feasibility

  • Install is a single composer require; no asset publishing pipeline, no npm step, no queue or migration footprint. Realistically a same-day spike for one engineer.
  • Claimed API compatibility with mokhosh/filament-rating (stars(), allowZero(), color(), size(), theme(RatingTheme::...)) means an existing rating UI can be swapped by namespace change alone — attractive if we already have ratings in a panel, but it is a claim that must be proven against our actual call sites, not accepted from release notes.
  • Validation is declared as numeric, in-range, and on-step; half-star support implies the step is 0.5. That is a data-model decision as much as a UI one.

Technical risk

  • v1.0.0 is the first stable release: no upgrade history, no deprecation record, and therefore no evidence of how the maintainer handles breaking changes.
  • Ecosystem-maturity risk is inherited from Filament 5 itself; a young major version plus a young plugin compounds the chance of a forced upgrade.
  • Accessibility is the strongest differentiator and the reason to prefer this over a hand-rolled star widget: role="slider", arrow/Home/End/Delete keys, aria-valuetext ("3 of 5 stars"), role="img" equivalents on column and entry, RTL mirroring, panel-driven dark mode. Building and testing that in-house is materially more expensive than adopting it.
  • Half stars are the main functional hazard: an integer column will silently truncate, and existing integer data cannot express 0.5. Adoption on an existing table needs a column-type migration, not just a UI swap.
  • Translation coverage is broad but shallow (10 locales); unlisted locales fall back to the package default, which should be confirmed as English rather than an empty string.

Key questions

  • What is the license, and who maintains it? Bus factor and the package's release cadence matter more than feature count at v1.0.0.
  • What are the exact Composer constraints on filament/filament and livewire/livewire, and is there a CI matrix proving 5.x minor compatibility?
  • Is mokhosh/filament-rating API compatibility verified by a test suite, or asserted in prose? Which methods are not mirrored?
  • Does RatingColumn support sorting and filtering (e.g. "show 4+ star records"), or is it display-only?
  • Does the field behave correctly inside repeaters, relation managers, modals, and wizard steps — the places Filament state handling usually breaks?
  • What is the intended storage type and cast for half-star values, and is there a documented migration path from integer ratings?
  • Is the step validated server-side as well as client-side, and does clearable() map to null or 0 in the payload — the distinction affects nullable columns and "no rating yet" reporting.

Integration Approach

Stack fit

  • Requires PHP 8.2+, Laravel 11/12, Filament 5. Fits any panel already on Filament 5; is a non-starter for Filament 3/4 panels without first completing that upgrade.
  • Best suited to internal/admin surfaces — support ticket satisfaction, QA scoring, content quality review, vendor assessment — where a lightweight, accessible rating input is worth more than a bespoke component.
  • Poor fit for public-facing, high-volume customer input where we need custom visual identity or analytics instrumentation beyond a scalar.

Migration path

  • Greenfield: adopt directly, define the column as decimal(2,1) (or equivalent) from day one so half stars remain available without a later migration.
  • From mokhosh/filament-rating: inventory every Rating/column/entry usage, swap the namespace, and diff behavior against the compatibility list. Treat any method absent from the release notes as unverified.
  • From a hand-rolled widget: replace the component but keep the underlying column and any aggregate/reporting queries untouched — this package changes presentation only.

Compatibility

  • Watch two seams: Filament minor releases (field internals are not a stable public API) and Livewire (state hydration in nested components).
  • CSS is namespaced, so panel theme overrides should be additive; verify against our panel's custom theme build if one exists.
  • RTL and dark mode are handled, which removes two common reasons to fork a UI package.
  • Confirm the translation fallback behavior in a non-listed locale before shipping to a multi-region admin base.

Sequencing

  1. Spike: install in a scratch panel, exercise field/column/entry, verify accessibility with keyboard-only and a screen reader, confirm half-star persistence to a decimal column.
  2. Migration audit: enumerate existing rating call sites and column types; decide integer-vs-decimal per table.
  3. Pilot: one low-traffic admin resource for a full release cycle, including a Filament minor upgrade if one lands in the window.
  4. Rollout: remaining resources; only then remove the incumbent package and its assets.
  5. Contingency: keep the swap reversible behind a small internal wrapper component so an upstream regression does not require touching every call site.

Operational Impact

Maintenance

  • Low steady-state burden: no JS toolchain, no compiled assets, no runtime services. Upkeep is essentially Composer constraint bumps tracking Filament minors.
  • Cost concentrates at upgrade boundaries — Filament major bumps will require a matching plugin release, and with a single v1.0.0 release there is no track record of turnaround time.
  • Pin the version and treat Filament upgrades as a paired change (framework + plugin) rather than independent ones.

Support

  • Accessibility semantics are the support story: keyboard operability and ARIA labelling reduce the volume of "cannot use the rating control" tickets and lower our own a11y audit exposure.
  • Ten bundled locales reduce translation requests for our main markets; anything outside that list becomes an internal i18n task.
  • Debugging is straightforward — the failure surface is CSS and Filament state, not network or background processing — so first-line triage can stay with the feature team.

Scaling

  • Effectively free: server-rendered markup, no JS bundle, no client-side state store, no additional queries beyond the host resource's own. Cost scales with the page, not with the widget.
  • Safe to use on high-row-count tables since the column is pure rendering; confirm sorting/filtering support before promising it in a data-dense screen.
  • No CDN, cache, or asset-versioning concerns.

Failure modes

  • Integer column + halfStars() → silent truncation of 0.5 values. Highest-likelihood data-integrity failure; mitigate with the decimal column decision at step 1 of sequencing.
  • Filament minor upgrade changes field internals → field renders but loses interactivity or ARIA state. Mitigate with the internal wrapper and a smoke test in CI.
  • clearable() semantics (null vs. 0) misinterpreted downstream → "unrated" records counted as one-star in reporting. Verify and document the mapping.
  • API-compatibility gap with mokhosh/filament-rating → a method we rely on is missing or renamed, surfacing only in production. Mitigate by exercising every call site during the migration audit.
  • CSS specificity conflict with a customized panel theme → mis-sized or mis-colored stars. Contained by the namespaced stylesheet, but still worth a visual check in the pilot.
  • Unlisted locale → untranslated aria-valuetext, which degrades the accessibility win precisely where it matters. Confirm fallback before multi-region rollout.
  • Maintainer abandonment at v1.0.0 → no patch for a future Filament major. Acceptable given the small surface area (we could vendor or reimplement), but factor it into the build-vs-adopt call.

Ramp-up

  • Very low. A Laravel developer fluent in Filament is productive within an hour; the API is a handful of fluent modifiers and the components follow Filament conventions.
  • Front-end involvement is limited to theme verification — no component authoring required.
  • Budget the real effort in two places instead: the accessibility acceptance test (once, reusable) and the column-type migration decision (per table). Both are one-time costs that make the package cheap to operate thereafter.

Overall: a low-risk, narrowly scoped adoption that is worth taking primarily for the accessibility and zero-build-asset properties, not for feature breadth. Gate the decision on the license/maintainer questions, on verified mokhosh compatibility, and on a decimal-aware storage decision made before the first production write.

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.
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast