sylius/payments-bundle
The Sylius Payments Bundle provides the payment foundation for Sylius e-commerce stores, including payment method management, gateway integrations, and transaction handling for checkout and order workflows. It offers extensible services and interfaces for building custom payment providers.
Payment, PaymentMethod, gateway configuration, a payment state machine (new → pending → completed / failed), multiple payments per order, refunds, and partial payments. A PM can lift that vocabulary directly into a PRD or data-modeling doc without writing a line of PHP. That is the highest-value use of this package.composer.lock, that is a status signal: the application is pinned to a pre-consolidation Sylius payments layer. The decision it supports is "when and how do we upgrade," not "should we adopt."[READ-ONLY] For BC purposes banner mean no maintainer, no release cadence, and no CVE path. That belongs in a supportability/security review line item, sized and owned — not in a feature backlog.Legitimate, narrow uses:
Look elsewhere — usually the platform's own payment component or a maintained gateway SDK — when:
laravel/cashier, stripe/stripe-php, or Omnipay. A Symfony bundle cannot be dropped into a Laravel app without running a parallel Symfony kernel and sharing a database, which is a net-negative architecture decision. Close the evaluation.Rule of thumb: if it is already in the tree, treat it as a migration trigger. If it is not, do not add it.
One line for executives: This is not a product opportunity — it is a status indicator and a modeling reference. If it is in our stack, our payments layer is end-of-life and the decision in front of us is an upgrade, not an adoption.
The framing:
For engineering:
Recommendation with a decision date:
Anti-pitch, to close the loop: do not let "it's already integrated and it's free" win the room. Zero stars, zero dependents, and a read-only banner describe precisely the dependency you least want under your checkout. The maintenance risk is real; the convenience is temporary.
How can I help you explore Laravel packages today?