yepsua/filament-rating-field
A Filament form field that adds interactive star ratings to your admin panels. Let users rate with a simple, customizable stars component for forms and tables.
Architecture fit. Unchanged by v0.7.0. yepsua/filament-rating-field remains a narrow, single-purpose Filament form component — a star-rating field type contributed to the Filament schema builder. It does not touch the domain layer, the persistence layer, routing, auth, or the queue. It renders a Livewire-bound form control and stores whatever scalar the developer binds to it. If our admin/back-office surface is already Filament (TALL stack: Laravel + Livewire + Alpine + Tailwind), the fit is essentially native — it is a Field subclass that composes into ->schema([...]) alongside TextInput, Select, and friends. If our surface is not Filament, this package has zero applicability and should be rejected immediately regardless of score.
Integration feasibility. High, and cheap to prove. The integration surface is three lines: a composer require, optionally a plugin registration in the PanelProvider, and a field declaration in the target form schema. Because the blast radius is a single form component, we can validate it end-to-end in an afternoon against a real form and a real Eloquent model. The MIT license removes legal friction. The main feasibility question is not "can we wire it up" but "does it render correctly and persist predictably under our Filament version."
What v0.7.0 changes. One thing, and it is small: PR #25 (new contributor @atmonshi) removes the illuminate/contracts dependency so the package no longer constrains the Laravel version. Net effect on our evaluation:
illuminate/contracts constraint could produce a Composer conflict or force a Laravel pin we didn't want; now the package composes with whatever Laravel we run. It also confirms the maintainer merges outside PRs — a modest bus-factor and responsiveness signal that partially answers our earlier "is the maintainer responsive?" question.Technical risk. Still concentrated in version coupling and bus-factor, with the coupling risk now asymmetric:
Filament\Forms\Components\Field, so it inherits every breaking change in that base class and in Livewire's binding contract. v0.7.0 says nothing about Filament constraints; this is invisible from the star count and is now the dominant unmitigated coupling.yepsua). Still hobby-to-semi-maintained. Acceptable for a 200-line form widget; disqualifying for infrastructure.composer.json change reinforces how small the maintainable surface is.Key questions to resolve before adoption (revised):
composer.json constrain, and does that match our pinned Filament version exactly? (Now the primary question — v0.7.0 addressed Laravel but not Filament.)require block actually contain? If Laravel is now entirely unconstrained, we must own the compatibility matrix ourselves.Stack fit. Adopt only if the target surface is Filament on Laravel 10/11 with PHP 8.1+ and Livewire 3. v0.7.0 widens the theoretical Laravel range but we should treat the validated range as whatever we test, not whatever composer.json permits. The field remains a presentation-layer convenience, not a data-model decision: we specify the column type and validation ourselves and let the widget bind to it. Do not let a third-party widget dictate schema.
Migration path. Greenfield-friendly, brownfield-cautious, and the v0.7.0 upgrade itself is a no-op for us:
Select, or a manual Alpine component, the migration is per-form and reversible — swap the field, keep the column. No data migration required.Compatibility. Pinning is now mandatory, not advisory. Add the package with an exact constraint ("yepsua/filament-rating-field": "0.7.*") rather than a caret range, and record in our dependency notes both the Filament version and the Laravel version we validated against. With illuminate/contracts removed, there is no resolver-level signal at all — neither community dependents nor a Laravel ceiling — so we are the entire compatibility test. Review the v0.6.0 → v0.7.0 diff before upgrading: it should be a single composer.json line, and confirming that is a two-minute check that keeps the "we read diffs" discipline honest.
Sequencing.
Maintenance. Low ongoing cost, non-trivial ownership cost — and v0.7.0 slightly improves the first while slightly raising the second. The package itself will require little attention, and the removal of the illuminate/contracts constraint means fewer Composer conflicts to chase on Laravel upgrades. But because the package now claims unbounded Laravel support, someone must own the compatibility watch on two axes: re-validating this field on every Filament minor/major bump, and spot-checking it on every Laravel minor. Budget a recurring line item: roughly one hour per Filament release plus a few minutes per Laravel release to smoke-test, and the fork exercise if it breaks. The new-contributor signal from PR #25 modestly reduces — but does not eliminate — the risk of the maintainer going quiet.
Support. No SLA, no vendor relationship, community-only. Our support model must be "internal owner or nobody." Escalation path is: upstream issue → fork. PR #25 is weak evidence that upstream issues get attention; it is not a support channel. Document this in the dependency register so on-call doesn't waste time waiting on a maintainer.
Scaling. Effectively a non-issue. The field is client-side rendering plus one Livewire round-trip per interaction — no different from any other form control. Two cautions: (a) Livewire round-trips on hover/click can be chatty if the field is bound with live(); prefer deferred binding unless the rating drives reactive UI; (b) if ratings are aggregated for reporting, the widget is irrelevant — the index and query plan on the ratings column are our problem and must be designed independently. Do not mistake "small widget" for "small data model."
Failure modes.
illuminate/contracts constraint, an unrelated Laravel upgrade can move the package outside anything the maintainer tested, and Composer will stay silent. Mitigation: the same persistence test in CI, plus an explicit note in the upgrade runbook that this dependency has no upper bound.dev-main. The new contributor is a positive signal but also a reminder that manifest changes arrive from outside the original author.Ramp-up. Near-zero for any developer already fluent in Filament — the field is declarative and self-documenting. Expect ~30 minutes for a Filament-competent engineer, and treat it as a non-topic for anyone else (non-Filament engineers should not be touching this form layer at all). No re-training implied by v0.7.0; behavior is unchanged.
TPM verdict. v0.7.0 is a low-risk, mildly favorable release: it removes the Laravel constraint that was one of our two stated coupling concerns, and it demonstrates the maintainer will merge outside contributions. It does not touch the dominant risk (Filament version coupling), does not add features (half-stars, read-only), and does not change the zero-dependents reality — it trades a Composer-visible guardrail for an unbounded support claim, which raises the value of our own CI and pinning discipline. Recommendation stands: pilot-approve with an explicit fork budget and a named internal owner, upgrade to 0.7.* after a two-minute diff review and a re-run of the persistence test. Adopt for internal admin surfaces where a star rating is a nice-to-have; do not adopt for customer-facing or revenue-critical UI without first forking it into our namespace, because the combination of zero dependents, 47 stars, no Laravel ceiling, and Filament's volatile field API means we — not the maintainer — will be absorbing every future break.
How can I help you explore Laravel packages today?