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

Voting Bundle Laravel Package

msalsas/voting-bundle

A Symfony bundle that adds a flexible voting system to your Doctrine entities. Let users upvote or downvote items anonymously or as registered voters, store votes via Doctrine, and display results with built-in Twig helpers.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Feature scoping for engagement mechanics. The package encodes a standard up/down voting domain model — a Votable contract on any entity, a persisted Vote record, a manager/service that toggles and tallies votes, and events hooking into the lifecycle. That's a usable checklist for scoping an MVP feature (feature-request boards, comment ranking, content "helpful" signals, review scores) even if we never install it.
  • Build vs. buy, answered as "build." With 14 stars, 0 dependents, and a low overall score, there is no community, no support surface, and no evidence of production use. The buy case collapses; the real decision becomes port the pattern in-house vs. adopt a maintained Laravel-native alternative.
  • Data-model decisions worth locking early. Per-vote rows vs. denormalized counters, whether votes are polymorphic across content types, whether anonymous/IP-based voting is allowed, and how vote revocation and re-voting behave. These are the choices that determine whether ranking queries scale — and they're cheap to settle at design time, expensive later.
  • Roadmap sequencing and de-prioritization. The maturity signals (near-zero adoption, framework mismatch) tell us voting is a "commodity" feature we should implement thinly and not staff a platform team around. It argues for shipping a minimal vote primitive behind an interface, with room to swap in weighted or star ratings later.
  • Ranking/sorting as a product surface. Once votes exist, "sort by score," "top this week," and decayed ranking become candidate roadmap items — worth flagging as follow-ons rather than baking into v1.

When to Consider This Package

Important caveat up front: this is a Symfony bundle, not a Laravel package. It depends on Symfony's DI container, Doctrine entities, Twig helpers, and (in the era it was written) likely FOSUserBundle and annotation-based configuration. It will not drop into a Laravel app. Treat it as a reference implementation and design spec, not a dependency.

Consider adopting it (or its patterns directly) only when:

  • You're on a legacy Symfony 2/3 codebase that already uses Doctrine and FOSUserBundle, and you need simple up/down voting on existing entities quickly.
  • The feature is low-stakes and internal — an intranet idea board, an admin-side prioritization widget — where a stale dependency is an acceptable trade for a few days of saved work.
  • You need polymorphic voting across many entity types and want a pre-modeled Votable interface to copy rather than design.
  • You're explicitly mining it for structure: the MIT license lets you lift the entity fields, service boundaries, and event hooks into your own code with no attribution burden beyond the notice.

Look elsewhere — or build a small in-house service — when:

  • You're on Laravel (the stated context). Use a maintained Laravel package for likes/upvotes, or implement a ~1-table, ~1-service solution yourself. The domain is small enough that a dependency is often more risk than it removes.
  • You're on modern Symfony (5/6/7). Annotation-era bundles and FOSUserBundle coupling are a migration tax, not a shortcut.
  • You need weighted, multi-criteria, or star ratings, or reputation/badge systems — this is binary up/down territory.
  • Abuse resistance matters: anonymous voting, IP capture, and vote-stuffing protection are the hard part of voting, and a 14-star bundle is not where you want your fraud logic to live.
  • You need auditability, moderation, or vote history for compliance or trust-and-safety reasons.
  • You need scale on ranking queries — you'll want your own counters/caching strategy regardless of what the package does.

How to Pitch It (Stakeholders)

To executives (one paragraph): We evaluated this library as a shortcut for adding voting/rating to the product and recommend against adopting it as a dependency. It has effectively zero adoption (14 stars, no dependent projects) and is built for Symfony, not our Laravel stack — meaning no support, no security patch path, and a porting cost anyway. Its permissive MIT license does let us legally reuse its design, so we get the useful part — a proven, conventional data model for votes and ranked content — for the cost of a few engineering days, without inheriting an unmaintained dependency. Net: same feature, lower long-term risk, no vendor lock.

To engineering (the ask): Don't add msalsas/voting-bundle. Use it as a reference for the Votable interface, vote entity shape, and vote lifecycle events. Build a thin internal VoteService behind an interface (vote, unvote, toggle, scoreFor, rankedQuery), with per-vote rows plus a denormalized counter, and anonymous-vote handling as an explicit decision rather than an inherited default. If we want a maintained off-the-shelf option, evaluate a Laravel-native likes/votes package against the same interface — swapping it later should be a one-file change.

Bottom line for the roadmap: voting is a commodity engagement primitive. Ship it small, own the abuse and ranking logic, and revisit weighted/decayed ranking only if engagement data justifies it.

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.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource